# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/05/25 22:24:29-07:00 torvalds@ppc970.osdl.org # Remove bogus test preprocessor test. # # PAGE_SIZE isn't even always defined at this point, # which makes us test undefined preprocessor symbols. # # It so happens that the test works in that case, # but since the test is a bit pointless in the first # place... # # include/asm-ppc64/thread_info.h # 2004/05/25 22:24:23-07:00 torvalds@ppc970.osdl.org +0 -4 # Remove bogus test preprocessor test. # # PAGE_SIZE isn't even always defined at this point, # which makes us test undefined preprocessor symbols. # # It so happens that the test works in that case, # but since the test is a bit pointless in the first # place... # # ChangeSet # 2004/05/25 22:22:33-07:00 torvalds@ppc970.osdl.org # Make constant types explicit, rather than depend on # some rather subtle C type expansion rules. # # This makes sparse happier. # # include/linux/idr.h # 2004/05/25 22:22:27-07:00 torvalds@ppc970.osdl.org +2 -2 # Make constant types explicit, rather than depend on # some rather subtle C type expansion rules. # # include/asm-ppc64/page.h # 2004/05/25 22:22:27-07:00 torvalds@ppc970.osdl.org +12 -10 # Make constant types explicit, rather than depend on # some rather subtle C type expansion rules. # # include/asm-ppc64/mmu_context.h # 2004/05/25 22:22:27-07:00 torvalds@ppc970.osdl.org +2 -2 # Make constant types explicit, rather than depend on # some rather subtle C type expansion rules. # # include/asm-ppc64/mmu.h # 2004/05/25 22:22:27-07:00 torvalds@ppc970.osdl.org +1 -1 # Make constant types explicit, rather than depend on # some rather subtle C type expansion rules. # # ChangeSet # 2004/05/25 22:21:34-07:00 torvalds@ppc970.osdl.org # Don't return void types from void functions. # # This helps reduce sparse noise. # # include/asm-ppc64/eeh.h # 2004/05/25 22:21:29-07:00 torvalds@ppc970.osdl.org +3 -3 # Don't return void types from void functions. # # drivers/net/tokenring/olympic.c # 2004/05/25 22:21:29-07:00 torvalds@ppc970.osdl.org +1 -1 # Don't return void types from void functions. # # ChangeSet # 2004/05/25 13:09:27-07:00 sxking@qwest.net # [IPSEC]: Fix buglet in AF_KEY spddelete # # When trying to spddelete individual entries using setkey, spddelete always # fails. The culprit is in net/af_key.c; spdadd sets the family field of the # selector when creating an entry, but spddelete doesn't when building a # selector to match for xfrm_policy_bysel. Trivial fix is to have spddelete # set the family field in the selector in same way spdadd does. # # net/key/af_key.c # 2004/05/25 13:09:13-07:00 sxking@qwest.net +1 -1 # [IPSEC]: Fix buglet in AF_KEY spddelete # # When trying to spddelete individual entries using setkey, spddelete always # fails. The culprit is in net/af_key.c; spdadd sets the family field of the # selector when creating an entry, but spddelete doesn't when building a # selector to match for xfrm_policy_bysel. Trivial fix is to have spddelete # set the family field in the selector in same way spdadd does. # # ChangeSet # 2004/05/25 13:06:21-07:00 davem@nuts.davemloft.net # [TG3]: Update driver version and reldate. # # drivers/net/tg3.c # 2004/05/25 13:06:06-07:00 davem@nuts.davemloft.net +2 -2 # [TG3]: Update driver version and reldate. # # ChangeSet # 2004/05/25 13:04:59-07:00 torvalds@ppc970.osdl.org # Introduce architecture-specific "ptep_update_dirty_accessed()" # helper function to write-back the dirty and accessed bits from # ptep_establish(). # # Right now this defaults to the same old "set_pte()" that we've # always done, except for x86 where we now fix the (unlikely) # race in updating accessed bits and dropping a concurrent dirty # bit. # # include/asm-i386/pgtable.h # 2004/05/25 13:04:54-07:00 torvalds@ppc970.osdl.org +10 -0 # Introduce architecture-specific "ptep_update_dirty_accessed()" # helper function to write-back the dirty and accessed bits from # ptep_establish(). # # Right now this defaults to the same old "set_pte()" that we've # always done, except for x86 where we now fix the (unlikely) # race in updating accessed bits and dropping a concurrent dirty # bit. # # include/asm-generic/pgtable.h # 2004/05/25 13:04:54-07:00 torvalds@ppc970.osdl.org +6 -1 # Introduce architecture-specific "ptep_update_dirty_accessed()" # helper function to write-back the dirty and accessed bits from # ptep_establish(). # # Right now this defaults to the same old "set_pte()" that we've # always done, except for x86 where we now fix the (unlikely) # race in updating accessed bits and dropping a concurrent dirty # bit. # # ChangeSet # 2004/05/25 13:04:23-07:00 akepner@sgi.com # [TG3]: Make sure RX/TX flow control settings actually get set. # # drivers/net/tg3.c # 2004/05/25 13:04:09-07:00 akepner@sgi.com +10 -0 # [TG3]: Make sure RX/TX flow control settings actually get set. # # ChangeSet # 2004/05/25 12:37:15-07:00 torvalds@ppc970.osdl.org # Pass in a "dirty" argument to ptep_establish in # preparation for pte update race fix. # # This does not actually use the information yet, but # the next few patches will start to put it to some # good use. # # mm/memory.c # 2004/05/25 12:37:09-07:00 torvalds@ppc970.osdl.org +3 -3 # Pass in a "dirty" argument to ptep_establish in # preparation for pte update race fix. # # This does not actually use the information yet, but # the next few patches will start to put it to some # good use. # # include/asm-s390/pgtable.h # 2004/05/25 12:37:09-07:00 torvalds@ppc970.osdl.org +2 -1 # Pass in a "dirty" argument to ptep_establish in # preparation for pte update race fix. # # This does not actually use the information yet, but # the next few patches will start to put it to some # good use. # # include/asm-generic/pgtable.h # 2004/05/25 12:37:09-07:00 torvalds@ppc970.osdl.org +1 -1 # Pass in a "dirty" argument to ptep_establish in # preparation for pte update race fix. # # This does not actually use the information yet, but # the next few patches will start to put it to some # good use. # # ChangeSet # 2004/05/25 11:11:46-07:00 ak@muc.de # [PATCH] Fix nodemask clearing bug in NUMA API # # Fix over long nodemask clearing in get_mem_policy() by using the # right size for the node mask. # # mm/mempolicy.c # 2004/05/25 10:59:34-07:00 ak@muc.de +5 -6 # Fix nodemask clearing bug in NUMA API # # ChangeSet # 2004/05/25 11:04:01-07:00 linux-kernel@vortech.net # [VLAN]: Use KERN_INFO for VLAN_INF. # # net/8021q/vlan.h # 2004/05/25 11:03:48-07:00 linux-kernel@vortech.net +1 -1 # [VLAN]: Use KERN_INFO for VLAN_INF. # # ChangeSet # 2004/05/25 11:02:48-07:00 herbert@gondor.apana.org.au # [IPSEC]: Use add_timer() in xfrm_state_find. # # net/xfrm/xfrm_state.c # 2004/05/25 11:02:35-07:00 herbert@gondor.apana.org.au +2 -1 # [IPSEC]: Use add_timer() in xfrm_state_find. # # ChangeSet # 2004/05/25 11:02:07-07:00 herbert@gondor.apana.org.au # [IPSEC]: Fix outdated comment in __xfrm_state_delete. # # net/xfrm/xfrm_state.c # 2004/05/25 11:01:54-07:00 herbert@gondor.apana.org.au +3 -7 # [IPSEC]: Fix outdated comment in __xfrm_state_delete. # # ChangeSet # 2004/05/25 11:01:22-07:00 herbert@gondor.apana.org.au # [IPSEC]: Do not leak entries in xfrm_state_find. # # In xfrm_state_find, the larval state never actually matures with # Openswan so it only ever gets deleted by the timer which means # that the time crash can't happen :) It becomes a (possible) memory # leak instead. # # net/xfrm/xfrm_state.c # 2004/05/25 11:01:09-07:00 herbert@gondor.apana.org.au +6 -10 # [IPSEC]: Do not leak entries in xfrm_state_find. # # In xfrm_state_find, the larval state never actually matures with # Openswan so it only ever gets deleted by the timer which means # that the time crash can't happen :) It becomes a (possible) memory # leak instead. # # ChangeSet # 2004/05/25 10:58:43-07:00 shemminger@osdl.org # [BRIDGE]: Update bridge.txt # # Trent Jarvi <taj@www.linux.org.uk> noticed this. The file was out of date # with current web site and maintainer. Please apply to 2.4 and 2.6. # # Signed-off-by: Stephen Hemminger <shemminger@osdl.org> # # Documentation/networking/bridge.txt # 2004/05/25 10:58:30-07:00 shemminger@osdl.org +6 -9 # [BRIDGE]: Update bridge.txt # # Trent Jarvi <taj@www.linux.org.uk> noticed this. The file was out of date # with current web site and maintainer. Please apply to 2.4 and 2.6. # # Signed-off-by: Stephen Hemminger <shemminger@osdl.org> # # ChangeSet # 2004/05/25 10:27:46-07:00 paulus@samba.org # [PATCH] IRQ stacks for PPC64 # # Even with a 16kB stack, we have been seeing stack overflows on PPC64 # under stress. This patch implements separate per-cpu stacks for # processing interrupts and softirqs, along the lines of the # CONFIG_4KSTACKS stuff on x86. At the moment the stacks are still 16kB # but I hope we can reduce that to 8kB in future. (Gcc is capable of # adding instructions to the function prolog to check the stack pointer # whenever it moves it downwards, and I want to use that when I try # using 8kB stacks so I can be confident that we aren't overflowing the # stack.) # # Signed-off-by: Paul Mackerras <paulus@samba.org> # # include/asm-ppc64/irq.h # 2004/05/25 00:31:51-07:00 paulus@samba.org +21 -1 # IRQ stacks for PPC64 # # include/asm-ppc64/bitops.h # 2004/05/25 00:31:51-07:00 paulus@samba.org +14 -0 # IRQ stacks for PPC64 # # arch/ppc64/kernel/setup.c # 2004/05/25 00:51:56-07:00 paulus@samba.org +19 -0 # IRQ stacks for PPC64 # # arch/ppc64/kernel/process.c # 2004/05/25 01:10:19-07:00 paulus@samba.org +12 -0 # IRQ stacks for PPC64 # # arch/ppc64/kernel/misc.S # 2004/05/25 00:31:51-07:00 paulus@samba.org +24 -0 # IRQ stacks for PPC64 # # arch/ppc64/kernel/irq.c # 2004/05/25 00:49:37-07:00 paulus@samba.org +69 -4 # IRQ stacks for PPC64 # # arch/ppc64/Kconfig # 2004/05/25 00:31:51-07:00 paulus@samba.org +7 -0 # IRQ stacks for PPC64 # # ChangeSet # 2004/05/25 10:06:18-07:00 mingo@elte.hu # [PATCH] x86-bigsmp: use fixed interrupt delivery # # This patch, from Venkatesh Pallipadi, changes x86 IO-APICs to use fixed # interrupt delivery instead of lowest priority to support larger number # of CPUs. Only bigsmp is affected by this cleanup. # # From: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> # Signed-off-by: Ingo Molnar <mingo@elte.hu> # # include/asm-i386/mach-bigsmp/mach_apic.h # 2004/05/24 17:00:00-07:00 mingo@elte.hu +11 -25 # x86-bigsmp: use fixed interrupt delivery # # include/asm-i386/hw_irq.h # 2004/05/24 17:00:00-07:00 mingo@elte.hu +1 -1 # x86-bigsmp: use fixed interrupt delivery # # arch/i386/kernel/smpboot.c # 2004/05/24 17:00:00-07:00 mingo@elte.hu +1 -2 # x86-bigsmp: use fixed interrupt delivery # # arch/i386/kernel/io_apic.c # 2004/05/24 17:00:00-07:00 mingo@elte.hu +2 -2 # x86-bigsmp: use fixed interrupt delivery # # ChangeSet # 2004/05/25 08:45:46-07:00 akpm@osdl.org # [PATCH] missing compat ioctl mapping for DM_REMOVE_ALL # # Signed-off-by: Marcus Meissner <meissner@suse.de> # # Added missing DM_REMOVE_ALL call. # # include/linux/compat_ioctl.h # 2004/05/25 03:39:34-07:00 akpm@osdl.org +1 -0 # missing compat ioctl mapping for DM_REMOVE_ALL # # ChangeSet # 2004/05/25 08:45:35-07:00 akpm@osdl.org # [PATCH] sched_yield() microoptimisation # # Signed-off-by: Ingo Molnar <mingo@elte.hu> # # We can avoid the local_irq_enable() in sched_yield() because schedule() # unconditionally enables interrupts anyway. # # kernel/sched.c # 2004/05/25 02:53:10-07:00 akpm@osdl.org +1 -2 # sched_yield() microoptimisation # # ChangeSet # 2004/05/25 08:45:24-07:00 akpm@osdl.org # [PATCH] sched.h comment typo fix # # Signed-off-by: Christian Meder <chris@onestepahead.de> # Signed-off-by: Ingo Molnar <mingo@elte.hu> # # sched.h typo fix from Christian Meder. # # include/linux/sched.h # 2004/05/25 02:53:10-07:00 akpm@osdl.org +1 -1 # sched.h comment typo fix # # ChangeSet # 2004/05/25 08:45:13-07:00 akpm@osdl.org # [PATCH] Subject: Re: Help understanding slow down # # Signed-off-by: Ingo Molnar <mingo@elte.hu> # # Add a warning that "idle=poll" is a performance hit on hyperthreaded CPUs. # # arch/i386/kernel/process.c # 2004/05/25 02:53:10-07:00 akpm@osdl.org +4 -0 # Subject: Re: Help understanding slow down # # ChangeSet # 2004/05/25 08:45:03-07:00 akpm@osdl.org # [PATCH] No interpretation of HD spindown timeout in laptop mode ACPI binding script. # # From: Bart Samwel <bart@samwel.tk> # # Currently the ACPI binding script in the Laptop Mode doc always says "20 # seconds" and "2 hours" for the timeouts it uses. This is incorrect if the # user changed the config values, so we print something more general. # # Documentation/laptop-mode.txt # 2004/05/25 02:53:09-07:00 akpm@osdl.org +2 -2 # No interpretation of HD spindown timeout in laptop mode ACPI binding script. # # ChangeSet # 2004/05/25 08:44:52-07:00 akpm@osdl.org # [PATCH] rmap build fix # # From: William Lee Irwin III <wli@holomorphy.com> # # PMD_SIZE is not a compile-time constant on sparc. Use min() in there so # that the cluster size will be evaluated at runtime if the architecture # insists on doing that. # # mm/rmap.c # 2004/05/25 02:53:09-07:00 akpm@osdl.org +1 -5 # rmap build fix # # ChangeSet # 2004/05/25 08:44:41-07:00 akpm@osdl.org # [PATCH] ir-kbd-gpio.c build fix # # It's initialising slot 24 in two places. Gerd Knorr <kraxel@bytesex.org> says # "This one should be 23.". # # drivers/media/video/ir-kbd-gpio.c # 2004/05/25 02:53:09-07:00 akpm@osdl.org +1 -1 # ir-kbd-gpio.c build fix # # ChangeSet # 2004/05/25 08:44:29-07:00 akpm@osdl.org # [PATCH] Revert bogus x86-64 change # # From: Andi Kleen <ak@muc.de> # # The 32bit generic nops added with a previous patch to x86-64 alternative() # are not completely 64bit clean. This caused crashes in some cases. This # patch reverts this broken change. # # include/asm-x86_64/processor.h # 2004/05/25 02:53:09-07:00 akpm@osdl.org +0 -20 # Revert bogus x86-64 change # # ChangeSet # 2004/05/25 08:44:14-07:00 akpm@osdl.org # [PATCH] isapnp sb16 virtual pc # # From: David Sanders <linux@sandersweb.net> # # Patch adds support for the emulated Soundblaster 16 in Virtual PC 2004. # # sound/oss/sb_card.h # 2004/05/25 02:53:09-07:00 akpm@osdl.org +2 -0 # isapnp sb16 virtual pc # # sound/oss/sb_card.c # 2004/05/25 02:53:09-07:00 akpm@osdl.org +7 -0 # isapnp sb16 virtual pc # # sound/isa/sb/sb16.c # 2004/05/25 02:53:09-07:00 akpm@osdl.org +2 -0 # isapnp sb16 virtual pc # # ChangeSet # 2004/05/25 08:44:01-07:00 akpm@osdl.org # [PATCH] ext2: fix build with DEBUG=y # # From: FabF <fabian.frederick@skynet.be> # # fs/ext2/ialloc.c # 2004/05/25 02:53:09-07:00 akpm@osdl.org +2 -2 # ext2: fix build with DEBUG=y # # ChangeSet # 2004/05/25 08:43:49-07:00 akpm@osdl.org # [PATCH] minor sched.c cleanup # # Signed-off-by: Christian Meder <chris@onestepahead.de> # Signed-off-by: Ingo Molnar <mingo@elte.hu> # # The following obviously correct patch from Christian Meder simplifies the # DELTA() define. # # kernel/sched.c # 2004/05/25 02:58:45-07:00 akpm@osdl.org +1 -2 # minor sched.c cleanup # # ChangeSet # 2004/05/25 08:43:39-07:00 akpm@osdl.org # [PATCH] Really enable NUMA API on x86-64 # # From: Andi Kleen <ak@muc.de> # # Really enable the NUMA API system calls on x86-64. # # include/asm-x86_64/unistd.h # 2004/05/25 02:53:08-07:00 akpm@osdl.org +3 -3 # Really enable NUMA API on x86-64 # # ChangeSet # 2004/05/25 08:43:28-07:00 akpm@osdl.org # [PATCH] remap_file_pages: fix syscall declaration # # Signed-off-by: Hugh Dickins <hugh@veritas.com> # # sys_remap_file_pages is declared as asmlinkage in mm/fremap.c, but is the one # syscall declared without asmlinkage in include/linux/syscalls.h. # # include/linux/syscalls.h # 2004/05/25 02:53:08-07:00 akpm@osdl.org +1 -1 # remap_file_pages: fix syscall declaration # # ChangeSet # 2004/05/25 08:43:17-07:00 akpm@osdl.org # [PATCH] remap_file_pages: implement MAP_POPULATE for all protections # # Signed-off-by: Hugh Dickins <hugh@veritas.com> # # It seems eccentric to implement MAP_POPULATE only on PROT_NONE mappings: # do_mmap_pgoff is passing down prot, then sys_remap_file_pages verifies it's # not set. I guess that's an oversight from when we realized that the prot arg # to sys_remap_file_pages was misdesigned. # # There's another oddity whose heritage is harder for me to understand, so # please let me leave it to you: sys_remap_file_pages is declared as asmlinkage # in mm/fremap.c, but is the one syscall declared without asmlinkage in # include/linux/syscalls.h. # # mm/mmap.c # 2004/05/25 02:53:08-07:00 akpm@osdl.org +1 -1 # remap_file_pages: implement MAP_POPULATE for all protections # # ChangeSet # 2004/05/25 08:43:06-07:00 akpm@osdl.org # [PATCH] Fix for lockup in reiserfs acl/xattrs # # From: Jeff Mahoney <jeffm@suse.com> # # The following is a patch to fix a locking problem in ACL/xattr code. It # manifests when a user attempts to set an xattr on a file which they do # not own, and on which an ACL is applied. # # What happens is this: # reiserfs_setxattr [write lock inode xattr sem] # ->xattr_set # -> lookup # -> __reiserfs_permission [if conditions above are met, and need_lock= # is # unset, read lock inode xattr sem] *lockup* # # Since we already keep track of when to lock during permission calls, the # fix is simple: just make the locking conditional as it was before. # # Credits to Andreas Gruenbacher <agruen@suse.de> # # fs/reiserfs/xattr.c # 2004/05/25 02:53:08-07:00 akpm@osdl.org +6 -4 # Fix for lockup in reiserfs acl/xattrs # # ChangeSet # 2004/05/25 08:42:56-07:00 akpm@osdl.org # [PATCH] UDF: directory reading fix # # From: Ben Fennema <bfennema@falcon.csc.calpoly.edu> # # The problem occured when files were stored on the disc in 16-bit per # character mode when all the upper bits were 0. The fs module # converted the file name given by the user to a 8-bit per character # string to compare, so the comparison always failed. # # The patch maps the file from disc into the current locale and then # compares it directly to the file name given by the user. # # fs/udf/namei.c # 2004/05/25 02:53:08-07:00 akpm@osdl.org +11 -9 # UDF: directory reading fix # # ChangeSet # 2004/05/25 08:42:45-07:00 akpm@osdl.org # [PATCH] bk-kernel-howto reversion # # From: Rusty Russell <rusty@rustcorp.com.au> # # This one snuck through - Jeff prefers the bk:// addresses. # # Documentation/BK-usage/gcapatch # 2004/05/25 02:53:08-07:00 akpm@osdl.org +1 -1 # bk-kernel-howto reversion # # Documentation/BK-usage/bk-kernel-howto.txt # 2004/05/25 02:53:08-07:00 akpm@osdl.org +1 -1 # bk-kernel-howto reversion # # ChangeSet # 2004/05/25 08:42:34-07:00 akpm@osdl.org # [PATCH] CREDITS is unmaintained # # From: Adrian Bunk <bunk@fs.tum.de> # # This information seems to be quite outdated. # # MAINTAINERS # 2004/05/25 02:53:08-07:00 akpm@osdl.org +0 -5 # CREDITS is unmaintained # # ChangeSet # 2004/05/25 08:42:23-07:00 akpm@osdl.org # [PATCH] H8/300 ne driver module fix # # From: Yoshinori Sato <ysato@users.sourceforge.jp> # # - module support fix # # drivers/net/ne-h8300.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +22 -13 # H8/300 ne driver module fix # # drivers/net/Kconfig # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # H8/300 ne driver module fix # # drivers/net/8390.h # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # H8/300 ne driver module fix # # ChangeSet # 2004/05/25 08:42:12-07:00 akpm@osdl.org # [PATCH] H8/300 module fix # # From: Yoshinori Sato <ysato@users.sourceforge.jp> # # - fix relocation # - define SYMBOL_PREFIX # # scripts/mk_elfconfig.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # H8/300 module fix # # include/asm-h8300/module.h # 2004/05/25 02:53:07-07:00 akpm@osdl.org +2 -0 # H8/300 module fix # # arch/h8300/kernel/module.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +5 -5 # H8/300 module fix # # arch/h8300/kernel/h8300_ksyms.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +2 -0 # H8/300 module fix # # ChangeSet # 2004/05/25 08:42:00-07:00 akpm@osdl.org # [PATCH] Fix various memory leaks # # From: Yury Umanets <torque@ukrpost.net> # # Thanks to smatch I have found few memory leaks and other related issues. # # net/irda/ircomm/ircomm_tty.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +5 -1 # Fix various memory leaks # # drivers/video/aty/atyfb_base.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +24 -13 # Fix various memory leaks # # drivers/usb/misc/emi62.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +2 -0 # Fix various memory leaks # # drivers/usb/misc/emi26.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # Fix various memory leaks # # drivers/usb/input/hiddev.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # Fix various memory leaks # # ChangeSet # 2004/05/25 08:41:49-07:00 akpm@osdl.org # [PATCH] v4l: use saa7111 i2c module in V4L MXB driver # # From: Michael Hunold <hunold@convergence.de> # # The attached patch changes my "Multimedia eXtension Board" (MXB) # Video4Linux-driver to use the standard saa7111 video decoder infrastructure # (to which I recently submitted changes through Ronald Bultje) instead of # some home-brewn direct-access stuff. # # Nothing serious, but it removes code duplication and makes the code use the # video decoder api. # # drivers/media/video/mxb.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +69 -134 # v4l: use saa7111 i2c module in V4L MXB driver # # ChangeSet # 2004/05/25 08:41:40-07:00 akpm@osdl.org # [PATCH] initramfs uncpio fix # # From: <viro@parcelfarce.linux.theplanet.co.uk> # # init/initramfs.c::do_skip() has an off-by-one that leads to unpacking # failures for some gzipped cpio images. We have # # static int __init do_skip(void) # { # if (this_header + count <= next_header) { # eat(count); # return 1; # } else { # eat(next_header - this_header); # state = next_state; # return 0; # } # } # # and that <= should actually be <. It almost never matters, since if we hit # the boundary case (header ending exactly on the gunzip window end) the # current variant will simply end up doing extra call of do_skip() when we # get to the next window and that will finish the work (assign state). The # only exception is when we hit that in the last window. That is, if there's # nothing after the final header (trailer). Then we miss the final state # transition (Skip -> Reset) and get "junk in archive" panic. Normally # cpio(1) pads the image to multiple of 512, so we actually have a bunch of # zeroes after the trailer. And that almost always saves our butts - trailer # is followed by zeroes, so we get to Reset state just fine. # # So we never see that on small in-kernel image (it's less than 512 bytes, so # it gets a lot of padding) and we almost never see that on external ones # (1:127 odds of hitting the bug). # # init/initramfs.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # initramfs uncpio fix # # ChangeSet # 2004/05/25 08:41:29-07:00 akpm@osdl.org # [PATCH] FAT: small fixes # # From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> # # - use fat_fs_panic() instead of BUG() if it read a corrupted inode. # # - add missing "\n". # # fs/fat/inode.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # FAT: small fixes # # fs/fat/file.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +2 -1 # FAT: small fixes # # ChangeSet # 2004/05/25 08:41:18-07:00 akpm@osdl.org # [PATCH] swsusp: fix swsusp with intel-agp # # From: Pavel Machek <pavel@suse.cz> # # swsusp contained rather nasty bug where it killed machine when intel-agp or # anything else split kernel 4MB mapping. Herbert Xu diagnosed this. Fixed by # switching to "known good" mapping for during suspend/resume. # # arch/i386/power/swsusp.S # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # swsusp: fix swsusp with intel-agp # # arch/i386/power/pmdisk.S # 2004/05/25 02:53:07-07:00 akpm@osdl.org +1 -1 # swsusp: fix swsusp with intel-agp # # arch/i386/mm/init.c # 2004/05/25 02:53:07-07:00 akpm@osdl.org +21 -0 # swsusp: fix swsusp with intel-agp # # ChangeSet # 2004/05/25 08:41:07-07:00 akpm@osdl.org # [PATCH] Don't use "cut" in laptop mode control script -- it is in /usr. # # From: Bart Samwel <bart@samwel.tk> # # We don't want to use "cut" in the laptop mode control script, because that # is in /usr. This patch is from Jasper Spaans. # # Documentation/laptop-mode.txt # 2004/05/25 02:58:45-07:00 akpm@osdl.org +7 -1 # Don't use "cut" in laptop mode control script -- it is in /usr. # # ChangeSet # 2004/05/25 08:40:54-07:00 akpm@osdl.org # [PATCH] matroxfb: Add support for mapping CRTC<->outputs at boot time # # Signed-off-by: Petr Vandrovec <vandrove@vc.cvut.cz> # # Some people expressed interest in having possibility to set CRTC <-> # outputs mapping at boot time, without having to use 'matroxset' later after # kernel boots. # # This patch adds option 'video=matroxfb:outputs:XYZ', where X sets which # CRTC will connect to primary output, Y sets secondary output and Z sets DVI # output. # # In addition to that I also added missing memset() into maven, which was # broken since i2c was kobjectified. # # drivers/video/matrox/matroxfb_maven.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +2 -1 # matroxfb: Add support for mapping CRTC<->outputs at boot time # # drivers/video/matrox/matroxfb_g450.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +2 -2 # matroxfb: Add support for mapping CRTC<->outputs at boot time # # drivers/video/matrox/matroxfb_crtc2.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +0 -9 # matroxfb: Add support for mapping CRTC<->outputs at boot time # # drivers/video/matrox/matroxfb_base.h # 2004/05/25 02:53:06-07:00 akpm@osdl.org +1 -0 # matroxfb: Add support for mapping CRTC<->outputs at boot time # # drivers/video/matrox/matroxfb_base.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +54 -8 # matroxfb: Add support for mapping CRTC<->outputs at boot time # # drivers/video/matrox/matroxfb_Ti3026.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +1 -1 # matroxfb: Add support for mapping CRTC<->outputs at boot time # # drivers/video/matrox/matroxfb_DAC1064.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +2 -2 # matroxfb: Add support for mapping CRTC<->outputs at boot time # # ChangeSet # 2004/05/25 08:40:43-07:00 akpm@osdl.org # [PATCH] ext3: remove duplicated ext3_std_error() call # # From: Andi Kleen <ak@muc.de> # # When start_transaction() detects an error it already calls ext3_std_error. # No need to do it again in the caller. # # fs/ext3/inode.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +0 -2 # ext3: remove duplicated ext3_std_error() call # # ChangeSet # 2004/05/25 08:40:34-07:00 akpm@osdl.org # [PATCH] make i386 dma-mapping.h includeable standalone # # From: Christoph Hellwig <hch@lst.de> # # From: Debian kernel package, author probably Herbert Xu # # Include asm/io.h and asm/scatterlist.h in include/asm-i386/dma-mapping.h to # make it useable standalone, which is already true for most architectures. # # include/asm-i386/dma-mapping.h # 2004/05/25 02:53:06-07:00 akpm@osdl.org +2 -0 # make i386 dma-mapping.h includeable standalone # # ChangeSet # 2004/05/25 08:40:22-07:00 akpm@osdl.org # [PATCH] befs: typo fix # # From: "Sergey S. Kostyliov" <rathamahata@php4.ru> # # Fix a typo in an error message. # # fs/befs/linuxvfs.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +1 -1 # befs: typo fix # # ChangeSet # 2004/05/25 08:40:12-07:00 akpm@osdl.org # [PATCH] include linux/selection.h for color_table in drivers/video/tgafb.c # # From: Christoph Hellwig <hch@lst.de> # # From: Debian kernel package, author probably Herbert Xu # # drivers/video/tgafb.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +1 -0 # include linux/selection.h for color_table in drivers/video/tgafb.c # # ChangeSet # 2004/05/25 08:40:01-07:00 akpm@osdl.org # [PATCH] include linux/root_dev.h for ROOT_DEV in drivers/mtd/maps/uclinux.c # # From: Christoph Hellwig <hch@lst.de> # # * Include linux/root_dev.h for ROOT_DEV in drivers/mtd/maps/uclinux.c # # drivers/mtd/maps/uclinux.c # 2004/05/25 02:53:06-07:00 akpm@osdl.org +1 -0 # include linux/root_dev.h for ROOT_DEV in drivers/mtd/maps/uclinux.c # # ChangeSet # 2004/05/25 08:39:49-07:00 akpm@osdl.org # [PATCH] missing init.h in drivers/mtd/chips/sharp.c # # From: Christoph Hellwig <hch@lst.de> # # again needed by most non-x86 arches. # # * Include linux/init.h for __init # # drivers/mtd/chips/sharp.c # 2004/05/25 02:53:05-07:00 akpm@osdl.org +1 -0 # missing init.h in drivers/mtd/chips/sharp.c # # ChangeSet # 2004/05/25 08:39:38-07:00 akpm@osdl.org # [PATCH] add one more neomagic audio device id # # From: Christoph Hellwig <hch@lst.de> # # From: Mattia Monga via Debian kernel package # # Add support for nm256xl+ in sound/oss/nm256_audio.c # # sound/pci/nm256/nm256.c # 2004/05/25 02:53:05-07:00 akpm@osdl.org +7 -0 # add one more neomagic audio device id # # sound/oss/nm256_audio.c # 2004/05/25 02:53:05-07:00 akpm@osdl.org +5 -0 # add one more neomagic audio device id # # ChangeSet # 2004/05/25 08:39:28-07:00 akpm@osdl.org # [PATCH] remove a dead variable from isofs # # From: Christoph Hellwig <hch@lst.de> # # From: Debian kernel package, author is probably Herbert Xu # # * Do not get seqno since we will not use it in fs/isofs/inode.c # # fs/isofs/inode.c # 2004/05/25 02:53:05-07:00 akpm@osdl.org +1 -4 # remove a dead variable from isofs # # ChangeSet # 2004/05/25 08:39:18-07:00 akpm@osdl.org # [PATCH] fix a bash-ism in toplevel Makefile # # From: Christoph Hellwig <hch@lst.de> # # From: Debian kernel package, author probably Herbert Xu. # # * Fixed bashism in Makefile # # Makefile # 2004/05/25 02:53:05-07:00 akpm@osdl.org +1 -1 # fix a bash-ism in toplevel Makefile # # ChangeSet # 2004/05/25 08:39:07-07:00 akpm@osdl.org # [PATCH] befs: nls fix # # From: "Sergey S. Kostyliov" <rathamahata@php4.ru> # # Fix nls support for character sets with character width large than 1. # # fs/befs/linuxvfs.c # 2004/05/25 02:58:49-07:00 akpm@osdl.org +1 -1 # befs: nls fix # # ChangeSet # 2004/05/25 08:38:57-07:00 akpm@osdl.org # [PATCH] hfsplus: update dir time after change # # From: Roman Zippel <zippel@linux-m68k.org> # # Update dir ctime/mtime when adding/removing an entry. # # fs/hfsplus/catalog.c # 2004/05/25 02:53:05-07:00 akpm@osdl.org +4 -0 # hfsplus: update dir time after change # # fs/hfs/catalog.c # 2004/05/25 02:53:05-07:00 akpm@osdl.org +4 -0 # hfsplus: update dir time after change # # ChangeSet # 2004/05/25 08:38:46-07:00 akpm@osdl.org # [PATCH] hfsplus: don't release not existing nodes # # From: Roman Zippel <zippel@linux-m68k.org> # # When releasing a page don't try to release not existing nodes. # # fs/hfsplus/inode.c # 2004/05/25 02:53:05-07:00 akpm@osdl.org +1 -1 # hfsplus: don't release not existing nodes # # fs/hfs/inode.c # 2004/05/25 02:53:05-07:00 akpm@osdl.org +1 -1 # hfsplus: don't release not existing nodes # # ChangeSet # 2004/05/25 08:38:35-07:00 akpm@osdl.org # [PATCH] hfsplus: completely remove half inserted catalog entry # # From: Roman Zippel <zippel@linux-m68k.org> # # If the inserting of the file or dir record failed, remove the previously # inserted thread record. # # fs/hfsplus/catalog.c # 2004/05/25 02:58:51-07:00 akpm@osdl.org +15 -8 # hfsplus: completely remove half inserted catalog entry # # fs/hfs/catalog.c # 2004/05/25 02:58:51-07:00 akpm@osdl.org +15 -8 # hfsplus: completely remove half inserted catalog entry # # ChangeSet # 2004/05/25 08:38:25-07:00 akpm@osdl.org # [PATCH] hfsplus: delete inode properly # # From: Roman Zippel <zippel@linux-m68k.org> # # Call hfsplus_delete_inode() to delete an inode when adding it to the # filesystem failed, so superblock info is correctly updated. # # fs/hfsplus/dir.c # 2004/05/25 02:53:04-07:00 akpm@osdl.org +5 -1 # hfsplus: delete inode properly # # ChangeSet # 2004/05/25 08:38:14-07:00 akpm@osdl.org # [PATCH] hfsplus: correct dentry initialization for dir dentries. # # From: Roman Zippel <zippel@linux-m68k.org> # # Initialize d_fsdata field also for dir dentries, use hfsplus_instantiate # helper function for this. # # fs/hfsplus/dir.c # 2004/05/25 02:58:51-07:00 akpm@osdl.org +13 -9 # hfsplus: correct dentry initialization for dir dentries. # # ChangeSet # 2004/05/25 08:38:04-07:00 akpm@osdl.org # [PATCH] hfsplus: fix key length for index nodes # # From: Roman Zippel <zippel@linux-m68k.org> # # Use the correct key length for index nodes. # # fs/hfsplus/brec.c # 2004/05/25 02:53:04-07:00 akpm@osdl.org +2 -2 # hfsplus: fix key length for index nodes # # ChangeSet # 2004/05/25 08:37:53-07:00 akpm@osdl.org # [PATCH] Decrease srtuct file size by 8 # # From: Kurt Garloff <garloff@suse.de> # # Attached patch decreases the size of struct file by 8 bytes on 64 bit arches # by avoiding unecessary padding. # # include/linux/fs.h # 2004/05/25 02:53:04-07:00 akpm@osdl.org +2 -2 # Decrease srtuct file size by 8 # # ChangeSet # 2004/05/25 08:37:44-07:00 akpm@osdl.org # [PATCH] remove stale comments above struct page # # From: Christoph Hellwig <hch@lst.de> # # struct page easily fits into a single cacheline with any recent CPU, and the # ordering isn't as described anymore anyway. # # include/linux/mm.h # 2004/05/25 02:53:04-07:00 akpm@osdl.org +0 -7 # remove stale comments above struct page # # ChangeSet # 2004/05/25 08:37:33-07:00 akpm@osdl.org # [PATCH] don't export vma_prio_tree_next # # From: Christoph Hellwig <hch@lst.de> # # there's no user is modules, the function isn't in mainline and I don't see why # modules should use it. # # mm/prio_tree.c # 2004/05/25 02:53:04-07:00 akpm@osdl.org +0 -1 # don't export vma_prio_tree_next # # ChangeSet # 2004/05/25 08:37:14-07:00 akpm@osdl.org # [PATCH] Fix race condition with current->group_info # # From: Olaf Kirch <okir@suse.de> # # I have been chasing a corruption of current->group_info on PPC during NFS # stress tests. The problem seems to be that nfsd is messing with its # group_info quite a bit, while some monitoring processes look at # /proc/<pid>/status and do a get_group_info/put_group_info without any locking. # # This problem can be reproduced on ppc platforms within a few seconds if you # generate some NFS load and do a "cat /proc/XXX/status" of an nfsd thread in a # tight loop. # # I therefore think changes to current->group_info, and querying it from a # different process, needs to be protected using the task_lock. # # (akpm: task->group_info here is safe against exit() because the task holds a # ref on group_info which is released in __put_task_struct, and the /proc file # has a ref on the task_struct). # # kernel/sys.c # 2004/05/25 02:53:03-07:00 akpm@osdl.org +5 -0 # Fix race condition with current->group_info # # fs/proc/array.c # 2004/05/25 02:53:03-07:00 akpm@osdl.org +7 -4 # Fix race condition with current->group_info # # ChangeSet # 2004/05/25 08:36:57-07:00 akpm@osdl.org # [PATCH] ep_send_events() stack reduction # # ep_send_events() uses ~350 bytes of stack for a local buffer of events to send # to userspace. The patch fixes that by removing the double-buffering # altogether. A pipe-based microbenchmark from Davide Libenzi # <davidel@xmailserver.org> was sped up by 1-2%. # # fs/eventpoll.c # 2004/05/25 02:53:03-07:00 akpm@osdl.org +8 -28 # ep_send_events() stack reduction # # ChangeSet # 2004/05/25 08:36:46-07:00 akpm@osdl.org # [PATCH] Fix the mangled-oops-output-on-SMP problem # # From: Ingo Molnar <mingo@elte.hu> # # printk currently does # # if (oops_in_progres) # bust_printk_locks(); # # which means that once we oops, the printk locking is 100% ineffective and # multiple CPUs make an unreadable mess on a serial console. It's a significant # development hassle. # # Fix that up by only popping locks once per ten seconds. # # akpm@osdl.org did: # # - Bump the timeout to 30 seconds - 9600 baud is slow. # # - Handle jiffy wraps: change the logic so that we only skip the lockbust # if the current time is within 30 seconds of the previous lockbusting # attempt. # # kernel/printk.c # 2004/05/25 02:53:03-07:00 akpm@osdl.org +23 -6 # Fix the mangled-oops-output-on-SMP problem # # ChangeSet # 2004/05/25 08:36:31-07:00 akpm@osdl.org # [PATCH] Prevent scary warnings from knfsd # # From: "J. Bruce Fields" <bfields@fieldses.org> # # The kernel currently prints: # # nfsd: nobody listening for auth.unix.ip upcall; has some daemon not been started? # # on every bootup, during initscripts. # # Neil Brown <neilb@cse.unsw.edu.au> says: # # It was part of the recent set of idmapper patches. Bruce wanted the admin # to get a warning when the idmapper daemon wasn't running. I thought the # same warning should apply to any daemon that responded to upcalls. # # In the case of auth.unix.ip it isn't strictly necessary for a daemon to be # running (for comparability with 2.4). # # You can get rid of the warning by doing: # # mount -t nfsd nfsd /proc/fs/nfs # # before mountd is started (init scripts should start doing this I hope, but # distributions don't tend to use the init script from nfs-utils, so it is # hard to push it). This will trigger mountd to listen on auth.unix.ip and # others. # # # That's a hassle, so Bruce's patch limits the warning purely to the new # idmapper cache. It provides a callback in the cache_detail that individual # caches can use to log messages when upcalls fail because a userspace daemon # not running. Implement this method for the idmapping caches. # # net/sunrpc/cache.c # 2004/05/25 02:53:03-07:00 akpm@osdl.org +2 -3 # Prevent scary warnings from knfsd # # include/linux/sunrpc/cache.h # 2004/05/25 02:53:03-07:00 akpm@osdl.org +1 -0 # Prevent scary warnings from knfsd # # fs/nfsd/nfs4idmap.c # 2004/05/25 02:53:03-07:00 akpm@osdl.org +10 -0 # Prevent scary warnings from knfsd # # ChangeSet # 2004/05/25 08:36:18-07:00 akpm@osdl.org # [PATCH] Fix userspace include of linux/fs.h # # From: Mans Rullgard <mru@kth.se> # # There are a few include which should have been under __KERNEL__. # # include/linux/fs.h # 2004/05/25 02:58:52-07:00 akpm@osdl.org +3 -3 # Fix userspace include of linux/fs.h # # ChangeSet # 2004/05/25 08:36:02-07:00 akpm@osdl.org # [PATCH] use SLAB_PANIC in ll_rw_blk.c # # drivers/block/ll_rw_blk.c # 2004/05/25 02:53:03-07:00 akpm@osdl.org +3 -9 # use SLAB_PANIC in ll_rw_blk.c # # ChangeSet # 2004/05/25 08:35:48-07:00 akpm@osdl.org # [PATCH] ppc64: avoid bogus real IRQ numbers # # Signed-off-by: Paul Mackerras <paulus@samba.org> # # Early in the boot process on pSeries machines, we look in the Open Firmware # device tree for information about the interrupt assignments, and assign # virtual IRQ numbers for each physical IRQ. There is currently a couple of # bugs in this code which result in us assigning virtual IRQs for nonexistent # physical IRQs. This causes problems when we call the firmware to enable or # disable those nonexistent physical IRQs. Some versions at least of the # firmware will hit an assertion failure and crash the machine when this # happens. # # This patch fixes the bugs and ensures that we don't try and use nonexistent # physical IRQ numbers. One bug was that we were mapping ISA interrupts, # which is unnecessary since virtual IRQ numbers 0 - 15 are reserved for # them. The other was that when we had a PCI interrupt (which is always in # the range 1 to 4, corresponding to INTA to INTD) which didn't have a # mapping in the PCI host bridge above it, we were just using the original # number (usually 1) rather than ignoring it. # # arch/ppc64/kernel/prom.c # 2004/05/25 02:53:03-07:00 akpm@osdl.org +24 -15 # ppc64: avoid bogus real IRQ numbers # # ChangeSet # 2004/05/25 08:35:31-07:00 akpm@osdl.org # [PATCH] ppc64: bump IOMMU_MAX_ORDER # # Signed-off-by: Anton Blanchard <anton@samba.org> # # We have cards that want over 2MB of PCI consistent memory. The # IOMAP_MAX_ORDER limit is just to catch bad drivers early, so we can bump # this a bit. # # We want some room to grow but our maximum get_free_pages allocation on # ppc64 is currently 16MB, so it doesnt make sense to go above that. # # include/asm-ppc64/iommu.h # 2004/05/25 02:53:02-07:00 akpm@osdl.org +3 -3 # ppc64: bump IOMMU_MAX_ORDER # # ChangeSet # 2004/05/25 08:35:13-07:00 akpm@osdl.org # [PATCH] ppc64: small enter_rtas fix # # From: Anton Blanchard <anton@samba.org> # # enter_rtas now takes an unsigned long. # # arch/ppc64/xmon/xmon.c # 2004/05/25 02:53:02-07:00 akpm@osdl.org +1 -1 # ppc64: small enter_rtas fix # # ChangeSet # 2004/05/25 08:34:57-07:00 akpm@osdl.org # [PATCH] dynamic addition of virtual disks on PPC64 iSeries # # From: Stephen Rothwell <sfr@canb.auug.org.au> # # This patch allows us to dynamically add virtual disks to an iSeries partition. # It works like this: after you have created the virtual disk file on OS/400 # and attached it to the Linux partition, you need to write to # /sys/bus/vio/drivers/viodasd/probe (it doesn't matter what you write). This # will do the probe. It calls add_disk() for each new disk, so we get hotplug # events as a side effect. # # This was the nicest way I could think of doing this as the interface to the # hypervisor is polled ... # # drivers/block/viodasd.c # 2004/05/25 02:53:02-07:00 akpm@osdl.org +37 -7 # dynamic addition of virtual disks on PPC64 iSeries # # ChangeSet # 2004/05/25 08:34:44-07:00 akpm@osdl.org # [PATCH] ppc64: fix to viopath.c # # From: Anton Blanchard <anton@samba.org> # # From: Olaf Hering and Nathan Lynch: # # Fix a couple of nasty lurking bugs in viopath.c and add information # required to know if the iseries_veth module should be loaded on legacy # iSeries systems. # # arch/ppc64/kernel/viopath.c # 2004/05/25 02:53:02-07:00 akpm@osdl.org +14 -3 # ppc64: fix to viopath.c # # ChangeSet # 2004/05/25 08:34:35-07:00 akpm@osdl.org # [PATCH] ppc64: NUMA fixes # # From: Anton Blanchard <anton@samba.org> # # From: Anton Blanchard, Dave Hansen and Olof Johansson: # # Fix multiple bugs in the ppc64 NUMA topology probe code. # # - We were using HW cpu numbers instead of logical ones. 615, 630, 650, # some 670 and some 690 SMP will all fail to boot without this patch. # # - The old code would BUG() when it got confused (more NUMA zones than the # kernel is configured for etc). # # - The common depth calculation was incorrect. Dave found an OF property # that gives us exactly what we want. # # - Things were broken on SMT machines. # # The new code should work on those broken systems and should no longer BUG() # but fall back to a flat topology when it gets confused. # # include/asm-ppc64/mmzone.h # 2004/05/25 02:53:02-07:00 akpm@osdl.org +0 -1 # ppc64: NUMA fixes # # arch/ppc64/mm/numa.c # 2004/05/25 02:53:02-07:00 akpm@osdl.org +172 -88 # ppc64: NUMA fixes # # ChangeSet # 2004/05/25 08:34:24-07:00 akpm@osdl.org # [PATCH] ppc64: fix inline spinlocks # # From: Anton Blanchard <anton@samba.org> # # In _raw_spin_lock_flags we were branching to the wrong spot and would # restore random stuff to the MSR. # # include/asm-ppc64/spinlock.h # 2004/05/25 02:53:02-07:00 akpm@osdl.org +1 -1 # ppc64: fix inline spinlocks # # ChangeSet # 2004/05/25 08:05:12-07:00 davej@redhat.com # [PATCH] Make early_cpu_detect() set x86_cache_alignment on pre-cpuid CPU's too # # From: Zdenek Pavlas <pavlas@nextra.cz> # # On any x86 without cpuid, early_cpu_detect() left x86_cache_alignment as # zero, so kmem_cache_init() calls cache_estimate() with align == 0, and # it loops forever. I've tried this trivial fix, and it works for me. # # Andi Kleen looked over this, and ok'd it. # # arch/i386/kernel/cpu/common.c # 2004/05/24 17:00:00-07:00 davej@redhat.com +2 -2 # Make early_cpu_detect() set x86_cache_alignment on pre-cpuid CPU's too # # ChangeSet # 2004/05/24 17:19:59-07:00 paulus@samba.org # [PATCH] ppc64: better stack traces # # This improves the stack traces we get on PPC64 by putting a marker in # those stack frames that are created as a result of an interrupt or # exception. The marker is "regshere" (0x7265677368657265). # # With this, stack traces show where exceptions have occurred, which can # be very useful. This also improves the accuracy of the trace because # the relevant return address can be in the link register at the time of # the exception rather than on the stack. We now print the PC and # exception type for each exception frame, and then the link register if # appropriate as the next item in the trace. # # arch/ppc64/xmon/xmon.c # 2004/05/24 15:35:48-07:00 paulus@samba.org +1 -8 # ppc64: better stack traces # # arch/ppc64/kernel/process.c # 2004/05/24 14:44:44-07:00 paulus@samba.org +41 -17 # ppc64: better stack traces # # arch/ppc64/kernel/head.S # 2004/05/24 14:42:19-07:00 paulus@samba.org +4 -0 # ppc64: better stack traces # # ChangeSet # 2004/05/24 23:14:52+01:00 rmk@flint.arm.linux.org.uk # [ARM] pxa2xx_udc needs asm/mach-types.h # # drivers/usb/gadget/pxa2xx_udc.c # 2004/05/24 23:12:51+01:00 rmk@flint.arm.linux.org.uk +1 -0 # pxa2xx_udc needs asm/mach-types.h # # ChangeSet # 2004/05/24 22:42:29+01:00 rmk@flint.arm.linux.org.uk # [ARM] Fix lubbock PCMCIA driver. # # - access SA1111 GPIO using sa1111_set_io functions. # - access Lubbock misc register using lubbock_set_misc_wr # - fix CF voltage selection. # - don't fiddle with PCMCIA voltage selection when selecting CF # voltage. # - wait for the voltage switches to stabilise before reading the # new card state. # # drivers/pcmcia/sa1111_generic.h # 2004/05/24 22:40:05+01:00 rmk@flint.arm.linux.org.uk +1 -1 # lubbock pcmcia takes sa1111_dev. # # drivers/pcmcia/sa1111_generic.c # 2004/05/24 22:40:04+01:00 rmk@flint.arm.linux.org.uk +1 -1 # lubbock pcmcia takes sa1111_dev. # # drivers/pcmcia/pxa2xx_lubbock.c # 2004/05/24 22:40:04+01:00 rmk@flint.arm.linux.org.uk +169 -154 # Fix lubbock PCMCIA driver. # - access SA1111 GPIO using sa1111_set_io functions # - access Lubbock misc register using lubbock_set_misc_wr # - fix CF voltage selection. # - don't fiddle with PCMCIA voltage selection when selecting CF # voltage. # - wait for the voltage switches to stabilise before reading the # new card state. # # ChangeSet # 2004/05/24 10:15:43-07:00 herbert@gondor.apana.org.au # [IPSEC]: Use add_timer in find_acq. # # net/ipv6/xfrm6_state.c # 2004/05/24 10:15:30-07:00 herbert@gondor.apana.org.au +2 -1 # [IPSEC]: Use add_timer in find_acq. # # net/ipv4/xfrm4_state.c # 2004/05/24 10:15:30-07:00 herbert@gondor.apana.org.au +2 -1 # [IPSEC]: Use add_timer in find_acq. # # ChangeSet # 2004/05/24 10:13:27-07:00 herbert@gondor.apana.org.au # [IPSEC]: Fix OOPS when deleting an ip address. # # Looks like I was too hasty in blaming myself :) Although my patch does # fix a real bug, it cannot have been responsible for the crash that the OP # reported. The reason is that the state timer always keeps a reference to # the state so even if it is incorrectly re-added the reference will prevent # the crash. # # Hence the problem is still a bug in the ref counting. I think I've found # the real culprit now. __xfrm?_find_acq() is missing an xfrm_state_hold # on the create path. This also explains why I never see it myself since # Openswan never creates states through that code-path. # # net/ipv6/xfrm6_state.c # 2004/05/24 10:13:13-07:00 herbert@gondor.apana.org.au +3 -3 # [IPSEC]: Fix OOPS when deleting an ip address. # # Looks like I was too hasty in blaming myself :) Although my patch does # fix a real bug, it cannot have been responsible for the crash that the OP # reported. The reason is that the state timer always keeps a reference to # the state so even if it is incorrectly re-added the reference will prevent # the crash. # # Hence the problem is still a bug in the ref counting. I think I've found # the real culprit now. __xfrm?_find_acq() is missing an xfrm_state_hold # on the create path. This also explains why I never see it myself since # Openswan never creates states through that code-path. # # net/ipv4/xfrm4_state.c # 2004/05/24 10:13:13-07:00 herbert@gondor.apana.org.au +3 -3 # [IPSEC]: Fix OOPS when deleting an ip address. # # Looks like I was too hasty in blaming myself :) Although my patch does # fix a real bug, it cannot have been responsible for the crash that the OP # reported. The reason is that the state timer always keeps a reference to # the state so even if it is incorrectly re-added the reference will prevent # the crash. # # Hence the problem is still a bug in the ref counting. I think I've found # the real culprit now. __xfrm?_find_acq() is missing an xfrm_state_hold # on the create path. This also explains why I never see it myself since # Openswan never creates states through that code-path. # # ChangeSet # 2004/05/24 17:29:49+01:00 rmk@flint.arm.linux.org.uk # [ARM] Don't reference __machine_arch_type directly. # # include/asm-arm/arch-ixp4xx/uncompress.h # 2004/05/24 17:27:46+01:00 rmk@flint.arm.linux.org.uk +1 -1 # uncompress.h references __machine_arch_type. Bad. Use # machine_is_adi_coyote() instead. # # ChangeSet # 2004/05/24 17:18:24+01:00 icampbell@com.rmk.(none) # [ARM PATCH] 1893/1: define __ARCH_WANT_SYS_PAUSE for ARM # # Patch from Ian Campbell # # The recent changeset "Sanitise handling of unneeded syscall stubs" missed # # __ARCH_WANT_SYS_PAUSE from include/asm-arm/unistd.h. # # # include/asm-arm/unistd.h # 2004/05/24 10:15:25+01:00 icampbell@com.rmk.(none) +1 -0 # [PATCH] 1893/1: define __ARCH_WANT_SYS_PAUSE for ARM # # ChangeSet # 2004/05/24 17:14:00+01:00 rmk@flint.arm.linux.org.uk # [ARM] Remove needless include of asm/mach-types.h # # include/asm-arm/arch-pxa/hardware.h # 2004/05/24 17:11:51+01:00 rmk@flint.arm.linux.org.uk +0 -3 # Remove needless include of asm/mach-types.h # # include/asm-arm/arch-omap/uncompress.h # 2004/05/24 17:11:51+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # include/asm-arm/arch-omap/hardware.h # 2004/05/24 17:11:50+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # include/asm-arm/arch-lh7a40x/hardware.h # 2004/05/24 17:11:50+01:00 rmk@flint.arm.linux.org.uk +0 -2 # Remove needless include of asm/mach-types.h # # arch/arm/mach-s3c2410/s3c2410.c # 2004/05/24 17:11:50+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # arch/arm/mach-omap/bus.c # 2004/05/24 17:11:50+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # arch/arm/mach-ixp4xx/common.c # 2004/05/24 17:11:50+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # arch/arm/mach-iop3xx/xs80200-irq.c # 2004/05/24 17:11:50+01:00 rmk@flint.arm.linux.org.uk +0 -2 # Remove needless include of asm/mach-types.h # # arch/arm/mach-iop3xx/mm.c # 2004/05/24 17:11:49+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # arch/arm/mach-iop3xx/mm-321.c # 2004/05/24 17:11:49+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # arch/arm/mach-iop3xx/iq80310-time.c # 2004/05/24 17:11:49+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # arch/arm/mach-iop3xx/iq80310-irq.c # 2004/05/24 17:11:48+01:00 rmk@flint.arm.linux.org.uk +0 -2 # Remove needless include of asm/mach-types.h # # arch/arm/mach-iop3xx/iop321-time.c # 2004/05/24 17:11:48+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # arch/arm/mach-iop3xx/iop310-irq.c # 2004/05/24 17:11:48+01:00 rmk@flint.arm.linux.org.uk +0 -2 # Remove needless include of asm/mach-types.h # # arch/arm/mach-adifcc/irq.c # 2004/05/24 17:11:48+01:00 rmk@flint.arm.linux.org.uk +0 -2 # Remove needless include of asm/mach-types.h # # arch/arm/kernel/arch.c # 2004/05/24 17:11:48+01:00 rmk@flint.arm.linux.org.uk +0 -1 # Remove needless include of asm/mach-types.h # # ChangeSet # 2004/05/24 08:20:03-07:00 James.Bottomley@SteelEye.com # [PATCH] pa-risc: kernel/fork.c broken by the new rmap # # Any architecture (like pa-risc) that makes use of the helper function # flush_dcache_mmap_lock() won't compile with the new rmap due to use of # the wrong "mapping". # # Trivial fix. # # kernel/fork.c # 2004/05/23 08:27:29-07:00 James.Bottomley@SteelEye.com +2 -2 # pa-risc: kernel/fork.c broken by the new rmap # # ChangeSet # 2004/05/24 08:16:24-07:00 torvalds@ppc970.osdl.org # Merge bk://linux-scsi.bkbits.net/scsi-for-linus-2.6 # into ppc970.osdl.org:/home/torvalds/v2.6/linux # # drivers/scsi/sg.c # 2004/05/24 08:16:21-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # drivers/scsi/dpt_i2o.c # 2004/05/24 08:16:20-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # drivers/scsi/Kconfig # 2004/05/24 08:16:20-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # ChangeSet # 2004/05/24 13:16:26+01:00 rmk@flint.arm.linux.org.uk # [ARM] Enable IRQs over context switches # # Disabling IRQs over context switches causes unreasonable IRQ latency # on VIVT cached machines, so provide our own prepare_arch_switch(), # finish_arch_switch() and task_running() implementations. We provide # an optimised UP version so we don't end up needlessly incrementing # and decrementing the preempt count. # # include/asm-arm/system.h # 2004/05/24 13:13:54+01:00 rmk@flint.arm.linux.org.uk +34 -8 # Enable IRQs over context switches such that we do not end up with high # IRQ latency. # # ChangeSet # 2004/05/24 12:17:09+01:00 rmk@flint.arm.linux.org.uk # [ARM] Fix sorting of machine class symbols. # # These are supposed to be ordered by option name. # # arch/arm/Kconfig # 2004/05/24 12:14:29+01:00 rmk@flint.arm.linux.org.uk +8 -8 # Sort machine class symbols by option name. # # ChangeSet # 2004/05/24 00:34:23+01:00 rmk@flint.arm.linux.org.uk # [ARM] Remove old static GPIO port definitions for SA1111. # # Using these old definitions on PXA will result in randomly # scribbling over memory. Remove them. # # include/asm-arm/hardware/sa1111.h # 2004/05/24 00:28:08+01:00 rmk@flint.arm.linux.org.uk +0 -16 # Remove old static GPIO port definitions. # # ChangeSet # 2004/05/23 16:19:28-07:00 vadim@cs.washington.edu # [NET]: Save some space with sysfs strings. # # net/core/net-sysfs.c # 2004/05/23 16:19:10-07:00 vadim@cs.washington.edu +3 -3 # [NET]: Save some space with sysfs strings. # # ChangeSet # 2004/05/23 16:13:00-07:00 davem@nuts.davemloft.net # Merge http://linux-mh.bkbits.net/bluetooth-2.6 # into nuts.davemloft.net:/disk1/BK/net-2.6 # # drivers/bluetooth/hci_ldisc.c # 2004/05/23 16:12:52-07:00 davem@nuts.davemloft.net +0 -0 # Auto merged # # ChangeSet # 2004/05/24 00:09:54+01:00 rmk@flint.arm.linux.org.uk # [ARM] PXAFB bug fixes # # - There are only 16 entries in the pseudo palette # - For dual-panel displays, we need to halve the display height # - When disabling the LCD controller, use LCCR0_DIS (aka slow disable) # rather than quick disable. # - Clean up compiler warnings. # # drivers/video/pxafb.c # 2004/05/24 00:07:57+01:00 rmk@flint.arm.linux.org.uk +20 -15 # Collection of bug fixes: # - There are only 16 entries in the pseudo palette # - For dual-panel displays, we need to halve the display height # - When disabling the LCD controller, use LCCR0_DIS (aka slow disable) # rather than quick disable. # - Clean up compiler warnings. # # ChangeSet # 2004/05/23 23:52:39+01:00 rmk@flint.arm.linux.org.uk # [ARM] Remove SA1111 PS/2 IRQ_HANDLED handling. # # Some SA1111 devices are unable to clear the PS/2 receive IRQ before # it has been serviced, so we always re-enter the handler one more # time than is strictly necessary. We can't clear the IRQ after # servicing because that causes race conditions with other SA1111 # devices, so we take the easy option and always return IRQ_HANDLED. # # drivers/input/serio/sa1111ps2.c # 2004/05/23 23:50:37+01:00 rmk@flint.arm.linux.org.uk +1 -4 # Remove IRQ_HANDLED handling. # # ChangeSet # 2004/05/23 23:41:39+01:00 rmk@flint.arm.linux.org.uk # [ARM] Update PXA serial driver. # # - Move CKEN manipulation into power management handling (so we don't # shut down the clock to the console port.) # - .iotype should be using UPIO_xxx not SERIAL_IO_xxx # - Remove each port when module is unloaded. # - Remove needless #include. # - Remove ASYNC_SKIP_TEST - we don't have any tests to skip. # # drivers/serial/pxa.c # 2004/05/23 23:39:21+01:00 rmk@flint.arm.linux.org.uk +11 -12 # Move CKEN manipulation into power management handling (so we don't # shut down the clock to the console port.) # .iotype should be using UPIO_xxx not SERIAL_IO_xxx # Remove each port when module is unloaded. # Remove needless #include. # Remove ASYNC_SKIP_TEST - we don't have any tests to skip. # # ChangeSet # 2004/05/23 23:29:13+01:00 rmk@flint.arm.linux.org.uk # [ARM] Add LCD display parameters for Lubbock board. # # arch/arm/mach-pxa/lubbock.c # 2004/05/23 23:27:13+01:00 rmk@flint.arm.linux.org.uk +22 -1 # Add Lubbock's LCD display parameters. # # ChangeSet # 2004/05/23 23:23:59+01:00 rmk@flint.arm.linux.org.uk # [ARM] Add lubbock_set_misc_wr() # # This provides an atomic method to update the Lubbock board specific # register from various drivers. # # include/asm-arm/arch-pxa/lubbock.h # 2004/05/23 23:21:57+01:00 rmk@flint.arm.linux.org.uk +3 -0 # Provide prototype for lubbock_set_misc_wr() # # arch/arm/mach-pxa/lubbock.c # 2004/05/23 23:21:57+01:00 rmk@flint.arm.linux.org.uk +11 -0 # Provide atomic method to update LUB_MISC_WR shared register. # # ChangeSet # 2004/05/23 22:06:28+01:00 rmk@flint.arm.linux.org.uk # [ARM] Provide coherent_dma_mask for PXA MCI device. # # arch/arm/mach-pxa/generic.c # 2004/05/23 22:03:28+01:00 rmk@flint.arm.linux.org.uk +1 -0 # Provide coherent_dma_mask for PXA MCI device. # # ChangeSet # 2004/05/23 21:56:17+01:00 rmk@flint.arm.linux.org.uk # [ARM] Fix oops in dma_unmap_single() # # Fix an oops caused by a missing failure return value for devices which # do not require DMA bouncing. # # arch/arm/common/dmabounce.c # 2004/05/23 21:53:40+01:00 rmk@flint.arm.linux.org.uk +1 -0 # Return NULL on failure to find device. # # ChangeSet # 2004/05/23 12:22:09-07:00 viro@parcelfarce.linux.theplanet.co.uk # [PATCH] ncpfs compat ioctls # # This takes ncpfs ioctl handling into fs/compat_ioctl.c, removing it from # ppc64 and sparc64 code. # # Code sanitized, switched to compat_alloc_user_space(), bunch of # {k,v}malloc() killed. # # fs/compat_ioctl.c # 2004/05/23 11:49:32-07:00 viro@parcelfarce.linux.theplanet.co.uk +193 -0 # ncpfs compat ioctls # # arch/sparc64/kernel/ioctl32.c # 2004/05/23 11:48:42-07:00 viro@parcelfarce.linux.theplanet.co.uk +0 -320 # ncpfs compat ioctls # # arch/ppc64/kernel/ioctl32.c # 2004/05/23 11:48:42-07:00 viro@parcelfarce.linux.theplanet.co.uk +0 -312 # ncpfs compat ioctls # # ChangeSet # 2004/05/23 11:44:28-05:00 brking@us.ibm.com # [PATCH] ipr driver version 2.0.7 # # Bump driver version # # drivers/scsi/ipr.h # 2004/05/21 19:55:12-05:00 brking@us.ibm.com +2 -2 # ipr driver version 2.0.7 # # ChangeSet # 2004/05/23 11:37:37-05:00 brking@us.ibm.com # [PATCH] ipr remove anonymous unions for gcc 2.95 # # This patch removes all usage of anonymous unions from the ipr # driver since gcc 2.95 does not support anonymous unions. # # drivers/scsi/ipr.h # 2004/05/22 17:05:26-05:00 brking@us.ibm.com +7 -7 # top### Change the comments to ChangeSet|1.1651 below # [PATCH] ipr remove anonymous unions for gcc 2.95 # # This patch removes all usage of anonymous unions from the ipr # driver since gcc 2.95 does not support anonymous unions. # # ipr remove anonymous unions for gcc 2.95 # # drivers/scsi/ipr.c # 2004/05/22 14:50:39-05:00 brking@us.ibm.com +51 -49 # ipr remove anonymous unions for gcc 2.95 # # ChangeSet # 2004/05/23 11:25:01-05:00 brking@us.ibm.com # [PATCH] ipr fix for ioa reset timeout oops # # This patch fixes an oops discovered in test which can occur # on bad hardware if the ipr adapter times out coming operational. # # drivers/scsi/ipr.c # 2004/05/22 17:17:47-05:00 brking@us.ibm.com +2 -0 # ipr fix for ioa reset timeout oops # # ChangeSet # 2004/05/23 11:22:07-05:00 brking@us.ibm.com # [PATCH] ipr add error logs to abort and reset paths # # This patch adds additional error logging to abort, device reset, # and bus reset paths to help in diagnosing scsi problems on ipr. # # drivers/scsi/ipr.h # 2004/05/22 14:49:07-05:00 brking@us.ibm.com +1 -0 # ipr add error logs to abort and reset paths # # drivers/scsi/ipr.c # 2004/05/22 14:49:38-05:00 brking@us.ibm.com +4 -0 # ipr add error logs to abort and reset paths # # ChangeSet # 2004/05/23 11:19:21-05:00 brking@us.ibm.com # [PATCH] ipr gcc attributes fixes # # This patch fixes an issue where ipr was including a kernel # data structure, list_head, in a packed structure, which causes # compile issues on some architectures, and is just a bad thing to do. # # drivers/scsi/ipr.h # 2004/05/22 19:10:04-05:00 brking@us.ibm.com +5 -5 # ipr gcc attributes fixes # # drivers/scsi/ipr.c # 2004/05/22 19:08:01-05:00 brking@us.ibm.com +29 -28 # ipr gcc attributes fixes # # ChangeSet # 2004/05/23 11:17:44-05:00 jejb@mulgrave.(none) # initial 2.6 fixup for ATP870U scsi # # From: Alan Cox <alan@redhat.com> # # Pretty minimal. queue_command is now called locked, this requires propogating # some small locking changes for send_s870 # # drivers/scsi/atp870u.c # 2004/05/23 11:17:20-05:00 jejb@mulgrave.(none) +23 -17 # initial 2.6 fixup for ATP870U scsi # # ChangeSet # 2004/05/23 13:43:34+02:00 marcel@holtmann.org # [Bluetooth] Define .kobj.k_name for the fake device # # The PCMCIA devices are not devices for the kernel and the bt3c_cs # driver uses a fake device for calling request_firmware(). The fake # device initialization must also set .kobj.k_name to prevent an oops # until PCMCIA devices are fully integrated into the driver model. # # drivers/bluetooth/bt3c_cs.c # 2004/05/23 13:37:31+02:00 marcel@holtmann.org +3 -0 # Define .kobj.k_name for the fake device # # ChangeSet # 2004/05/23 13:31:00+02:00 marcel@holtmann.org # [Bluetooth] Use try_module_get() for RFCOMM sessions # # It is not possible to use __module_get() when adding a new RFCOMM # session, because there is a case where no reference count is hold. # This happens when the module is not in use right now and an incoming # connection occurs. # # net/bluetooth/rfcomm/core.c # 2004/05/23 13:26:59+02:00 marcel@holtmann.org +13 -12 # Use try_module_get() for RFCOMM sessions # # ChangeSet # 2004/05/23 10:22:27+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # PCM Midlevel,ALSA Core # Added SNDRV_PCM_SYNC_PTR_APPL and SNDRV_PCM_SYNC_PTR_AVAIL_MIN extensions # to SYNC_PTR ioctl for PCM API. # # sound/core/pcm_native.c # 2004/05/22 05:12:57+02:00 perex@suse.cz +8 -2 # ALSA CVS update # D:2004/05/22 11:12:57 # C:PCM Midlevel,ALSA Core # A:Jaroslav Kysela <perex@suse.cz> # F:core/pcm_native.c:1.90->1.91 # F:include/asound.h:1.39->1.40 # L:Added SNDRV_PCM_SYNC_PTR_APPL and SNDRV_PCM_SYNC_PTR_AVAIL_MIN extensions # L:to SYNC_PTR ioctl for PCM API. # # include/sound/asound.h # 2004/05/22 05:12:58+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/05/22 11:12:57 # C:PCM Midlevel,ALSA Core # A:Jaroslav Kysela <perex@suse.cz> # F:core/pcm_native.c:1.90->1.91 # F:include/asound.h:1.39->1.40 # L:Added SNDRV_PCM_SYNC_PTR_APPL and SNDRV_PCM_SYNC_PTR_AVAIL_MIN extensions # L:to SYNC_PTR ioctl for PCM API. # # ChangeSet # 2004/05/23 10:22:01+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # VIA82xx driver # - added the DXS entry for ECS K7VTA3 v8.0 # - fixed the DXS entry for ASUS A7V8X to NO_VRA. # # sound/pci/via82xx.c # 2004/05/21 06:11:39+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/05/21 12:11:39 # C:VIA82xx driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/via82xx.c:1.100->1.101 # L:- added the DXS entry for ECS K7VTA3 v8.0 # L:- fixed the DXS entry for ASUS A7V8X to NO_VRA. # # ChangeSet # 2004/05/23 10:21:22+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ALSA Core # added reverse selections of components to CONFIG_SND_BIT32_EMUL. # # sound/core/Kconfig # 2004/05/19 12:00:23+02:00 perex@suse.cz +11 -4 # ALSA CVS update # D:2004/05/19 18:00:23 # C:ALSA Core # A:Takashi Iwai <tiwai@suse.de> # F:core/Kconfig:1.3->1.4 # L:added reverse selections of components to CONFIG_SND_BIT32_EMUL. # # ChangeSet # 2004/05/23 10:14:09+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PCI drivers,ICE1712 driver,ICE1724 driver # - improved the description of ice1724 driver on Kconfig. # - better support of VT1720 with snd-ice1724 driver. # - check PCI subsystem IDs when no EEPROM is available (ice1724 only) # - change the driver name string if given in the board list. # - merged prodigy 7.1 support into aureon.c. they are almost identical. # - allow to use PDMA4 and RMDA1 for non-SPDIF purpose if specified (ice1724 only). # # sound/pci/ice1712/ice1724.c # 2004/05/18 13:32:40+02:00 perex@suse.cz +150 -45 # ALSA CVS update # D:2004/05/18 19:32:40 # C:PCI drivers,ICE1712 driver,ICE1724 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.27->1.28 # F:pci/ice1712/Makefile:1.10->1.11 # F:pci/ice1712/aureon.c:1.9->1.10 # F:pci/ice1712/aureon.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.52->1.53 # F:pci/ice1712/ice1712.h:1.20->1.21 # F:pci/ice1712/ice1724.c:1.30->1.31 # F:pci/ice1712/prodigy.c:1.5->1.6(DEAD) # F:pci/ice1712/prodigy.h:1.1->1.2(DEAD) # L:- improved the description of ice1724 driver on Kconfig. # L:- better support of VT1720 with snd-ice1724 driver. # L:- check PCI subsystem IDs when no EEPROM is available (ice1724 only) # L:- change the driver name string if given in the board list. # L:- merged prodigy 7.1 support into aureon.c. they are almost identical. # L:- allow to use PDMA4 and RMDA1 for non-SPDIF purpose if specified (ice1724 only). # # sound/pci/ice1712/ice1712.h # 2004/05/18 13:32:40+02:00 perex@suse.cz +5 -0 # ALSA CVS update # D:2004/05/18 19:32:40 # C:PCI drivers,ICE1712 driver,ICE1724 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.27->1.28 # F:pci/ice1712/Makefile:1.10->1.11 # F:pci/ice1712/aureon.c:1.9->1.10 # F:pci/ice1712/aureon.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.52->1.53 # F:pci/ice1712/ice1712.h:1.20->1.21 # F:pci/ice1712/ice1724.c:1.30->1.31 # F:pci/ice1712/prodigy.c:1.5->1.6(DEAD) # F:pci/ice1712/prodigy.h:1.1->1.2(DEAD) # L:- improved the description of ice1724 driver on Kconfig. # L:- better support of VT1720 with snd-ice1724 driver. # L:- check PCI subsystem IDs when no EEPROM is available (ice1724 only) # L:- change the driver name string if given in the board list. # L:- merged prodigy 7.1 support into aureon.c. they are almost identical. # L:- allow to use PDMA4 and RMDA1 for non-SPDIF purpose if specified (ice1724 only). # # sound/pci/ice1712/ice1712.c # 2004/05/18 13:32:40+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/05/18 19:32:40 # C:PCI drivers,ICE1712 driver,ICE1724 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.27->1.28 # F:pci/ice1712/Makefile:1.10->1.11 # F:pci/ice1712/aureon.c:1.9->1.10 # F:pci/ice1712/aureon.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.52->1.53 # F:pci/ice1712/ice1712.h:1.20->1.21 # F:pci/ice1712/ice1724.c:1.30->1.31 # F:pci/ice1712/prodigy.c:1.5->1.6(DEAD) # F:pci/ice1712/prodigy.h:1.1->1.2(DEAD) # L:- improved the description of ice1724 driver on Kconfig. # L:- better support of VT1720 with snd-ice1724 driver. # L:- check PCI subsystem IDs when no EEPROM is available (ice1724 only) # L:- change the driver name string if given in the board list. # L:- merged prodigy 7.1 support into aureon.c. they are almost identical. # L:- allow to use PDMA4 and RMDA1 for non-SPDIF purpose if specified (ice1724 only). # # sound/pci/ice1712/aureon.h # 2004/05/18 13:32:40+02:00 perex@suse.cz +7 -1 # ALSA CVS update # D:2004/05/18 19:32:40 # C:PCI drivers,ICE1712 driver,ICE1724 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.27->1.28 # F:pci/ice1712/Makefile:1.10->1.11 # F:pci/ice1712/aureon.c:1.9->1.10 # F:pci/ice1712/aureon.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.52->1.53 # F:pci/ice1712/ice1712.h:1.20->1.21 # F:pci/ice1712/ice1724.c:1.30->1.31 # F:pci/ice1712/prodigy.c:1.5->1.6(DEAD) # F:pci/ice1712/prodigy.h:1.1->1.2(DEAD) # L:- improved the description of ice1724 driver on Kconfig. # L:- better support of VT1720 with snd-ice1724 driver. # L:- check PCI subsystem IDs when no EEPROM is available (ice1724 only) # L:- change the driver name string if given in the board list. # L:- merged prodigy 7.1 support into aureon.c. they are almost identical. # L:- allow to use PDMA4 and RMDA1 for non-SPDIF purpose if specified (ice1724 only). # # sound/pci/ice1712/aureon.c # 2004/05/18 13:32:40+02:00 perex@suse.cz +207 -14 # ALSA CVS update # D:2004/05/18 19:32:40 # C:PCI drivers,ICE1712 driver,ICE1724 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.27->1.28 # F:pci/ice1712/Makefile:1.10->1.11 # F:pci/ice1712/aureon.c:1.9->1.10 # F:pci/ice1712/aureon.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.52->1.53 # F:pci/ice1712/ice1712.h:1.20->1.21 # F:pci/ice1712/ice1724.c:1.30->1.31 # F:pci/ice1712/prodigy.c:1.5->1.6(DEAD) # F:pci/ice1712/prodigy.h:1.1->1.2(DEAD) # L:- improved the description of ice1724 driver on Kconfig. # L:- better support of VT1720 with snd-ice1724 driver. # L:- check PCI subsystem IDs when no EEPROM is available (ice1724 only) # L:- change the driver name string if given in the board list. # L:- merged prodigy 7.1 support into aureon.c. they are almost identical. # L:- allow to use PDMA4 and RMDA1 for non-SPDIF purpose if specified (ice1724 only). # # sound/pci/ice1712/Makefile # 2004/05/18 13:32:40+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/18 19:32:40 # C:PCI drivers,ICE1712 driver,ICE1724 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.27->1.28 # F:pci/ice1712/Makefile:1.10->1.11 # F:pci/ice1712/aureon.c:1.9->1.10 # F:pci/ice1712/aureon.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.52->1.53 # F:pci/ice1712/ice1712.h:1.20->1.21 # F:pci/ice1712/ice1724.c:1.30->1.31 # F:pci/ice1712/prodigy.c:1.5->1.6(DEAD) # F:pci/ice1712/prodigy.h:1.1->1.2(DEAD) # L:- improved the description of ice1724 driver on Kconfig. # L:- better support of VT1720 with snd-ice1724 driver. # L:- check PCI subsystem IDs when no EEPROM is available (ice1724 only) # L:- change the driver name string if given in the board list. # L:- merged prodigy 7.1 support into aureon.c. they are almost identical. # L:- allow to use PDMA4 and RMDA1 for non-SPDIF purpose if specified (ice1724 only). # # sound/pci/Kconfig # 2004/05/18 13:32:40+02:00 perex@suse.cz +3 -3 # ALSA CVS update # D:2004/05/18 19:32:40 # C:PCI drivers,ICE1712 driver,ICE1724 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.27->1.28 # F:pci/ice1712/Makefile:1.10->1.11 # F:pci/ice1712/aureon.c:1.9->1.10 # F:pci/ice1712/aureon.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.52->1.53 # F:pci/ice1712/ice1712.h:1.20->1.21 # F:pci/ice1712/ice1724.c:1.30->1.31 # F:pci/ice1712/prodigy.c:1.5->1.6(DEAD) # F:pci/ice1712/prodigy.h:1.1->1.2(DEAD) # L:- improved the description of ice1724 driver on Kconfig. # L:- better support of VT1720 with snd-ice1724 driver. # L:- check PCI subsystem IDs when no EEPROM is available (ice1724 only) # L:- change the driver name string if given in the board list. # L:- merged prodigy 7.1 support into aureon.c. they are almost identical. # L:- allow to use PDMA4 and RMDA1 for non-SPDIF purpose if specified (ice1724 only). # # BitKeeper/deleted/.del-prodigy.h~5d73c21f8cc0fcef # 2004/05/23 10:13:52+02:00 perex@suse.cz +0 -0 # Delete: sound/pci/ice1712/prodigy.h # # BitKeeper/deleted/.del-prodigy.c~c182fb7e0e72b8a # 2004/05/23 10:13:52+02:00 perex@suse.cz +0 -0 # Delete: sound/pci/ice1712/prodigy.c # # ChangeSet # 2004/05/22 11:57:26-05:00 hch@lst.de # [PATCH] remove an unused function from NC53c406a # # and here's a variant using #if 0 # # drivers/scsi/NCR53c406a.c # 2004/05/22 11:44:31-05:00 hch@lst.de +2 -1 # remove an unused function from NC53c406a # # ChangeSet # 2004/05/22 10:50:24-05:00 g.liakhovetski@gmx.de # [PATCH] tmscsim: trivial updates # # Here comes the next (trivial) patch. I just want to get it out of the way # to make the next (scary) patch smaller and simpler. This one doesn't # modify the object code either. Actually, well, it does - it makes a few # objects, that were previously declared extern static. And removes a couple # more defines. # # drivers/scsi/tmscsim.c # 2004/05/21 18:14:48-05:00 g.liakhovetski@gmx.de +45 -55 # tmscsim: trivial updates # # drivers/scsi/scsiiom.c # 2004/05/21 18:42:35-05:00 g.liakhovetski@gmx.de +5 -5 # tmscsim: trivial updates # # drivers/scsi/dc390.h # 2004/05/21 16:11:32-05:00 g.liakhovetski@gmx.de +5 -5 # tmscsim: trivial updates # # ChangeSet # 2004/05/22 10:16:19+02:00 perex@suse.cz # Merge suse.cz:/home/perex/bk/linux-sound/linux-2.5 # into suse.cz:/home/perex/bk/linux-sound/linux-sound # # sound/pci/au88x0/au88x0_game.c # 2004/05/22 10:16:12+02:00 perex@suse.cz +0 -0 # Auto merged # # include/linux/pci_ids.h # 2004/05/22 10:16:11+02:00 perex@suse.cz +0 -0 # Auto merged # # ChangeSet # 2004/05/21 10:53:24-05:00 jejb@mulgrave.(none) # SCSI: make inquiry timeout tuneable # # From: garloff@suse.de # # Feature # # Make the timeout for INQUIRY during SCSI scan adjustable via boot parameter. # Note that the second INQUIRY does use a shorter timeout, as the long timeout # is for recovery from the initial reset, not because existing devices would # take so long to answer INQUIRY. SPC3 says that INQUIRY should be available # right away, but real life is different unfortunately. # # drivers/scsi/scsi_scan.c # 2004/05/21 10:53:07-05:00 jejb@mulgrave.(none) +9 -2 # SCSI: make inquiry timeout tuneable # # ChangeSet # 2004/05/21 10:51:57-05:00 jejb@mulgrave.(none) # SCSI: make SCSI REPORT LUNS the default # # From: garloff@suse.de # # Cleanup/Feature # # Remove CONFIG_SCSI_REPORT_LUNS config option. # Instead provide BLIST_NOREPORTLUN that can be passed as default_dev_flags # (but also per device if needed). # Provide BLIST_REPORTLUN2 that allows trying to use REPORT_LUNS for SCSI-2 # devices, if they are connected to a host adapter supporting more than 8 LUNs # (and thus avoiding the usual USB crap to render this feature useless when # used with default_dev_flags). # # drivers/scsi/Kconfig | 11 ----------- # drivers/scsi/scsi_scan.c | 19 +++++++++---------- # include/scsi/scsi_devinfo.h | 3 +++ # 3 files changed, 12 insertions(+), 21 deletions(-) # # include/scsi/scsi_devinfo.h # 2004/05/21 10:51:42-05:00 jejb@mulgrave.(none) +3 -0 # SCSI: make SCSI REPORT LUNS the default # # drivers/scsi/scsi_scan.c # 2004/05/21 10:51:42-05:00 jejb@mulgrave.(none) +9 -10 # SCSI: make SCSI REPORT LUNS the default # # drivers/scsi/Kconfig # 2004/05/21 10:51:42-05:00 jejb@mulgrave.(none) +0 -11 # SCSI: make SCSI REPORT LUNS the default # # ChangeSet # 2004/05/21 10:48:13-05:00 jejb@mulgrave.(none) # SCSI: deprecate BLIST_FORCELUN # # From: garloff@suse.de # # Cleanup # # Mark BLIST_FORCELUN as deprecated, as we don't want to collect a list # of perfectly working multi-LUN devices with BLIST_FORCELUN. Instead # document max_luns boot/module parameter. # # include/scsi/scsi_devinfo.h # 2004/05/21 10:47:57-05:00 jejb@mulgrave.(none) +2 -1 # SCSI: deprecate BLIST_FORCELUN # # drivers/scsi/Kconfig # 2004/05/21 10:47:57-05:00 jejb@mulgrave.(none) +2 -2 # SCSI: deprecate BLIST_FORCELUN # # ChangeSet # 2004/05/21 10:46:21-05:00 jejb@mulgrave.(none) # SCSI: logging optimisation # # From: garloff@suse.de # # Optimization. # # Tell the compiler that the SCSI LOG will not likely happen. # # drivers/scsi/scsi_logging.h # 2004/05/21 10:46:04-05:00 jejb@mulgrave.(none) +1 -1 # SCSI: logging optimisation # # ChangeSet # 2004/05/21 10:31:54-05:00 rusty@rustcorp.com.au # [PATCH] [TRIVIAL 2.6] drivers_scsi_nsp32.c: kill duplicate # # From: a.othieno@bluewin.ch (Arthur Othieno) # # drivers/scsi/nsp32.c # 2004/05/20 00:59:33-05:00 rusty@rustcorp.com.au +0 -1 # [TRIVIAL 2.6] drivers_scsi_nsp32.c: kill duplicate # # ChangeSet # 2004/05/21 10:30:21-05:00 g.liakhovetski@gmx.de # [PATCH] tmscsim: remove legacy and void code # # This one is purely cosmetic - it removes legacy (pre 2.4) and some void # (e.g. #defined as nothing locks) code. So, it doesn't affect the resulting # object file. # # drivers/scsi/tmscsim.c # 2004/05/20 18:09:04-05:00 g.liakhovetski@gmx.de +7 -157 # tmscsim: remove legacy and void code # # drivers/scsi/scsiiom.c # 2004/05/20 18:09:12-05:00 g.liakhovetski@gmx.de +2 -18 # tmscsim: remove legacy and void code # # ChangeSet # 2004/05/21 10:28:12-05:00 g.liakhovetski@gmx.de # tmscsim: remove procfs write support from tmscsim # # From: Christoph Hellwig <hch@lst.de> # # When looking at the driver after reviewing the changes I stubled over # that code. Almost all of the funcitonality (except DUMP) should go # through the midlayer and will at least cause some confusion if it # doesn't. # # Also the implementation isn't exactly nice, like kmalloced scsi commands # and the tytpical 'parsing' macros cut & pasted over all historic scsi # drivers. I think we're better of removing it completly and maybe readd # dump as a sysfs attribute if needed. # # 500 lines of code gone. # # drivers/scsi/tmscsim.c # 2004/01/31 00:41:21-06:00 g.liakhovetski@gmx.de +1 -500 # tmscsim: remove procfs write support from tmscsim # # ChangeSet # 2004/05/21 10:27:19-05:00 akpm@osdl.org # [PATCH] qlogicfas408.c warning fix # # drivers/scsi/qlogicfas.c:190: warning: initialization from incompatible pointer type # # drivers/scsi/qlogicfas408.h # 2004/05/16 02:45:03-05:00 akpm@osdl.org +1 -1 # qlogicfas408.c warning fix # # drivers/scsi/qlogicfas408.c # 2004/05/16 02:45:04-05:00 akpm@osdl.org +1 -1 # qlogicfas408.c warning fix # # ChangeSet # 2004/05/21 10:21:03-05:00 g.liakhovetski@gmx.de # [PATCH] tmscsim: no internal queue # # Here comes the 2nd one. I wanted to get Christoph's patches now in, but # already the first his patch comes on the top of this one: remove internal # command queuing in the driver. And, in fact, it fixes some bugs in it. So, # they should go in together. Here's the original comment from Christoph's # email of 1 Feb 2004: # # <start quote> # # Patch looks mostly good for me. But there's some fishyness in queuecommand, # mostly from before you patch: # # - many failure cases return one with the new EH code although we wouldn't # want to requeue the midlayer in that case. I removed the ifdef and added # a failed goto to handle them. # - we need to set cmd->result onlyh if we have an error instead of always # an overriding it - else it will leak to the midlayer in the return 1 # case. # - the check for ids out of range are superflous (this was one of the errors # above, I decided to remove it instead of fixing it). # - you don't do DC390_UNLOCK_ACB when failing. While it's a noop I think # it's bad to have locking macros in place and don't balance them. You # should probably remove it completly in one of the next patches. # - the pDCB->pWaitingSRB looks a bit strange. By unifying the the codepathes # it becomes much more readable. # # <end quote> # # drivers/scsi/tmscsim.h # 2004/03/04 15:21:39-06:00 g.liakhovetski@gmx.de +6 -17 # tmscsim: no internal queue # # drivers/scsi/tmscsim.c # 2004/05/19 18:03:25-05:00 g.liakhovetski@gmx.de +26 -153 # tmscsim: no internal queue # # drivers/scsi/scsiiom.c # 2004/03/04 15:21:39-06:00 g.liakhovetski@gmx.de +0 -3 # tmscsim: no internal queue # # ChangeSet # 2004/05/21 10:16:18-05:00 hch@lst.de # [PATCH] fix assorted wd7000 warnings # # - needs linux/delay.h for udelay # - C doesn't allow taking addresses of register variables and gcc even # complains these days # # drivers/scsi/wd7000.c # 2004/05/19 12:46:14-05:00 hch@lst.de +4 -3 # fix assorted wd7000 warnings # # ChangeSet # 2004/05/21 10:07:05-05:00 g.liakhovetski@gmx.de # [PATCH] tmscsim: 64-bit cleanup # # Ok, here comes the first one. I chose this one because it fixes an actual # bug in the driver. This bug was (partially) introduced by myself when # porting to 2.6. Partly the reason was that I disliked using # function-like macros as lvalues: # # sg_dma_address(x) = ... # sg_dma_len(x) = ... # # [OT] wouldn't it be better to introduce some macros like # set_sg_dma_{address|len}(x, y)? # # A part of the original patch has already been merged (s/UINT/ULONG/), so, # the actual version is re-diffed against 2.6.6-bk6 and re-tested (on a # plain Pentium). # # Also updates the driver-version, printed on startup. # # drivers/scsi/tmscsim.c # 2004/04/13 17:50:05-05:00 g.liakhovetski@gmx.de +11 -7 # tmscsim: 64-bit cleanup # # drivers/scsi/scsiiom.c # 2004/04/13 17:46:19-05:00 g.liakhovetski@gmx.de +7 -5 # tmscsim: 64-bit cleanup # # drivers/scsi/dc390.h # 2004/04/13 17:50:26-05:00 g.liakhovetski@gmx.de +1 -1 # tmscsim: 64-bit cleanup # # ChangeSet # 2004/05/20 19:01:34+02:00 marcel@holtmann.org # [Bluetooth] Kill duplicate includes # # This patch removes the duplicate inclusion of linux/config.h in the # hci_uart driver. # # Patch from Arthur Othieno <a.othieno@bluewin.ch> # # drivers/bluetooth/hci_ldisc.c # 2004/05/20 18:57:49+02:00 marcel@holtmann.org +0 -1 # Kill duplicate includes # # drivers/bluetooth/hci_bcsp.c # 2004/05/20 18:57:33+02:00 marcel@holtmann.org +0 -1 # Kill duplicate includes # # ChangeSet # 2004/05/19 21:26:04-07:00 akepner@sgi.com # [TG3]: Fix ethtool -S. # # drivers/net/tg3.c # 2004/05/19 21:25:43-07:00 akepner@sgi.com +1 -1 # [TG3]: Fix ethtool -S. # # ChangeSet # 2004/05/19 21:16:59-07:00 gnb@melbourne.sgi.com # [TG3]: Add more ethtool -S stats. # # drivers/net/tg3.h # 2004/05/19 21:16:34-07:00 gnb@melbourne.sgi.com +52 -0 # [TG3]: Add more ethtool -S stats. # # drivers/net/tg3.c # 2004/05/19 21:16:34-07:00 gnb@melbourne.sgi.com +102 -2 # [TG3]: Add more ethtool -S stats. # # ChangeSet # 2004/05/19 21:15:59-07:00 gnb@melbourne.sgi.com # [TG3]: Count rx_discards in rx_errors. # # drivers/net/tg3.c # 2004/05/19 21:15:38-07:00 gnb@melbourne.sgi.com +2 -1 # [TG3]: Count rx_discards in rx_errors. # # ChangeSet # 2004/05/19 21:02:13-07:00 davem@nuts.davemloft.net # Merge bk://kernel.bkbits.net/jgarzik/tg3-2.6 # into nuts.davemloft.net:/disk1/BK/tg3-2.6 # # drivers/net/tg3.c # 2004/05/19 21:02:01-07:00 davem@nuts.davemloft.net +0 -0 # Auto merged # # ChangeSet # 2004/05/19 11:12:20-05:00 jejb@mulgrave.(none) # SCSI: fix Stack overflow when lldd returns SCSI_MLQUEUE_DEVICE_BUSY # # From: Heiko Carstens <Heiko.Carstens@de.ibm.com> # # This happened when sending out the inquiry command and the LLDD was in # recovery for the specific LUN and returned SCSI_MLQUEUE_DEVICE_BUSY. # Problem is that max_device_blocked gets set _after_ the inquiry command # finished. In this specific case max_device_blocked was 0 and thus the # device was never blocked resulting in the observed stack overflow. # I moved the initializazion of max_device_blocked from scsi_add_lun to # sdev_alloc_sdev and the problem is gone. # # drivers/scsi/scsi_scan.c # 2004/05/19 11:11:55-05:00 jejb@mulgrave.(none) +5 -4 # SCSI: fix Stack overflow when lldd returns SCSI_MLQUEUE_DEVICE_BUSY # # ChangeSet # 2004/05/18 22:02:38+01:00 rmk@flint.arm.linux.org.uk # [PCMCIA] Convert IO resource allocation to use struct resource. # # This causes PCMCIA to use struct resource internally for IO resources. # This means that we can keep track of the resource pointer, expand # this resource if necessary, and use release_resource() on it when # we're done. # # This eventually means that we can change these to normal resources # which aren't marked busy. # # include/pcmcia/ss.h # 2004/05/18 22:00:16+01:00 rmk@flint.arm.linux.org.uk +1 -0 # Add struct resource to io_window_t. # # drivers/pcmcia/rsrc_mgr.c # 2004/05/18 22:00:16+01:00 rmk@flint.arm.linux.org.uk +32 -7 # Add adjust_io_region to expand already allocated IO resources. # find_io_region now returns a struct resource. # # drivers/pcmcia/cs_internal.h # 2004/05/18 22:00:15+01:00 rmk@flint.arm.linux.org.uk +3 -1 # Add and update function prototypes for find_io_region and # adjust_io_region. # # drivers/pcmcia/cs.c # 2004/05/18 22:00:15+01:00 rmk@flint.arm.linux.org.uk +13 -7 # Use struct resource when manipulating IO regions. # # ChangeSet # 2004/05/18 21:52:46+01:00 rmk@flint.arm.linux.org.uk # [PCMCIA] Fix a couple of resource bugs. # # Fix resource database bug where base + num wraps to zero. Also, # ensure that we always take the resource semaphore whenever we # allocate a resource. # # drivers/pcmcia/rsrc_mgr.c # 2004/05/18 21:50:46+01:00 rmk@flint.arm.linux.org.uk +6 -10 # Fix resource database bug where base + num wraps to zero. # Ensure that we always take the resource semaphore whenever we # allocate a resource. # # ChangeSet # 2004/05/18 13:50:23+02:00 perex@suse.cz # ALSA CVS sync # # include/sound/version.h # 2004/05/18 13:50:09+02:00 perex@suse.cz +1 -1 # ALSA CVS sync # # ChangeSet # 2004/05/17 15:35:07+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # PCM Midlevel # Call hwsync at the start of SYNC_PTR ioctl # # sound/core/pcm_native.c # 2004/05/17 01:58:42+02:00 perex@suse.cz +7 -5 # ALSA CVS update # D:2004/05/17 07:58:42 # C:PCM Midlevel # A:Jaroslav Kysela <perex@suse.cz> # F:core/pcm_native.c:1.89->1.90 # L:Call hwsync at the start of SYNC_PTR ioctl # # ChangeSet # 2004/05/17 15:34:43+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # PCM Midlevel,ALSA Core # Added SYNC_PTR ioctl for the PCM interface. # # sound/core/pcm_native.c # 2004/05/17 01:47:18+02:00 perex@suse.cz +33 -0 # ALSA CVS update # D:2004/05/17 07:47:18 # C:PCM Midlevel,ALSA Core # A:Jaroslav Kysela <perex@suse.cz> # F:core/pcm_native.c:1.88->1.89 # F:include/asound.h:1.38->1.39 # L:Added SYNC_PTR ioctl for the PCM interface. # # include/sound/asound.h # 2004/05/17 01:47:18+02:00 perex@suse.cz +16 -1 # ALSA CVS update # D:2004/05/17 07:47:18 # C:PCM Midlevel,ALSA Core # A:Jaroslav Kysela <perex@suse.cz> # F:core/pcm_native.c:1.88->1.89 # F:include/asound.h:1.38->1.39 # L:Added SYNC_PTR ioctl for the PCM interface. # # ChangeSet # 2004/05/17 15:34:22+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # ICE1712 driver # <Dirk.Kalis@t-online.de> # ice1712 patch for dsp24 value cards # Without this patch in envy24control no controls for DAC and ADC # available because no number of dacs and adcs is given. # # sound/pci/ice1712/hoontech.h # 2004/05/16 08:40:00+02:00 perex@suse.cz +7 -0 # ALSA CVS update # D:2004/05/16 14:40:00 # C:ICE1712 driver # A:Jaroslav Kysela <perex@suse.cz> # F:pci/ice1712/hoontech.c:1.6->1.7 # F:pci/ice1712/hoontech.h:1.4->1.5 # L:<Dirk.Kalis@t-online.de> # L:ice1712 patch for dsp24 value cards # L:Without this patch in envy24control no controls for DAC and ADC # L:available because no number of dacs and adcs is given. # # sound/pci/ice1712/hoontech.c # 2004/05/16 08:40:00+02:00 perex@suse.cz +73 -0 # ALSA CVS update # D:2004/05/16 14:40:00 # C:ICE1712 driver # A:Jaroslav Kysela <perex@suse.cz> # F:pci/ice1712/hoontech.c:1.6->1.7 # F:pci/ice1712/hoontech.h:1.4->1.5 # L:<Dirk.Kalis@t-online.de> # L:ice1712 patch for dsp24 value cards # L:Without this patch in envy24control no controls for DAC and ADC # L:available because no number of dacs and adcs is given. # # ChangeSet # 2004/05/17 15:33:58+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ICE1712 driver # fixes by Christoph Haderer <chris_web@gmx.at>: # - added the support of DAC/ADC mute switches # - fixed the capture route enum. # # sound/pci/ice1712/aureon.c # 2004/05/14 08:08:15+02:00 perex@suse.cz +109 -14 # ALSA CVS update # D:2004/05/14 14:08:15 # C:ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/ice1712/aureon.c:1.8->1.9 # L:fixes by Christoph Haderer <chris_web@gmx.at>: # L:- added the support of DAC/ADC mute switches # L:- fixed the capture route enum. # # ChangeSet # 2004/05/17 15:33:36+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ICE1712 driver # Added the support of Aureon 7.1-Universe. # # sound/pci/ice1712/aureon.h # 2004/05/14 06:00:24+02:00 perex@suse.cz +3 -1 # ALSA CVS update # D:2004/05/14 12:00:23 # C:ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/ice1712/aureon.c:1.7->1.8 # F:pci/ice1712/aureon.h:1.2->1.3 # L:Added the support of Aureon 7.1-Universe. # # sound/pci/ice1712/aureon.c # 2004/05/14 06:00:23+02:00 perex@suse.cz +8 -0 # ALSA CVS update # D:2004/05/14 12:00:23 # C:ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/ice1712/aureon.c:1.7->1.8 # F:pci/ice1712/aureon.h:1.2->1.3 # L:Added the support of Aureon 7.1-Universe. # # ChangeSet # 2004/05/17 15:33:15+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ICE1712 driver # added headphone amplifier switch. # initial patch by Radoslaw 'AstralStorm' Szkodzinski. # # sound/pci/ice1712/aureon.c # 2004/05/14 05:49:26+02:00 perex@suse.cz +58 -0 # ALSA CVS update # D:2004/05/14 11:49:26 # C:ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/ice1712/aureon.c:1.6->1.7 # L:added headphone amplifier switch. # L:initial patch by Radoslaw 'AstralStorm' Szkodzinski. # # ChangeSet # 2004/05/17 15:32:48+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # RME HDSP driver,RME9652 driver # fixed invalid spin_lock/unlock_irq() in the prepare callback. # # sound/pci/rme9652/rme9652.c # 2004/05/14 05:31:00+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/05/14 11:30:59 # C:RME HDSP driver,RME9652 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/rme9652/hdsp.c:1.57->1.58 # F:pci/rme9652/rme9652.c:1.44->1.45 # L:fixed invalid spin_lock/unlock_irq() in the prepare callback. # # sound/pci/rme9652/hdsp.c # 2004/05/14 05:30:59+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/05/14 11:30:59 # C:RME HDSP driver,RME9652 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/rme9652/hdsp.c:1.57->1.58 # F:pci/rme9652/rme9652.c:1.44->1.45 # L:fixed invalid spin_lock/unlock_irq() in the prepare callback. # # ChangeSet # 2004/05/17 15:32:27+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # CS4236+ driver # Added the new pnp id for an Intel mobo. # # sound/isa/cs423x/cs4236.c # 2004/05/14 05:15:54+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/05/14 11:15:54 # C:CS4236+ driver # A:Takashi Iwai <tiwai@suse.de> # F:isa/cs423x/cs4236.c:1.42->1.43 # L:Added the new pnp id for an Intel mobo. # # ChangeSet # 2004/05/17 15:32:03+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ATIIXP driver # - probe only audio codecs. # - use enums instead of embedded numbers. # - added KERN_ERR prefix to the error messages. # # sound/pci/atiixp.c # 2004/05/13 13:40:18+02:00 perex@suse.cz +36 -26 # ALSA CVS update # D:2004/05/13 19:40:18 # C:ATIIXP driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/atiixp.c:1.8->1.9 # L:- probe only audio codecs. # L:- use enums instead of embedded numbers. # L:- added KERN_ERR prefix to the error messages. # # ChangeSet # 2004/05/17 15:31:38+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PPC PMAC driver,PPC Tumbler driver # Giuliano Pochini <pochini@shiny.it>: # fixed the return value of interrupt handlers. # # sound/ppc/tumbler.c # 2004/05/13 13:38:56+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/13 19:38:56 # C:PPC PMAC driver,PPC Tumbler driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/pmac.c:1.29->1.30 # F:ppc/tumbler.c:1.30->1.31 # L:Giuliano Pochini <pochini@shiny.it>: # L:fixed the return value of interrupt handlers. # # sound/ppc/pmac.c # 2004/05/13 13:38:56+02:00 perex@suse.cz +3 -3 # ALSA CVS update # D:2004/05/13 19:38:56 # C:PPC PMAC driver,PPC Tumbler driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/pmac.c:1.29->1.30 # F:ppc/tumbler.c:1.30->1.31 # L:Giuliano Pochini <pochini@shiny.it>: # L:fixed the return value of interrupt handlers. # # ChangeSet # 2004/05/17 15:31:16+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PCM Midlevel # fixed the buffer id confliction in the case of CONTINUOUS or ISA buffers. # # sound/core/pcm_memory.c # 2004/05/13 13:37:10+02:00 perex@suse.cz +5 -1 # ALSA CVS update # D:2004/05/13 19:37:10 # C:PCM Midlevel # A:Takashi Iwai <tiwai@suse.de> # F:core/pcm_memory.c:1.26->1.27 # L:fixed the buffer id confliction in the case of CONTINUOUS or ISA buffers. # # ChangeSet # 2004/05/17 15:30:56+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # USB generic driver # fix typo # # sound/usb/usbquirks.h # 2004/05/12 01:29:22+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/05/12 07:29:22 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbquirks.h:1.32->1.33 # L:fix typo # # ChangeSet # 2004/05/17 15:30:31+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # USB generic driver # Roland UA-1000 support # # sound/usb/usbquirks.h # 2004/05/11 06:58:11+02:00 perex@suse.cz +55 -0 # ALSA CVS update # D:2004/05/11 12:58:11 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbquirks.h:1.31->1.32 # L:Roland UA-1000 support # # ChangeSet # 2004/05/17 15:30:09+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # AC97 Codec Core # STAC9758: stereo mutes, jack configuration # # sound/pci/ac97/ac97_patch.c # 2004/05/11 03:32:58+02:00 perex@suse.cz +162 -3 # ALSA CVS update # D:2004/05/11 09:32:58 # C:AC97 Codec Core # A:Clemens Ladisch <clemens@ladisch.de> # F:pci/ac97/ac97_patch.c:1.48->1.49 # L:STAC9758: stereo mutes, jack configuration # # ChangeSet # 2004/05/17 15:29:43+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PARISC Harmony driver # - fixed the buffer allocation with the new API. # - optimized the rate and format setting. # - removed redundant call of buffer release. # - removed invalid __devinit prefix. # # sound/parisc/harmony.c # 2004/05/07 12:04:31+02:00 perex@suse.cz +76 -99 # ALSA CVS update # D:2004/05/07 18:04:31 # C:PARISC Harmony driver # A:Takashi Iwai <tiwai@suse.de> # F:parisc/harmony.c:1.9->1.10 # L:- fixed the buffer allocation with the new API. # L:- optimized the rate and format setting. # L:- removed redundant call of buffer release. # L:- removed invalid __devinit prefix. # # ChangeSet # 2004/05/17 15:29:19+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation,ICE1724 driver,ICE1712 driver # - added model module option to specify board model to snd-ice1712 and snd-ice1724 # drivers. # - removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # - rewritten some struct init in C99 style. # - function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/revo.c # 2004/05/07 05:19:00+02:00 perex@suse.cz +5 -4 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/prodigy.c # 2004/05/07 05:19:00+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/ice1724.c # 2004/05/07 05:19:00+02:00 perex@suse.cz +38 -24 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/ice1712.h # 2004/05/07 05:19:00+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/ice1712.c # 2004/05/07 05:18:59+02:00 perex@suse.cz +34 -21 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/hoontech.h # 2004/05/07 05:18:59+02:00 perex@suse.cz +5 -3 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/hoontech.c # 2004/05/07 05:18:59+02:00 perex@suse.cz +25 -20 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/ews.c # 2004/05/07 05:18:59+02:00 perex@suse.cz +25 -20 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/envy24ht.h # 2004/05/07 05:18:59+02:00 perex@suse.cz +3 -0 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/delta.c # 2004/05/07 05:18:59+02:00 perex@suse.cz +58 -50 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/aureon.c # 2004/05/07 05:18:59+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # sound/pci/ice1712/amp.c # 2004/05/07 05:18:59+02:00 perex@suse.cz +5 -4 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # Documentation/sound/alsa/ALSA-Configuration.txt # 2004/05/07 05:18:59+02:00 perex@suse.cz +7 -0 # ALSA CVS update # D:2004/05/07 11:18:59 # C:Documentation,ICE1724 driver,ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.43->1.44 # F:pci/ice1712/amp.c:1.4->1.5 # F:pci/ice1712/aureon.c:1.5->1.6 # F:pci/ice1712/delta.c:1.16->1.17 # F:pci/ice1712/envy24ht.h:1.3->1.4 # F:pci/ice1712/ews.c:1.16->1.17 # F:pci/ice1712/hoontech.c:1.5->1.6 # F:pci/ice1712/hoontech.h:1.3->1.4 # F:pci/ice1712/ice1712.c:1.51->1.52 # F:pci/ice1712/ice1712.h:1.19->1.20 # F:pci/ice1712/ice1724.c:1.29->1.30 # F:pci/ice1712/prodigy.c:1.4->1.5 # F:pci/ice1712/revo.c:1.5->1.6 # L:- added model module option to specify board model to snd-ice1712 and snd-ice1724 # L: drivers. # L:- removed ez8 option from ice1724. this can be specified as 'model=ez8' option. # L:- rewritten some struct init in C99 style. # L:- function for accessing i2c of ice1724 (for future use). # # ChangeSet # 2004/05/17 15:28:56+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Sound Core PDAudioCF driver # - fixed the changed function decleration. # - fixed the return value from cast check. # # sound/pcmcia/pdaudiocf/pdaudiocf_irq.c # 2004/05/07 05:10:26+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/07 11:10:26 # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:pcmcia/pdaudiocf/pdaudiocf.h:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.4->1.5 # L:- fixed the changed function decleration. # L:- fixed the return value from cast check. # # sound/pcmcia/pdaudiocf/pdaudiocf.h # 2004/05/07 05:10:26+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/07 11:10:26 # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:pcmcia/pdaudiocf/pdaudiocf.h:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.4->1.5 # L:- fixed the changed function decleration. # L:- fixed the return value from cast check. # # ChangeSet # 2004/05/17 15:28:36+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # VIA82xx driver # renamed the elements of 'input source select' control to avoid confusion. # # formerly used words 'Line' and 'Mic', which have nothing to do with # the actual connections. # # sound/pci/via82xx.c # 2004/05/06 08:27:23+02:00 perex@suse.cz +4 -1 # ALSA CVS update # D:2004/05/06 14:27:23 # C:VIA82xx driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/via82xx.c:1.99->1.100 # L:renamed the elements of 'input source select' control to avoid confusion. # L: # L:formerly used words 'Line' and 'Mic', which have nothing to do with # L:the actual connections. # # ChangeSet # 2004/05/17 15:28:08+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation,CMIPCI driver # make soft_ac3 option conditional again. # # this will make it possible for old chips to feed the IEC958 data # without conversion (sometimes useful, e.g. for apps using mmap). # # sound/pci/cmipci.c # 2004/05/06 08:17:02+02:00 perex@suse.cz +10 -4 # ALSA CVS update # D:2004/05/06 14:17:02 # C:Documentation,CMIPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.42->1.43 # F:Documentation/CMIPCI.txt:1.5->1.6 # F:pci/cmipci.c:1.64->1.65 # L:make soft_ac3 option conditional again. # L: # L:this will make it possible for old chips to feed the IEC958 data # L:without conversion (sometimes useful, e.g. for apps using mmap). # # Documentation/sound/alsa/CMIPCI.txt # 2004/05/06 08:17:02+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/05/06 14:17:02 # C:Documentation,CMIPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.42->1.43 # F:Documentation/CMIPCI.txt:1.5->1.6 # F:pci/cmipci.c:1.64->1.65 # L:make soft_ac3 option conditional again. # L: # L:this will make it possible for old chips to feed the IEC958 data # L:without conversion (sometimes useful, e.g. for apps using mmap). # # Documentation/sound/alsa/ALSA-Configuration.txt # 2004/05/06 08:17:02+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/05/06 14:17:02 # C:Documentation,CMIPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.42->1.43 # F:Documentation/CMIPCI.txt:1.5->1.6 # F:pci/cmipci.c:1.64->1.65 # L:make soft_ac3 option conditional again. # L: # L:this will make it possible for old chips to feed the IEC958 data # L:without conversion (sometimes useful, e.g. for apps using mmap). # # ChangeSet # 2004/05/17 15:27:42+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # Sound Core PDAudioCF driver # Updated interrupt function to 2.6 irq API # # sound/pcmcia/pdaudiocf/pdaudiocf_irq.c # 2004/05/05 08:29:56+02:00 perex@suse.cz +3 -2 # ALSA CVS update # D:2004/05/05 14:29:56 # C:Sound Core PDAudioCF driver # A:Jaroslav Kysela <perex@suse.cz> # F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.3->1.4 # L:Updated interrupt function to 2.6 irq API # # ChangeSet # 2004/05/17 15:27:17+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # EMU10K1/EMU10K2 driver # Credits for SB Live (c) 2003 # # sound/pci/emu10k1/emumixer.c # 2004/05/05 08:20:23+02:00 perex@suse.cz +5 -0 # ALSA CVS update # D:2004/05/05 14:20:23 # C:EMU10K1/EMU10K2 driver # A:Jaroslav Kysela <perex@suse.cz> # F:pci/emu10k1/emumixer.c:1.21->1.22 # L:Credits for SB Live (c) 2003 # # ChangeSet # 2004/05/17 15:26:57+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # USB generic driver # (Alan Stern) use altsetting number instead of index in messages # # sound/usb/usbaudio.c # 2004/05/05 03:50:45+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/05/05 09:50:45 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbaudio.c:1.99->1.100 # L:(Alan Stern) use altsetting number instead of index in messages # # ChangeSet # 2004/05/17 15:26:35+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation # added the document about Audigy mixer implementation by Peter Zubaj. # it is not target to users, rather to developers. # # Documentation/sound/alsa/Audigy-mixer.txt # 2004/05/17 13:27:25+02:00 perex@suse.cz +345 -0 # ALSA CVS update # D:2004/05/04 16:51:39 # C:Documentation # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/Audigy-mixer.txt:INITIAL->1.1 # L:added the document about Audigy mixer implementation by Peter Zubaj. # L:it is not target to users, rather to developers. # # Documentation/sound/alsa/Audigy-mixer.txt # 2004/05/17 13:27:25+02:00 perex@suse.cz +0 -0 # BitKeeper file /home/perex/bk/linux-sound/work/Documentation/sound/alsa/Audigy-mixer.txt # # ChangeSet # 2004/05/17 15:26:10+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ATIIXP driver # - fixed the direct SPDIF playback mode. (still experimental) # - use the different driver id name for the direct spdif mode, so that # alsa-lib can read another corresponding configuration. # # sound/pci/atiixp.c # 2004/05/04 10:24:29+02:00 perex@suse.cz +8 -8 # ALSA CVS update # D:2004/05/04 16:24:29 # C:ATIIXP driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/atiixp.c:1.7->1.8 # L:- fixed the direct SPDIF playback mode. (still experimental) # L:- use the different driver id name for the direct spdif mode, so that # L: alsa-lib can read another corresponding configuration. # # ChangeSet # 2004/05/17 15:25:49+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation,CMIPCI driver # dropped the software encoding of AC3 stream in the driver. # this is done now in alsa-lib. # soft_ac3 module option is kept for backward compatibility but not # referred at all. # # sound/pci/cmipci.c # 2004/05/04 10:21:57+02:00 perex@suse.cz +53 -442 # ALSA CVS update # D:2004/05/04 16:21:57 # C:Documentation,CMIPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.41->1.42 # F:pci/cmipci.c:1.63->1.64 # L:dropped the software encoding of AC3 stream in the driver. # L:this is done now in alsa-lib. # L:soft_ac3 module option is kept for backward compatibility but not # L:referred at all. # # Documentation/sound/alsa/ALSA-Configuration.txt # 2004/05/04 10:21:57+02:00 perex@suse.cz +1 -2 # ALSA CVS update # D:2004/05/04 16:21:57 # C:Documentation,CMIPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.41->1.42 # F:pci/cmipci.c:1.63->1.64 # L:dropped the software encoding of AC3 stream in the driver. # L:this is done now in alsa-lib. # L:soft_ac3 module option is kept for backward compatibility but not # L:referred at all. # # ChangeSet # 2004/05/17 15:25:22+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation,NM256 driver # - added a blacklist to avoid the possible hang-up at module loading. # - added notes about the hang-up problem to ALSA-Configuration.txt. # # sound/pci/nm256/nm256.c # 2004/05/04 10:19:25+02:00 perex@suse.cz +29 -0 # ALSA CVS update # D:2004/05/04 16:19:25 # C:Documentation,NM256 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.40->1.41 # F:pci/nm256/nm256.c:1.37->1.38 # L:- added a blacklist to avoid the possible hang-up at module loading. # L:- added notes about the hang-up problem to ALSA-Configuration.txt. # # Documentation/sound/alsa/ALSA-Configuration.txt # 2004/05/04 10:19:25+02:00 perex@suse.cz +19 -2 # ALSA CVS update # D:2004/05/04 16:19:25 # C:Documentation,NM256 driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/ALSA-Configuration.txt:1.40->1.41 # F:pci/nm256/nm256.c:1.37->1.38 # L:- added a blacklist to avoid the possible hang-up at module loading. # L:- added notes about the hang-up problem to ALSA-Configuration.txt. # # ChangeSet # 2004/05/17 15:25:00+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PCM Midlevel # fixed the bit width of IEC958_SUBFRAME_* formats from 24 to 32. # # sound/core/pcm_misc.c # 2004/05/04 10:09:50+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/04 16:09:50 # C:PCM Midlevel # A:Takashi Iwai <tiwai@suse.de> # F:core/pcm_misc.c:1.12->1.13 # L:fixed the bit width of IEC958_SUBFRAME_* formats from 24 to 32. # # ChangeSet # 2004/05/17 15:24:35+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # VIA82xx driver # fixed again the DXS entry for m680x to 48k-fixed rate. # # sound/pci/via82xx.c # 2004/05/04 10:09:08+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/04 16:09:08 # C:VIA82xx driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/via82xx.c:1.98->1.99 # L:fixed again the DXS entry for m680x to 48k-fixed rate. # # ChangeSet # 2004/05/17 15:24:11+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # ALSA<-OSS emulation # don't return negative byte count from GET[IO]PTR ioctl # # sound/core/oss/pcm_oss.c # 2004/05/04 08:02:02+02:00 perex@suse.cz +3 -3 # ALSA CVS update # D:2004/05/04 14:02:02 # C:ALSA<-OSS emulation # A:Clemens Ladisch <clemens@ladisch.de> # F:core/oss/pcm_oss.c:1.68->1.69 # L:don't return negative byte count from GET[IO]PTR ioctl # # ChangeSet # 2004/05/17 15:23:52+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # ICE1712 driver # fix Hoontech DSP* box configuration # # sound/pci/ice1712/hoontech.c # 2004/05/04 01:46:29+02:00 perex@suse.cz +13 -8 # ALSA CVS update # D:2004/05/04 07:46:29 # C:ICE1712 driver # A:Clemens Ladisch <clemens@ladisch.de> # F:pci/ice1712/hoontech.c:1.4->1.5 # L:fix Hoontech DSP* box configuration # # ChangeSet # 2004/05/17 15:23:29+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation # - fixed some obsolete descriptions and typos. # - a bit more detailed description about addition of the new driver. # # Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl # 2004/05/03 12:37:55+02:00 perex@suse.cz +13 -8 # ALSA CVS update # D:2004/05/03 18:37:55 # C:Documentation # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.27->1.28 # L:- fixed some obsolete descriptions and typos. # L:- a bit more detailed description about addition of the new driver. # # ChangeSet # 2004/05/17 15:23:08+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # SA11xx UDA1341 driver,UDA1341 # - clean up PM codes using the new PM callback functions. # # sound/arm/sa11xx-uda1341.c # 2004/05/03 12:36:50+02:00 perex@suse.cz +10 -55 # ALSA CVS update # D:2004/05/03 18:36:50 # C:SA11xx UDA1341 driver,UDA1341 # A:Takashi Iwai <tiwai@suse.de> # F:arm/sa11xx-uda1341.c:1.14->1.15 # F:include/uda1341.h:1.5->1.6 # L:- clean up PM codes using the new PM callback functions. # # include/sound/uda1341.h # 2004/05/03 12:36:50+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/03 18:36:50 # C:SA11xx UDA1341 driver,UDA1341 # A:Takashi Iwai <tiwai@suse.de> # F:arm/sa11xx-uda1341.c:1.14->1.15 # F:include/uda1341.h:1.5->1.6 # L:- clean up PM codes using the new PM callback functions. # # ChangeSet # 2004/05/17 15:22:44+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ALSA Core # - added the generic PM callback registration. # - rewritten ISA callbacks to use the new one. # # sound/core/sound.c # 2004/05/03 12:36:07+02:00 perex@suse.cz +1 -3 # ALSA CVS update # D:2004/05/03 18:36:07 # C:ALSA Core # A:Takashi Iwai <tiwai@suse.de> # F:core/init.c:1.45->1.46 # F:core/sound.c:1.61->1.62 # F:include/core.h:1.50->1.51 # L:- added the generic PM callback registration. # L:- rewritten ISA callbacks to use the new one. # # sound/core/init.c # 2004/05/03 12:36:07+02:00 perex@suse.cz +9 -9 # ALSA CVS update # D:2004/05/03 18:36:07 # C:ALSA Core # A:Takashi Iwai <tiwai@suse.de> # F:core/init.c:1.45->1.46 # F:core/sound.c:1.61->1.62 # F:include/core.h:1.50->1.51 # L:- added the generic PM callback registration. # L:- rewritten ISA callbacks to use the new one. # # include/sound/core.h # 2004/05/03 12:36:07+02:00 perex@suse.cz +4 -1 # ALSA CVS update # D:2004/05/03 18:36:07 # C:ALSA Core # A:Takashi Iwai <tiwai@suse.de> # F:core/init.c:1.45->1.46 # F:core/sound.c:1.61->1.62 # F:include/core.h:1.50->1.51 # L:- added the generic PM callback registration. # L:- rewritten ISA callbacks to use the new one. # # ChangeSet # 2004/05/17 15:22:22+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ES1968 driver # - set ACPI D3 at suspend. # - fixed the interrupt disabling at shutdown. # - enabled PM for compaq Armada. # # sound/pci/es1968.c # 2004/05/03 12:34:48+02:00 perex@suse.cz +7 -2 # ALSA CVS update # D:2004/05/03 18:34:48 # C:ES1968 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/es1968.c:1.65->1.66 # L:- set ACPI D3 at suspend. # L:- fixed the interrupt disabling at shutdown. # L:- enabled PM for compaq Armada. # # ChangeSet # 2004/05/17 15:21:59+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # AC97 Codec Core # try to mute and power down in the destructor (to shut up noises). # # sound/pci/ac97/ac97_codec.c # 2004/05/03 12:32:57+02:00 perex@suse.cz +25 -7 # ALSA CVS update # D:2004/05/03 18:32:57 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_codec.c:1.131->1.132 # L:try to mute and power down in the destructor (to shut up noises). # # ChangeSet # 2004/05/17 15:21:39+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # CS4231 driver # add missing closing brace # # sound/isa/cs423x/cs4231_lib.c # 2004/05/03 09:37:05+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/05/03 15:37:05 # C:CS4231 driver # A:Clemens Ladisch <clemens@ladisch.de> # F:isa/cs423x/cs4231_lib.c:1.40->1.41 # L:add missing closing brace # # ChangeSet # 2004/05/17 15:21:16+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # RME HDSP driver # HDSP9632 has also firmware version 0x97 # # sound/pci/rme9652/hdsp.c # 2004/05/03 04:01:17+02:00 perex@suse.cz +3 -0 # ALSA CVS update # D:2004/05/03 10:01:17 # C:RME HDSP driver # A:Jaroslav Kysela <perex@suse.cz> # F:pci/rme9652/hdsp.c:1.56->1.57 # L:HDSP9632 has also firmware version 0x97 # # ChangeSet # 2004/05/17 15:20:55+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # Documentation,EMU10K1/EMU10K2 driver # Initial attempt to add support for SB Live 5.1 (c) 2003 # # sound/pci/emu10k1/emumixer.c # 2004/05/03 03:43:04+02:00 perex@suse.cz +6 -0 # ALSA CVS update # D:2004/05/03 09:43:04 # C:Documentation,EMU10K1/EMU10K2 driver # A:Jaroslav Kysela <perex@suse.cz> # F:Documentation/ALSA-Configuration.txt:1.39->1.40 # F:include/emu10k1.h:1.38->1.39 # F:pci/emu10k1/emu10k1_main.c:1.32->1.33 # F:pci/emu10k1/emufx.c:1.51->1.52 # F:pci/emu10k1/emumixer.c:1.20->1.21 # L:Initial attempt to add support for SB Live 5.1 (c) 2003 # # sound/pci/emu10k1/emufx.c # 2004/05/03 03:43:04+02:00 perex@suse.cz +12 -8 # ALSA CVS update # D:2004/05/03 09:43:04 # C:Documentation,EMU10K1/EMU10K2 driver # A:Jaroslav Kysela <perex@suse.cz> # F:Documentation/ALSA-Configuration.txt:1.39->1.40 # F:include/emu10k1.h:1.38->1.39 # F:pci/emu10k1/emu10k1_main.c:1.32->1.33 # F:pci/emu10k1/emufx.c:1.51->1.52 # F:pci/emu10k1/emumixer.c:1.20->1.21 # L:Initial attempt to add support for SB Live 5.1 (c) 2003 # # sound/pci/emu10k1/emu10k1_main.c # 2004/05/03 03:43:04+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/05/03 09:43:04 # C:Documentation,EMU10K1/EMU10K2 driver # A:Jaroslav Kysela <perex@suse.cz> # F:Documentation/ALSA-Configuration.txt:1.39->1.40 # F:include/emu10k1.h:1.38->1.39 # F:pci/emu10k1/emu10k1_main.c:1.32->1.33 # F:pci/emu10k1/emufx.c:1.51->1.52 # F:pci/emu10k1/emumixer.c:1.20->1.21 # L:Initial attempt to add support for SB Live 5.1 (c) 2003 # # include/sound/emu10k1.h # 2004/05/03 03:43:04+02:00 perex@suse.cz +8 -4 # ALSA CVS update # D:2004/05/03 09:43:04 # C:Documentation,EMU10K1/EMU10K2 driver # A:Jaroslav Kysela <perex@suse.cz> # F:Documentation/ALSA-Configuration.txt:1.39->1.40 # F:include/emu10k1.h:1.38->1.39 # F:pci/emu10k1/emu10k1_main.c:1.32->1.33 # F:pci/emu10k1/emufx.c:1.51->1.52 # F:pci/emu10k1/emumixer.c:1.20->1.21 # L:Initial attempt to add support for SB Live 5.1 (c) 2003 # # Documentation/sound/alsa/ALSA-Configuration.txt # 2004/05/03 03:43:04+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/05/03 09:43:04 # C:Documentation,EMU10K1/EMU10K2 driver # A:Jaroslav Kysela <perex@suse.cz> # F:Documentation/ALSA-Configuration.txt:1.39->1.40 # F:include/emu10k1.h:1.38->1.39 # F:pci/emu10k1/emu10k1_main.c:1.32->1.33 # F:pci/emu10k1/emufx.c:1.51->1.52 # F:pci/emu10k1/emumixer.c:1.20->1.21 # L:Initial attempt to add support for SB Live 5.1 (c) 2003 # # ChangeSet # 2004/05/17 15:20:32+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # VIA82xx driver # added DXS whitelist for (eMachines) m680x. # # sound/pci/via82xx.c # 2004/05/02 05:15:40+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/05/02 11:15:40 # C:VIA82xx driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/via82xx.c:1.97->1.98 # L:added DXS whitelist for (eMachines) m680x. # # ChangeSet # 2004/05/17 15:20:12+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # CS4231 driver # checks the PCM substream pointers to fix oops/panic in the interrupt # handler. # # sound/isa/cs423x/cs4231_lib.c # 2004/05/01 04:01:11+02:00 perex@suse.cz +15 -8 # ALSA CVS update # D:2004/05/01 10:01:11 # C:CS4231 driver # A:Takashi Iwai <tiwai@suse.de> # F:isa/cs423x/cs4231_lib.c:1.39->1.40 # L:checks the PCM substream pointers to fix oops/panic in the interrupt # L:handler. # # ChangeSet # 2004/05/17 15:19:51+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # Intel8x0 driver # check that period interrupt really has occured; # clear only those interrupts that have been handled # # sound/pci/intel8x0.c # 2004/04/26 02:47:09+02:00 perex@suse.cz +7 -3 # ALSA CVS update # D:2004/04/26 08:47:09 # C:Intel8x0 driver # A:Clemens Ladisch <clemens@ladisch.de> # F:pci/intel8x0.c:1.136->1.137 # L:check that period interrupt really has occured; # L:clear only those interrupts that have been handled # # ChangeSet # 2004/05/17 15:19:27+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,OPL4 # make some module parameters sysfs-writable, where appropriate # # sound/drivers/opl4/opl4_seq.c # 2004/04/26 02:31:23+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/26 08:31:22 # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,OPL4 # A:Clemens Ladisch <clemens@ladisch.de> # F:core/oss/pcm_oss.c:1.67->1.68 # F:core/seq/seq.c:1.11->1.12 # F:core/seq/seq_midi.c:1.19->1.20 # F:core/seq/oss/seq_oss.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.3->1.4 # L:make some module parameters sysfs-writable, where appropriate # # sound/core/seq/seq_midi.c # 2004/04/26 02:31:23+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/04/26 08:31:22 # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,OPL4 # A:Clemens Ladisch <clemens@ladisch.de> # F:core/oss/pcm_oss.c:1.67->1.68 # F:core/seq/seq.c:1.11->1.12 # F:core/seq/seq_midi.c:1.19->1.20 # F:core/seq/oss/seq_oss.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.3->1.4 # L:make some module parameters sysfs-writable, where appropriate # # sound/core/seq/seq.c # 2004/04/26 02:31:23+02:00 perex@suse.cz +6 -6 # ALSA CVS update # D:2004/04/26 08:31:22 # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,OPL4 # A:Clemens Ladisch <clemens@ladisch.de> # F:core/oss/pcm_oss.c:1.67->1.68 # F:core/seq/seq.c:1.11->1.12 # F:core/seq/seq_midi.c:1.19->1.20 # F:core/seq/oss/seq_oss.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.3->1.4 # L:make some module parameters sysfs-writable, where appropriate # # sound/core/seq/oss/seq_oss.c # 2004/04/26 02:31:23+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/26 08:31:22 # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,OPL4 # A:Clemens Ladisch <clemens@ladisch.de> # F:core/oss/pcm_oss.c:1.67->1.68 # F:core/seq/seq.c:1.11->1.12 # F:core/seq/seq_midi.c:1.19->1.20 # F:core/seq/oss/seq_oss.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.3->1.4 # L:make some module parameters sysfs-writable, where appropriate # # sound/core/oss/pcm_oss.c # 2004/04/26 02:31:22+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/26 08:31:22 # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,OPL4 # A:Clemens Ladisch <clemens@ladisch.de> # F:core/oss/pcm_oss.c:1.67->1.68 # F:core/seq/seq.c:1.11->1.12 # F:core/seq/seq_midi.c:1.19->1.20 # F:core/seq/oss/seq_oss.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.3->1.4 # L:make some module parameters sysfs-writable, where appropriate # # ChangeSet # 2004/05/17 15:19:06+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PARISC Harmony driver # fixed compilation - using struct parisc_device for DMA allocation. # # sound/parisc/harmony.c # 2004/04/24 15:01:49+02:00 perex@suse.cz +7 -29 # ALSA CVS update # D:2004/04/24 21:01:49 # C:PARISC Harmony driver # A:Takashi Iwai <tiwai@suse.de> # F:parisc/harmony.c:1.8->1.9 # L:fixed compilation - using struct parisc_device for DMA allocation. # # ChangeSet # 2004/05/17 11:37:11+02:00 perex@suse.cz # Merge suse.cz:/home/perex/bk/linux-sound/linux-2.5 # into suse.cz:/home/perex/bk/linux-sound/linux-sound # # sound/pcmcia/pdaudiocf/pdaudiocf.c # 2004/05/17 11:36:58+02:00 perex@suse.cz +0 -0 # Auto merged # # sound/isa/wavefront/wavefront_synth.c # 2004/05/17 11:36:58+02:00 perex@suse.cz +0 -0 # Auto merged # # sound/isa/es1688/es1688.c # 2004/05/17 11:36:57+02:00 perex@suse.cz +0 -0 # Auto merged # # include/linux/pci_ids.h # 2004/05/17 11:36:57+02:00 perex@suse.cz +0 -0 # Auto merged # # ChangeSet # 2004/05/15 08:42:53-05:00 jejb@mulgrave.(none) # scsi sg: fix smp_call_function() with intrs disabled # # From: Matthew Wilcox <willy@debian.org>, # Douglas Gilbert <dougg@torque.net> # # - Fix vmalloc,vfree with intrs disabled # - bump version number # - introduce MODULE_VERSION # - increase over allocation of sg_dev_arr from 6 to 32 # # drivers/scsi/sg.c # 2004/05/15 08:42:13-05:00 jejb@mulgrave.(none) +77 -76 # scsi sg: fix smp_call_function() with intrs disabled # # ChangeSet # 2004/05/15 08:37:26-05:00 akpm@osdl.org # [PATCH] Fix dpt_i2o # # From: Go Taniguchi <go@turbolinux.co.jp> # # Make it build (and work) again. # # drivers/scsi/dpti.h # 2004/04/27 03:58:25-05:00 akpm@osdl.org +2 -2 # Fix dpt_i2o # # drivers/scsi/dpt_i2o.c # 2004/04/27 03:58:25-05:00 akpm@osdl.org +118 -38 # Fix dpt_i2o # # drivers/scsi/Kconfig # 2004/04/27 03:58:25-05:00 akpm@osdl.org +1 -1 # Fix dpt_i2o # # ChangeSet # 2004/05/13 15:03:44-05:00 jejb@mulgrave.(none) # gdth driver update to 3.04 # # From: Leubner, Achim <Achim_Leubner@adaptec.com> # # - Support for drives > 2 TB implemented # - 64-bit DMA support depending on the controller firmware version implemented # - Some important bug fixes made # # drivers/scsi/gdth_proc.h # 2004/05/13 15:02:45-05:00 jejb@mulgrave.(none) +9 -20 # gdth driver update to 3.04 # # drivers/scsi/gdth_proc.c # 2004/05/13 15:02:45-05:00 jejb@mulgrave.(none) +525 -1066 # gdth driver update to 3.04 # # drivers/scsi/gdth_ioctl.h # 2004/05/13 15:02:45-05:00 jejb@mulgrave.(none) +41 -9 # gdth driver update to 3.04 # # drivers/scsi/gdth.h # 2004/05/13 15:02:45-05:00 jejb@mulgrave.(none) +115 -42 # gdth driver update to 3.04 # # drivers/scsi/gdth.c # 2004/05/13 15:02:45-05:00 jejb@mulgrave.(none) +1758 -1354 # gdth driver update to 3.04 # # ChangeSet # 2004/05/13 12:40:33-05:00 dougg@torque.net # [PATCH] st.c for GET_IDLUN # # A little more testing of st's SG_IO ioctl turned up a # small problem. # # This is the corresponding patch that was applied to the # sd driver when it received the block layer SG_IO ioctl. # # For least surprise of lk 2.4 utilities that use the # SCSI_IOCTL_GET_IDLUN and SCSI_IOCTL_GET_BUS_NUMBER # ioctls (e.g. sg_map) it is better to return the correct # values rather than 0. # # drivers/scsi/st.c # 2004/04/25 03:13:50-05:00 dougg@torque.net +11 -5 # st.c for GET_IDLUN # # ChangeSet # 2004/05/13 12:36:42-05:00 jejb@mulgrave.(none) # Fix SCSI device state model # # Following a prior patch, we made cancel the sole # route into deleted, but forgot to update the # state model checks to reflect this. # # offline and created also go to cancel # # drivers/scsi/scsi_lib.c # 2004/05/13 12:36:01-05:00 jejb@mulgrave.(none) +2 -2 # Fix SCSI device state model # # ChangeSet # 2004/05/11 11:16:45-05:00 jejb@mulgrave.(none) # Make st support the scsi_device timeout # # From: Brian King <brking@us.ibm.com> # # drivers/scsi/st.h # 2004/05/11 11:16:20-05:00 jejb@mulgrave.(none) +0 -1 # Make st support the scsi_device timeout # # drivers/scsi/st.c # 2004/05/11 11:16:20-05:00 jejb@mulgrave.(none) +19 -19 # Make st support the scsi_device timeout # # ChangeSet # 2004/05/11 10:33:58-05:00 alan@redhat.com # [PATCH] PATCH: Do something about aacraid # # This is a fairly minimal fix for aacraid. It removes the happy cast # pointers to u32 garbage in the 2.6 code and replaces it with the working # 2.4 equivalents. I've not backported any of the other changes from 2.4 to # 2.6 yet, and some things have gone which are good to be gone (eg the # proc/scsi horror). There is a certain amount of white space noise caused # by realigning with the 2.4 code so I could see what was going on. # # Tested on a dual opteron # # drivers/scsi/aacraid/sa.c # 2004/05/10 15:21:30-05:00 alan@redhat.com +5 -0 # PATCH: Do something about aacraid # # drivers/scsi/aacraid/dpcsup.c # 2004/05/10 15:23:18-05:00 alan@redhat.com +34 -19 # PATCH: Do something about aacraid # # drivers/scsi/aacraid/commsup.c # 2004/05/10 15:16:08-05:00 alan@redhat.com +48 -33 # PATCH: Do something about aacraid # # drivers/scsi/aacraid/comminit.c # 2004/05/10 15:11:56-05:00 alan@redhat.com +6 -3 # PATCH: Do something about aacraid # # drivers/scsi/aacraid/commctrl.c # 2004/05/10 15:22:40-05:00 alan@redhat.com +20 -17 # PATCH: Do something about aacraid # # drivers/scsi/aacraid/aacraid.h # 2004/05/10 15:02:37-05:00 alan@redhat.com +35 -122 # PATCH: Do something about aacraid # # drivers/scsi/aacraid/README # 2004/05/10 15:20:16-05:00 alan@redhat.com +6 -2 # PATCH: Do something about aacraid # # ChangeSet # 2004/05/10 13:08:44-04:00 jgarzik@redhat.com # [netdrvr tg3] netdev_priv # # drivers/net/tg3.c # 2004/05/10 13:07:02-04:00 jgarzik@redhat.com +38 -36 # [netdrvr tg3] netdev_priv # # ChangeSet # 2004/04/24 16:33:25+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # OPL3SA2 driver # Added YMH0801 ISA PnP ID - OPL3-SA2 # # sound/isa/opl3sa2.c # 2004/04/24 07:07:50+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/04/24 13:07:50 # C:OPL3SA2 driver # A:Jaroslav Kysela <perex@suse.cz> # F:isa/opl3sa2.c:1.34->1.35 # L:Added YMH0801 ISA PnP ID - OPL3-SA2 # # ChangeSet # 2004/04/24 16:33:07+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # VIA82xx driver # - added the experimental PM support. # # sound/pci/via82xx.c # 2004/04/23 10:08:11+02:00 perex@suse.cz +94 -0 # ALSA CVS update # D:2004/04/23 16:08:11 # C:VIA82xx driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/via82xx.c:1.96->1.97 # L:- added the experimental PM support. # # ChangeSet # 2004/04/24 16:32:49+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PCI drivers,ATIIXP driver # - added IXP 300 to descriptions and comments. # - fixed the codec probing without the proper interrupts. # - added the experimental PM support. # # sound/pci/atiixp.c # 2004/04/23 10:07:54+02:00 perex@suse.cz +81 -7 # ALSA CVS update # D:2004/04/23 16:07:54 # C:PCI drivers,ATIIXP driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.26->1.27 # F:pci/atiixp.c:1.6->1.7 # L:- added IXP 300 to descriptions and comments. # L:- fixed the codec probing without the proper interrupts. # L:- added the experimental PM support. # # sound/pci/Kconfig # 2004/04/23 10:07:54+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/04/23 16:07:54 # C:PCI drivers,ATIIXP driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.26->1.27 # F:pci/atiixp.c:1.6->1.7 # L:- added IXP 300 to descriptions and comments. # L:- fixed the codec probing without the proper interrupts. # L:- added the experimental PM support. # # ChangeSet # 2004/04/24 16:32:26+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # AC97 Codec Core # fixed the compilation without CONFIG_SND_DEBUG. # # sound/pci/ac97/ac97_patch.c # 2004/04/23 10:05:27+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/04/23 16:05:27 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_patch.c:1.47->1.48 # L:fixed the compilation without CONFIG_SND_DEBUG. # # ChangeSet # 2004/04/24 16:32:05+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PPC Keywest driver,PPC PMAC driver,PPC PowerMac driver # PPC Tumbler driver # fixed the oops on resume and the initialization of chip. # # sound/ppc/tumbler.c # 2004/04/23 09:18:25+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/04/23 15:18:25 # C:PPC Keywest driver,PPC PMAC driver,PPC PowerMac driver # C:PPC Tumbler driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/keywest.c:1.16->1.17 # F:ppc/pmac.h:1.13->1.14 # F:ppc/powermac.c:1.16->1.17 # F:ppc/tumbler.c:1.29->1.30 # L:fixed the oops on resume and the initialization of chip. # # sound/ppc/powermac.c # 2004/04/23 09:18:25+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/23 15:18:25 # C:PPC Keywest driver,PPC PMAC driver,PPC PowerMac driver # C:PPC Tumbler driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/keywest.c:1.16->1.17 # F:ppc/pmac.h:1.13->1.14 # F:ppc/powermac.c:1.16->1.17 # F:ppc/tumbler.c:1.29->1.30 # L:fixed the oops on resume and the initialization of chip. # # sound/ppc/pmac.h # 2004/04/23 09:18:25+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/04/23 15:18:25 # C:PPC Keywest driver,PPC PMAC driver,PPC PowerMac driver # C:PPC Tumbler driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/keywest.c:1.16->1.17 # F:ppc/pmac.h:1.13->1.14 # F:ppc/powermac.c:1.16->1.17 # F:ppc/tumbler.c:1.29->1.30 # L:fixed the oops on resume and the initialization of chip. # # sound/ppc/keywest.c # 2004/04/23 09:18:25+02:00 perex@suse.cz +12 -6 # ALSA CVS update # D:2004/04/23 15:18:25 # C:PPC Keywest driver,PPC PMAC driver,PPC PowerMac driver # C:PPC Tumbler driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/keywest.c:1.16->1.17 # F:ppc/pmac.h:1.13->1.14 # F:ppc/powermac.c:1.16->1.17 # F:ppc/tumbler.c:1.29->1.30 # L:fixed the oops on resume and the initialization of chip. # # ChangeSet # 2004/04/24 16:31:45+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # AC97 Codec Core # ac97->pci might be null # # sound/pci/ac97/ac97_patch.c # 2004/04/21 13:50:52+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/04/21 19:50:52 # C:AC97 Codec Core # A:Jaroslav Kysela <perex@suse.cz> # F:pci/ac97/ac97_patch.c:1.46->1.47 # L:ac97->pci might be null # # ChangeSet # 2004/04/24 16:31:21+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # AC97 Codec Core # patch_sigmatel_stac9758 # - initialize with default values from datasheet # - apply old initialization only for Gateway M675 notebook # # sound/pci/ac97/ac97_patch.c # 2004/04/21 13:44:13+02:00 perex@suse.cz +28 -8 # ALSA CVS update # D:2004/04/21 19:44:13 # C:AC97 Codec Core # A:Jaroslav Kysela <perex@suse.cz> # F:pci/ac97/ac97_patch.c:1.45->1.46 # L:patch_sigmatel_stac9758 # L: - initialize with default values from datasheet # L: - apply old initialization only for Gateway M675 notebook # # ChangeSet # 2004/04/24 16:31:02+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # Intel8x0 driver # From: Giridhar Pemmasani <giri@lmc.cs.sunysb.edu> # # It seems that pci config space is messed up after resume for Intel ICH4 # audio controller (on Dell Latitude D600, but I notice that others also # complain about this problem). Consequently resume from S3 causes oops with # snd_intel8x0 module. If the module is removed before suspend and loaded # afterwards, I still get oops. The following simple patch fixes the # problem. With this, I can leave alsa untouched during suspend/resume. # # sound/pci/intel8x0.c # 2004/04/21 13:18:27+02:00 perex@suse.cz +6 -0 # ALSA CVS update # D:2004/04/21 19:18:27 # C:Intel8x0 driver # A:Jaroslav Kysela <perex@suse.cz> # F:pci/intel8x0.c:1.135->1.136 # L:From: Giridhar Pemmasani <giri@lmc.cs.sunysb.edu> # L: # L:It seems that pci config space is messed up after resume for Intel ICH4 # L:audio controller (on Dell Latitude D600, but I notice that others also # L:complain about this problem). Consequently resume from S3 causes oops with # L:snd_intel8x0 module. If the module is removed before suspend and loaded # L:afterwards, I still get oops. The following simple patch fixes the # L:problem. With this, I can leave alsa untouched during suspend/resume. # # ChangeSet # 2004/04/24 16:30:42+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # Opti9xx drivers # Fixed irq&dma initialization for <93x chips # # sound/isa/opti9xx/opti92x-ad1848.c # 2004/04/19 14:16:49+02:00 perex@suse.cz +4 -0 # ALSA CVS update # D:2004/04/19 20:16:49 # C:Opti9xx drivers # A:Jaroslav Kysela <perex@suse.cz> # F:isa/opti9xx/opti92x-ad1848.c:1.43->1.44 # L:Fixed irq&dma initialization for <93x chips # # ChangeSet # 2004/04/24 16:30:24+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # AC97 Codec Core # Fixed AD18xx PCM bit handling # # sound/pci/ac97/ac97_codec.c # 2004/04/19 13:11:29+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/19 19:11:29 # C:AC97 Codec Core # A:Jaroslav Kysela <perex@suse.cz> # F:pci/ac97/ac97_codec.c:1.130->1.131 # L:Fixed AD18xx PCM bit handling # # ChangeSet # 2004/04/24 16:30:01+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation,AC97 Codec Core # added the write support to ac97#x-x+regs proc file. # # this is for debugging purpose, and enabled only when CONFIG_SND_DEBUG is set. # it allows the user to modify AC97 register bits without compiling the sources. # # sound/pci/ac97/ac97_proc.c # 2004/04/16 13:29:12+02:00 perex@suse.cz +22 -0 # ALSA CVS update # D:2004/04/16 19:29:12 # C:Documentation,AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/Procfile.txt:1.1->1.2 # F:pci/ac97/ac97_proc.c:1.6->1.7 # L:added the write support to ac97#x-x+regs proc file. # L: # L:this is for debugging purpose, and enabled only when CONFIG_SND_DEBUG is set. # L:it allows the user to modify AC97 register bits without compiling the sources. # # Documentation/sound/alsa/Procfile.txt # 2004/04/16 13:29:12+02:00 perex@suse.cz +6 -0 # ALSA CVS update # D:2004/04/16 19:29:12 # C:Documentation,AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/Procfile.txt:1.1->1.2 # F:pci/ac97/ac97_proc.c:1.6->1.7 # L:added the write support to ac97#x-x+regs proc file. # L: # L:this is for debugging purpose, and enabled only when CONFIG_SND_DEBUG is set. # L:it allows the user to modify AC97 register bits without compiling the sources. # # ChangeSet # 2004/04/24 16:29:42+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # AC97 Codec Core # added the mic/center sharing switch of cm9739 codec again. # # sound/pci/ac97/ac97_patch.c # 2004/04/16 13:25:15+02:00 perex@suse.cz +32 -3 # ALSA CVS update # D:2004/04/16 19:25:15 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_patch.c:1.44->1.45 # L:added the mic/center sharing switch of cm9739 codec again. # # ChangeSet # 2004/04/24 16:29:18+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Control Midlevel # - fixed the compilation without CONFIG_PM. # - fixed the return value of POWER ioctl. # # sound/core/control.c # 2004/04/16 10:50:24+02:00 perex@suse.cz +3 -1 # ALSA CVS update # D:2004/04/16 16:50:24 # C:Control Midlevel # A:Takashi Iwai <tiwai@suse.de> # F:core/control.c:1.42->1.43 # L:- fixed the compilation without CONFIG_PM. # L:- fixed the return value of POWER ioctl. # # ChangeSet # 2004/04/24 16:29:00+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # AC97 Codec Core # - fixed the center/mic share switch on ALC65x. # - created AC97_SINGLE_VALUME() macro. # # sound/pci/ac97/ac97_patch.c # 2004/04/16 10:01:08+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/04/16 16:01:06 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_codec.c:1.129->1.130 # F:pci/ac97/ac97_local.h:1.4->1.5 # F:pci/ac97/ac97_patch.c:1.43->1.44 # L:- fixed the center/mic share switch on ALC65x. # L:- created AC97_SINGLE_VALUME() macro. # # sound/pci/ac97/ac97_local.h # 2004/04/16 10:01:08+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/04/16 16:01:06 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_codec.c:1.129->1.130 # F:pci/ac97/ac97_local.h:1.4->1.5 # F:pci/ac97/ac97_patch.c:1.43->1.44 # L:- fixed the center/mic share switch on ALC65x. # L:- created AC97_SINGLE_VALUME() macro. # # sound/pci/ac97/ac97_codec.c # 2004/04/16 10:01:06+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/16 16:01:06 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_codec.c:1.129->1.130 # F:pci/ac97/ac97_local.h:1.4->1.5 # F:pci/ac97/ac97_patch.c:1.43->1.44 # L:- fixed the center/mic share switch on ALC65x. # L:- created AC97_SINGLE_VALUME() macro. # # ChangeSet # 2004/04/24 16:28:38+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ATIIXP driver # - added the PCI id entry for SB300. # - added the missing terminator to the PCI id list. # # sound/pci/atiixp.c # 2004/04/16 09:48:14+02:00 perex@suse.cz +3 -1 # ALSA CVS update # D:2004/04/16 15:48:14 # C:ATIIXP driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/atiixp.c:1.5->1.6 # L:- added the PCI id entry for SB300. # L:- added the missing terminator to the PCI id list. # # ChangeSet # 2004/04/24 16:28:19+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PPC PMAC driver # fixed the missing function declarations. # # sound/ppc/pmac.c # 2004/04/16 09:20:18+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/04/16 15:20:18 # C:PPC PMAC driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/pmac.c:1.28->1.29 # L:fixed the missing function declarations. # # ChangeSet # 2004/04/24 16:27:55+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # ICE1712 driver # <Dirk.Kalis@t-online.de> # added a control for default rate in the ice1712 driver # # sound/pci/ice1712/ice1712.c # 2004/04/16 08:08:35+02:00 perex@suse.cz +71 -0 # ALSA CVS update # D:2004/04/16 14:08:35 # C:ICE1712 driver # A:Jaroslav Kysela <perex@suse.cz> # F:pci/ice1712/ice1712.c:1.50->1.51 # L:<Dirk.Kalis@t-online.de> # L:added a control for default rate in the ice1712 driver # # ChangeSet # 2004/04/24 16:27:36+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PPC PMAC driver # another fix for the new suspend/resume. # # sound/ppc/pmac.c # 2004/04/16 04:25:56+02:00 perex@suse.cz +4 -10 # ALSA CVS update # D:2004/04/16 10:25:56 # C:PPC PMAC driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/pmac.c:1.27->1.28 # L:another fix for the new suspend/resume. # # ChangeSet # 2004/04/24 16:27:15+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Memalloc module # removed the obsolete hack for dev_alloc_coherent() with dev = 0. # # sound/core/memalloc.c # 2004/04/16 04:06:57+02:00 perex@suse.cz +0 -25 # ALSA CVS update # D:2004/04/16 10:06:57 # C:Memalloc module # A:Takashi Iwai <tiwai@suse.de> # F:core/memalloc.c:1.30->1.31 # L:removed the obsolete hack for dev_alloc_coherent() with dev = 0. # # ChangeSet # 2004/04/24 16:26:49+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PPC PMAC driver # fixed the suspend/resume with the new ALSA common callbacks. # # sound/ppc/pmac.h # 2004/04/15 11:23:18+02:00 perex@suse.cz +0 -1 # ALSA CVS update # D:2004/04/15 17:23:18 # C:PPC PMAC driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/pmac.c:1.26->1.27 # F:ppc/pmac.h:1.12->1.13 # L:fixed the suspend/resume with the new ALSA common callbacks. # # sound/ppc/pmac.c # 2004/04/15 11:23:18+02:00 perex@suse.cz +9 -36 # ALSA CVS update # D:2004/04/15 17:23:18 # C:PPC PMAC driver # A:Takashi Iwai <tiwai@suse.de> # F:ppc/pmac.c:1.26->1.27 # F:ppc/pmac.h:1.12->1.13 # L:fixed the suspend/resume with the new ALSA common callbacks. # # ChangeSet # 2004/04/24 15:59:07+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PCM Midlevel # fixed the deadlock of power_lock in suspend (by Terry Loftin) # # sound/core/pcm_native.c # 2004/04/15 04:16:13+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/15 10:16:13 # C:PCM Midlevel # A:Takashi Iwai <tiwai@suse.de> # F:core/pcm_native.c:1.87->1.88 # L:fixed the deadlock of power_lock in suspend (by Terry Loftin) # # ChangeSet # 2004/04/24 15:58:48+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # - call snd_ac97_suspend() in the suspend callback. # - suspend/resume secondary codecs, too. # # sound/pci/ymfpci/ymfpci_main.c # 2004/04/14 12:27:06+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/04/14 18:27:04 # C:CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # C:CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/cs4281.c:1.53->1.54 # F:pci/es1968.c:1.64->1.65 # F:pci/maestro3.c:1.51->1.52 # F:pci/ali5451/ali5451.c:1.47->1.48 # F:pci/cs46xx/cs46xx_lib.c:1.72->1.73 # F:pci/nm256/nm256.c:1.36->1.37 # F:pci/trident/trident_main.c:1.56->1.57 # F:pci/ymfpci/ymfpci_main.c:1.50->1.51 # L:- call snd_ac97_suspend() in the suspend callback. # L:- suspend/resume secondary codecs, too. # # sound/pci/trident/trident_main.c # 2004/04/14 12:27:05+02:00 perex@suse.cz +7 -0 # ALSA CVS update # D:2004/04/14 18:27:04 # C:CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # C:CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/cs4281.c:1.53->1.54 # F:pci/es1968.c:1.64->1.65 # F:pci/maestro3.c:1.51->1.52 # F:pci/ali5451/ali5451.c:1.47->1.48 # F:pci/cs46xx/cs46xx_lib.c:1.72->1.73 # F:pci/nm256/nm256.c:1.36->1.37 # F:pci/trident/trident_main.c:1.56->1.57 # F:pci/ymfpci/ymfpci_main.c:1.50->1.51 # L:- call snd_ac97_suspend() in the suspend callback. # L:- suspend/resume secondary codecs, too. # # sound/pci/nm256/nm256.c # 2004/04/14 12:27:05+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/04/14 18:27:04 # C:CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # C:CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/cs4281.c:1.53->1.54 # F:pci/es1968.c:1.64->1.65 # F:pci/maestro3.c:1.51->1.52 # F:pci/ali5451/ali5451.c:1.47->1.48 # F:pci/cs46xx/cs46xx_lib.c:1.72->1.73 # F:pci/nm256/nm256.c:1.36->1.37 # F:pci/trident/trident_main.c:1.56->1.57 # F:pci/ymfpci/ymfpci_main.c:1.50->1.51 # L:- call snd_ac97_suspend() in the suspend callback. # L:- suspend/resume secondary codecs, too. # # sound/pci/maestro3.c # 2004/04/14 12:27:04+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/04/14 18:27:04 # C:CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # C:CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/cs4281.c:1.53->1.54 # F:pci/es1968.c:1.64->1.65 # F:pci/maestro3.c:1.51->1.52 # F:pci/ali5451/ali5451.c:1.47->1.48 # F:pci/cs46xx/cs46xx_lib.c:1.72->1.73 # F:pci/nm256/nm256.c:1.36->1.37 # F:pci/trident/trident_main.c:1.56->1.57 # F:pci/ymfpci/ymfpci_main.c:1.50->1.51 # L:- call snd_ac97_suspend() in the suspend callback. # L:- suspend/resume secondary codecs, too. # # sound/pci/es1968.c # 2004/04/14 12:27:04+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/04/14 18:27:04 # C:CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # C:CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/cs4281.c:1.53->1.54 # F:pci/es1968.c:1.64->1.65 # F:pci/maestro3.c:1.51->1.52 # F:pci/ali5451/ali5451.c:1.47->1.48 # F:pci/cs46xx/cs46xx_lib.c:1.72->1.73 # F:pci/nm256/nm256.c:1.36->1.37 # F:pci/trident/trident_main.c:1.56->1.57 # F:pci/ymfpci/ymfpci_main.c:1.50->1.51 # L:- call snd_ac97_suspend() in the suspend callback. # L:- suspend/resume secondary codecs, too. # # sound/pci/cs46xx/cs46xx_lib.c # 2004/04/14 12:27:05+02:00 perex@suse.cz +7 -0 # ALSA CVS update # D:2004/04/14 18:27:04 # C:CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # C:CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/cs4281.c:1.53->1.54 # F:pci/es1968.c:1.64->1.65 # F:pci/maestro3.c:1.51->1.52 # F:pci/ali5451/ali5451.c:1.47->1.48 # F:pci/cs46xx/cs46xx_lib.c:1.72->1.73 # F:pci/nm256/nm256.c:1.36->1.37 # F:pci/trident/trident_main.c:1.56->1.57 # F:pci/ymfpci/ymfpci_main.c:1.50->1.51 # L:- call snd_ac97_suspend() in the suspend callback. # L:- suspend/resume secondary codecs, too. # # sound/pci/cs4281.c # 2004/04/14 12:27:04+02:00 perex@suse.cz +5 -0 # ALSA CVS update # D:2004/04/14 18:27:04 # C:CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # C:CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/cs4281.c:1.53->1.54 # F:pci/es1968.c:1.64->1.65 # F:pci/maestro3.c:1.51->1.52 # F:pci/ali5451/ali5451.c:1.47->1.48 # F:pci/cs46xx/cs46xx_lib.c:1.72->1.73 # F:pci/nm256/nm256.c:1.36->1.37 # F:pci/trident/trident_main.c:1.56->1.57 # F:pci/ymfpci/ymfpci_main.c:1.50->1.51 # L:- call snd_ac97_suspend() in the suspend callback. # L:- suspend/resume secondary codecs, too. # # sound/pci/ali5451/ali5451.c # 2004/04/14 12:27:05+02:00 perex@suse.cz +6 -2 # ALSA CVS update # D:2004/04/14 18:27:04 # C:CS4281 driver,ES1968 driver,Maestro3 driver,ALI5451 driver # C:CS46xx driver,NM256 driver,Trident driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/cs4281.c:1.53->1.54 # F:pci/es1968.c:1.64->1.65 # F:pci/maestro3.c:1.51->1.52 # F:pci/ali5451/ali5451.c:1.47->1.48 # F:pci/cs46xx/cs46xx_lib.c:1.72->1.73 # F:pci/nm256/nm256.c:1.36->1.37 # F:pci/trident/trident_main.c:1.56->1.57 # F:pci/ymfpci/ymfpci_main.c:1.50->1.51 # L:- call snd_ac97_suspend() in the suspend callback. # L:- suspend/resume secondary codecs, too. # # ChangeSet # 2004/04/24 15:58:26+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # AC97 Codec Core # - export snd_ac97_suspend(). # - mute MASTER and HEADPHONE volumes in suspend to avoid possible clicks. # # sound/pci/ac97/ac97_codec.c # 2004/04/14 12:25:51+02:00 perex@suse.cz +9 -0 # ALSA CVS update # D:2004/04/14 18:25:51 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_codec.c:1.128->1.129 # L:- export snd_ac97_suspend(). # L:- mute MASTER and HEADPHONE volumes in suspend to avoid possible clicks. # # ChangeSet # 2004/04/24 15:58:04+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Intel8x0 driver,Intel8x0-modem driver # - probe only audio (intel8x0) or modem (intel8x0m) codecs. # - call snd_ac97_suspend() in the suspend callback. # # sound/pci/intel8x0m.c # 2004/04/14 12:24:32+02:00 perex@suse.cz +3 -0 # ALSA CVS update # D:2004/04/14 18:24:32 # C:Intel8x0 driver,Intel8x0-modem driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/intel8x0.c:1.134->1.135 # F:pci/intel8x0m.c:1.4->1.5 # L:- probe only audio (intel8x0) or modem (intel8x0m) codecs. # L:- call snd_ac97_suspend() in the suspend callback. # # sound/pci/intel8x0.c # 2004/04/14 12:24:32+02:00 perex@suse.cz +6 -1 # ALSA CVS update # D:2004/04/14 18:24:32 # C:Intel8x0 driver,Intel8x0-modem driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/intel8x0.c:1.134->1.135 # F:pci/intel8x0m.c:1.4->1.5 # L:- probe only audio (intel8x0) or modem (intel8x0m) codecs. # L:- call snd_ac97_suspend() in the suspend callback. # # ChangeSet # 2004/04/24 15:57:44+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # USB generic driver # Edirol UA-700 advanced modes support # # sound/usb/usbquirks.h # 2004/04/14 12:11:22+02:00 perex@suse.cz +24 -6 # ALSA CVS update # D:2004/04/14 18:11:20 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbaudio.c:1.98->1.99 # F:usb/usbaudio.h:1.30->1.31 # F:usb/usbquirks.h:1.30->1.31 # L:Edirol UA-700 advanced modes support # # sound/usb/usbaudio.h # 2004/04/14 12:11:21+02:00 perex@suse.cz +3 -0 # ALSA CVS update # D:2004/04/14 18:11:20 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbaudio.c:1.98->1.99 # F:usb/usbaudio.h:1.30->1.31 # F:usb/usbquirks.h:1.30->1.31 # L:Edirol UA-700 advanced modes support # # sound/usb/usbaudio.c # 2004/04/14 12:11:20+02:00 perex@suse.cz +79 -0 # ALSA CVS update # D:2004/04/14 18:11:20 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbaudio.c:1.98->1.99 # F:usb/usbaudio.h:1.30->1.31 # F:usb/usbquirks.h:1.30->1.31 # L:Edirol UA-700 advanced modes support # # ChangeSet # 2004/04/24 15:57:23+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Memalloc module # fixed the allocation of coherent DMA pages under 32bit mask. # # sound/core/memalloc.c # 2004/04/14 04:44:16+02:00 perex@suse.cz +9 -2 # ALSA CVS update # D:2004/04/14 10:44:16 # C:Memalloc module # A:Takashi Iwai <tiwai@suse.de> # F:core/memalloc.c:1.29->1.30 # L:fixed the allocation of coherent DMA pages under 32bit mask. # # ChangeSet # 2004/04/24 15:57:05+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Intel8x0 driver # fixed MX440 workaround in suspend/resume. # # sound/pci/intel8x0.c # 2004/04/13 11:22:54+02:00 perex@suse.cz +17 -0 # ALSA CVS update # D:2004/04/13 17:22:54 # C:Intel8x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/intel8x0.c:1.133->1.134 # L:fixed MX440 workaround in suspend/resume. # # ChangeSet # 2004/04/24 15:56:47+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ICE1712 driver # added Event Electronics EZ8 support by Doug McLain <nostar@comcast.net> # # sound/pci/ice1712/ice1712.h # 2004/04/13 10:39:21+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/04/13 16:39:21 # C:ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/ice1712/hoontech.c:1.3->1.4 # F:pci/ice1712/ice1712.c:1.49->1.50 # F:pci/ice1712/ice1712.h:1.18->1.19 # L:added Event Electronics EZ8 support by Doug McLain <nostar@comcast.net> # # sound/pci/ice1712/ice1712.c # 2004/04/13 10:39:21+02:00 perex@suse.cz +11 -2 # ALSA CVS update # D:2004/04/13 16:39:21 # C:ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/ice1712/hoontech.c:1.3->1.4 # F:pci/ice1712/ice1712.c:1.49->1.50 # F:pci/ice1712/ice1712.h:1.18->1.19 # L:added Event Electronics EZ8 support by Doug McLain <nostar@comcast.net> # # sound/pci/ice1712/hoontech.c # 2004/04/13 10:39:21+02:00 perex@suse.cz +14 -0 # ALSA CVS update # D:2004/04/13 16:39:21 # C:ICE1712 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/ice1712/hoontech.c:1.3->1.4 # F:pci/ice1712/ice1712.c:1.49->1.50 # F:pci/ice1712/ice1712.h:1.18->1.19 # L:added Event Electronics EZ8 support by Doug McLain <nostar@comcast.net> # # ChangeSet # 2004/04/24 15:56:24+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # PCI drivers,au88x0 driver # bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au88x0_synth.c # 2004/04/13 10:26:28+02:00 perex@suse.cz +13 -11 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au88x0_pcm.c # 2004/04/13 10:26:28+02:00 perex@suse.cz +9 -14 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au88x0_game.c # 2004/04/13 10:26:28+02:00 perex@suse.cz +7 -5 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au88x0_eq.c # 2004/04/13 10:26:28+02:00 perex@suse.cz +3 -1 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au88x0_core.c # 2004/04/13 10:26:28+02:00 perex@suse.cz +27 -34 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au88x0_a3d.c # 2004/04/13 10:26:28+02:00 perex@suse.cz +6 -0 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au88x0.h # 2004/04/13 10:26:27+02:00 perex@suse.cz +9 -7 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au88x0.c # 2004/04/13 10:26:27+02:00 perex@suse.cz +54 -44 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au8830.h # 2004/04/13 10:26:27+02:00 perex@suse.cz +4 -4 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au8820.h # 2004/04/13 10:26:27+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/au88x0/au8810.h # 2004/04/13 10:26:27+02:00 perex@suse.cz +62 -44 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # sound/pci/Kconfig # 2004/04/13 10:26:27+02:00 perex@suse.cz +8 -0 # ALSA CVS update # D:2004/04/13 16:26:27 # C:PCI drivers,au88x0 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/Kconfig:1.25->1.26 # F:pci/au88x0/au8810.h:1.2->1.3 # F:pci/au88x0/au8820.h:1.2->1.3 # F:pci/au88x0/au8830.h:1.2->1.3 # F:pci/au88x0/au88x0.c:1.8->1.9 # F:pci/au88x0/au88x0.h:1.3->1.4 # F:pci/au88x0/au88x0_a3d.c:1.2->1.3 # F:pci/au88x0/au88x0_core.c:1.3->1.4 # F:pci/au88x0/au88x0_eq.c:1.1->1.2 # F:pci/au88x0/au88x0_game.c:1.2->1.3 # F:pci/au88x0/au88x0_pcm.c:1.2->1.3 # F:pci/au88x0/au88x0_synth.c:1.1->1.2 # L:bugfixes and VIA/AMD chipset automatic workaround by Manuel Jander <manuel.jander@mat.utfsm.cl> # # ChangeSet # 2004/04/24 15:50:42+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # Trident driver,Digigram VX222 driver,YMFPCI driver # - removed superfluous warning messages after pci_module_init(). # (2.6 kernel doesn't return the error anyway...) # - store card pointer in pci_drvdata instead of chip pointer. # this would make easier to add PM support. # # sound/pci/ymfpci/ymfpci.c # 2004/04/13 09:59:17+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/vx222/vx222.c # 2004/04/13 09:59:17+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/via82xx.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/trident/trident.c # 2004/04/13 09:59:17+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/sonicvibes.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/rme9652/rme9652.c # 2004/04/13 09:59:17+02:00 perex@suse.cz +1 -8 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/rme9652/hdsp.c # 2004/04/13 09:59:02+02:00 perex@suse.cz +1 -8 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/rme96.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/rme32.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/nm256/nm256.c # 2004/04/13 09:59:02+02:00 perex@suse.cz +1 -8 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/mixart/mixart.c # 2004/04/13 09:59:02+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/maestro3.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/korg1212/korg1212.c # 2004/04/13 09:59:02+02:00 perex@suse.cz +3 -12 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/intel8x0m.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -10 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/intel8x0.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +2 -5 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/ice1712/ice1724.c # 2004/04/13 09:59:01+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/ice1712/ice1712.c # 2004/04/13 09:59:01+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/fm801.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/es1968.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -12 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/es1938.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/ens1370.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/emu10k1/emu10k1.c # 2004/04/13 09:59:01+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/cs46xx/cs46xx.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/cs4281.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/cmipci.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/bt87x.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +3 -14 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/azt3328.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +8 -20 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/au88x0/au88x0.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +4 -21 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/atiixp.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -10 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/als4000.c # 2004/04/13 09:58:59+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # sound/pci/ali5451/ali5451.c # 2004/04/13 09:59:00+02:00 perex@suse.cz +1 -9 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl # 2004/04/13 09:58:59+02:00 perex@suse.cz +2 -20 # ALSA CVS update # D:2004/04/13 15:58:59 # C:Documentation,ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver # C:CMIPCI driver,CS4281 driver,ENS1370/1+ driver,ES1938 driver # C:ES1968 driver,FM801 driver,Intel8x0 driver,Intel8x0-modem driver # C:Maestro3 driver,RME32 driver,RME96 driver,SonicVibes driver # C:VIA82xx driver,ALI5451 driver,au88x0 driver,CS46xx driver # C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver # C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver # C:Trident driver,Digigram VX222 driver,YMFPCI driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.26->1.27 # F:pci/als4000.c:1.32->1.33 # F:pci/atiixp.c:1.4->1.5 # F:pci/azt3328.c:1.12->1.13 # F:pci/bt87x.c:1.4->1.5 # F:pci/cmipci.c:1.62->1.63 # F:pci/cs4281.c:1.52->1.53 # F:pci/ens1370.c:1.59->1.60 # F:pci/es1938.c:1.34->1.35 # F:pci/es1968.c:1.63->1.64 # F:pci/fm801.c:1.44->1.45 # F:pci/intel8x0.c:1.132->1.133 # F:pci/intel8x0m.c:1.3->1.4 # F:pci/maestro3.c:1.50->1.51 # F:pci/rme32.c:1.32->1.33 # F:pci/rme96.c:1.34->1.35 # F:pci/sonicvibes.c:1.34->1.35 # F:pci/via82xx.c:1.95->1.96 # F:pci/ali5451/ali5451.c:1.46->1.47 # F:pci/au88x0/au88x0.c:1.7->1.8 # F:pci/cs46xx/cs46xx.c:1.26->1.27 # F:pci/emu10k1/emu10k1.c:1.23->1.24 # F:pci/ice1712/ice1712.c:1.48->1.49 # F:pci/ice1712/ice1724.c:1.28->1.29 # F:pci/korg1212/korg1212.c:1.37->1.38 # F:pci/mixart/mixart.c:1.7->1.8 # F:pci/nm256/nm256.c:1.35->1.36 # F:pci/rme9652/hdsp.c:1.55->1.56 # F:pci/rme9652/rme9652.c:1.43->1.44 # F:pci/trident/trident.c:1.23->1.24 # F:pci/vx222/vx222.c:1.4->1.5 # F:pci/ymfpci/ymfpci.c:1.35->1.36 # L:- removed superfluous warning messages after pci_module_init(). # L: (2.6 kernel doesn't return the error anyway...) # L:- store card pointer in pci_drvdata instead of chip pointer. # L: this would make easier to add PM support. # # ChangeSet # 2004/04/24 15:50:18+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # USB generic driver # use wrapper function for usb_control_msg() # to prevent DMA'ing from/to the stack # # sound/usb/usbmixer.c # 2004/04/13 02:56:34+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/04/13 08:56:23 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbaudio.c:1.97->1.98 # F:usb/usbaudio.h:1.29->1.30 # F:usb/usbmixer.c:1.26->1.27 # L:use wrapper function for usb_control_msg() # L:to prevent DMA'ing from/to the stack # # sound/usb/usbaudio.h # 2004/04/13 02:56:24+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/04/13 08:56:23 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbaudio.c:1.97->1.98 # F:usb/usbaudio.h:1.29->1.30 # F:usb/usbmixer.c:1.26->1.27 # L:use wrapper function for usb_control_msg() # L:to prevent DMA'ing from/to the stack # # sound/usb/usbaudio.c # 2004/04/13 02:56:23+02:00 perex@suse.cz +30 -4 # ALSA CVS update # D:2004/04/13 08:56:23 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbaudio.c:1.97->1.98 # F:usb/usbaudio.h:1.29->1.30 # F:usb/usbmixer.c:1.26->1.27 # L:use wrapper function for usb_control_msg() # L:to prevent DMA'ing from/to the stack # # ChangeSet # 2004/04/24 15:49:59+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # ALSA sequencer # load snd-seq-dummy automatically, as documented in seq_dummy.c # # sound/core/seq/seq.c # 2004/04/13 02:40:44+02:00 perex@suse.cz +4 -0 # ALSA CVS update # D:2004/04/13 08:40:44 # C:ALSA sequencer # A:Clemens Ladisch <clemens@ladisch.de> # F:core/seq/seq.c:1.10->1.11 # L:load snd-seq-dummy automatically, as documented in seq_dummy.c # # ChangeSet # 2004/04/24 15:49:37+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # Trident driver,CS4231 driver,PARISC Harmony driver # Remove all old SNDRV_DMA_TYPE_PCI references # # sound/parisc/harmony.c # 2004/04/08 12:10:08+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/08 18:10:08 # C:Trident driver,CS4231 driver,PARISC Harmony driver # A:Jaroslav Kysela <perex@suse.cz> # F:include/trident.h:1.17->1.18 # F:isa/cs423x/cs4231_lib.c:1.38->1.39 # F:parisc/harmony.c:1.6->1.7 # L:Remove all old SNDRV_DMA_TYPE_PCI references # # sound/isa/cs423x/cs4231_lib.c # 2004/04/08 12:10:08+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/08 18:10:08 # C:Trident driver,CS4231 driver,PARISC Harmony driver # A:Jaroslav Kysela <perex@suse.cz> # F:include/trident.h:1.17->1.18 # F:isa/cs423x/cs4231_lib.c:1.38->1.39 # F:parisc/harmony.c:1.6->1.7 # L:Remove all old SNDRV_DMA_TYPE_PCI references # # include/sound/trident.h # 2004/04/08 12:10:08+02:00 perex@suse.cz +0 -7 # ALSA CVS update # D:2004/04/08 18:10:08 # C:Trident driver,CS4231 driver,PARISC Harmony driver # A:Jaroslav Kysela <perex@suse.cz> # F:include/trident.h:1.17->1.18 # F:isa/cs423x/cs4231_lib.c:1.38->1.39 # F:parisc/harmony.c:1.6->1.7 # L:Remove all old SNDRV_DMA_TYPE_PCI references # # ChangeSet # 2004/04/24 15:49:19+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ALI5451 driver # Clean up of power-management codes. # # - moved commonly used codes to the core layer. # - using the unified suspend/resume callbacks for PCI and ISA # - added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # as the registration functions. # # sound/pci/ali5451/ali5451.c # 2004/04/08 12:04:21+02:00 perex@suse.cz +11 -22 # ALSA CVS update # D:2004/04/08 18:04:21 # C:ALI5451 driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/ali5451/ali5451.c:1.45->1.46 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # ChangeSet # 2004/04/24 15:48:59+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # Sound Core PDAudioCF driver # Clean up of power-management codes. # # - moved commonly used codes to the core layer. # - using the unified suspend/resume callbacks for PCI and ISA # - added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # as the registration functions. # # sound/pcmcia/pdaudiocf/pdaudiocf_core.c # 2004/04/08 11:35:01+02:00 perex@suse.cz +5 -28 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pcmcia/pdaudiocf/pdaudiocf.h # 2004/04/08 11:35:01+02:00 perex@suse.cz +2 -3 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pcmcia/pdaudiocf/pdaudiocf.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +3 -6 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/ymfpci/ymfpci_main.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +6 -30 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/ymfpci/ymfpci.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +3 -23 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/trident/trident_main.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +10 -36 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/trident/trident.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +3 -23 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/nm256/nm256.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +9 -55 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/maestro3.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +13 -57 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/intel8x0m.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +9 -64 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/intel8x0.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +9 -63 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/es1968.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +12 -59 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/cs46xx/cs46xx_lib.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +6 -33 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/cs46xx/cs46xx.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +3 -23 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/cs4281.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +11 -55 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/atiixp.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +2 -4 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/pci/ali5451/ali5451.c # 2004/04/08 11:35:00+02:00 perex@suse.cz +2 -4 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/isa/opl3sa2.c # 2004/04/08 11:34:59+02:00 perex@suse.cz +11 -66 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/isa/es18xx.c # 2004/04/08 11:34:59+02:00 perex@suse.cz +7 -58 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/isa/cs423x/cs4231_lib.c # 2004/04/08 11:34:59+02:00 perex@suse.cz +17 -21 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/isa/ad1848/ad1848_lib.c # 2004/04/08 11:34:59+02:00 perex@suse.cz +10 -55 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/core/sound.c # 2004/04/08 11:34:59+02:00 perex@suse.cz +8 -0 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/core/init.c # 2004/04/08 11:34:59+02:00 perex@suse.cz +97 -0 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # sound/core/control.c # 2004/04/08 11:34:59+02:00 perex@suse.cz +27 -2 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # include/sound/ymfpci.h # 2004/04/08 11:34:59+02:00 perex@suse.cz +0 -5 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # include/sound/trident.h # 2004/04/08 11:34:59+02:00 perex@suse.cz +0 -6 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # include/sound/cs46xx.h # 2004/04/08 11:34:59+02:00 perex@suse.cz +0 -8 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # include/sound/cs4231.h # 2004/04/08 11:34:59+02:00 perex@suse.cz +0 -1 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # include/sound/core.h # 2004/04/08 11:34:59+02:00 perex@suse.cz +21 -2 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # include/sound/ad1848.h # 2004/04/08 11:34:59+02:00 perex@suse.cz +0 -3 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl # 2004/04/08 11:34:59+02:00 perex@suse.cz +36 -114 # ALSA CVS update # D:2004/04/08 17:34:59 # C:Documentation,Control Midlevel,ALSA Core,AD1848 driver,CS4231 driver # C:CS46xx driver,Trident driver,YMFPCI driver,ES18xx driver,OPL3SA2 driver # C:ATIIXP driver,CS4281 driver,ES1968 driver,Intel8x0 driver # C:Intel8x0-modem driver,Maestro3 driver,ALI5451 driver,NM256 driver # C:Sound Core PDAudioCF driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.25->1.26 # F:core/control.c:1.41->1.42 # F:core/init.c:1.44->1.45 # F:core/sound.c:1.60->1.61 # F:include/ad1848.h:1.9->1.10 # F:include/core.h:1.49->1.50 # F:include/cs4231.h:1.7->1.8 # F:include/cs46xx.h:1.18->1.19 # F:include/trident.h:1.16->1.17 # F:include/ymfpci.h:1.14->1.15 # F:isa/es18xx.c:1.45->1.46 # F:isa/opl3sa2.c:1.33->1.34 # F:isa/ad1848/ad1848_lib.c:1.34->1.35 # F:isa/cs423x/cs4231_lib.c:1.37->1.38 # F:pci/atiixp.c:1.3->1.4 # F:pci/cs4281.c:1.51->1.52 # F:pci/es1968.c:1.62->1.63 # F:pci/intel8x0.c:1.131->1.132 # F:pci/intel8x0m.c:1.2->1.3 # F:pci/maestro3.c:1.49->1.50 # F:pci/ali5451/ali5451.c:1.44->1.45 # F:pci/cs46xx/cs46xx.c:1.25->1.26 # F:pci/cs46xx/cs46xx_lib.c:1.71->1.72 # F:pci/nm256/nm256.c:1.34->1.35 # F:pci/trident/trident.c:1.22->1.23 # F:pci/trident/trident_main.c:1.55->1.56 # F:pci/ymfpci/ymfpci.c:1.34->1.35 # F:pci/ymfpci/ymfpci_main.c:1.49->1.50 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.5->1.6 # F:pcmcia/pdaudiocf/pdaudiocf.h:1.4->1.5 # F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.2->1.3 # L:Clean up of power-management codes. # L: # L:- moved commonly used codes to the core layer. # L:- using the unified suspend/resume callbacks for PCI and ISA # L:- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks() # L: as the registration functions. # # ChangeSet # 2004/04/24 15:48:26+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # SPARC cs4231 driver,USB generic driver # use the new module_param*() functions. # # sound/usb/usbaudio.c # 2004/04/07 12:48:23+02:00 perex@suse.cz +9 -31 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/sparc/cs4231.c # 2004/04/07 12:48:22+02:00 perex@suse.cz +5 -25 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/sparc/amd7930.c # 2004/04/07 12:48:22+02:00 perex@suse.cz +5 -25 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/ppc/powermac.c # 2004/04/07 12:48:22+02:00 perex@suse.cz +5 -28 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pcmcia/vx/vxpocket.c # 2004/04/07 12:48:22+02:00 perex@suse.cz +8 -6 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pcmcia/pdaudiocf/pdaudiocf.c # 2004/04/07 12:48:22+02:00 perex@suse.cz +7 -5 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/ymfpci/ymfpci.c # 2004/04/07 12:48:21+02:00 perex@suse.cz +9 -32 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/vx222/vx222.c # 2004/04/07 12:48:21+02:00 perex@suse.cz +7 -27 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/via82xx.c # 2004/04/07 12:48:17+02:00 perex@suse.cz +10 -39 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/trident/trident.c # 2004/04/07 12:48:21+02:00 perex@suse.cz +7 -30 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/sonicvibes.c # 2004/04/07 12:48:17+02:00 perex@suse.cz +8 -32 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/rme9652/rme9652.c # 2004/04/07 12:48:21+02:00 perex@suse.cz +6 -26 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/rme9652/hdsp.c # 2004/04/07 12:48:20+02:00 perex@suse.cz +7 -27 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/rme96.c # 2004/04/07 12:48:17+02:00 perex@suse.cz +5 -25 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/rme32.c # 2004/04/07 12:48:17+02:00 perex@suse.cz +5 -23 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/nm256/nm256.c # 2004/04/07 12:48:20+02:00 perex@suse.cz +11 -38 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/mixart/mixart.c # 2004/04/07 12:48:20+02:00 perex@suse.cz +5 -25 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/maestro3.c # 2004/04/07 12:48:17+02:00 perex@suse.cz +7 -29 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/korg1212/korg1212.c # 2004/04/07 12:48:20+02:00 perex@suse.cz +5 -26 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/intel8x0m.c # 2004/04/07 12:48:17+02:00 perex@suse.cz +6 -28 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/intel8x0.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +9 -38 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/ice1712/ice1724.c # 2004/04/07 12:48:20+02:00 perex@suse.cz +5 -25 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/ice1712/ice1712.c # 2004/04/07 12:48:20+02:00 perex@suse.cz +7 -27 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/fm801.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +6 -27 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/es1968.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +14 -52 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/es1938.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +5 -25 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/ens1370.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +7 -39 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/emu10k1/emu10k1.c # 2004/04/07 12:48:19+02:00 perex@suse.cz +11 -34 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/cs46xx/cs46xx.c # 2004/04/07 12:48:19+02:00 perex@suse.cz +8 -31 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/cs4281.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +6 -26 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/cmipci.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +9 -39 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/bt87x.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +6 -26 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/azt3328.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +6 -33 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/au88x0/au88x0.c # 2004/04/07 12:48:19+02:00 perex@suse.cz +6 -23 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/atiixp.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +7 -30 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/als4000.c # 2004/04/07 12:48:16+02:00 perex@suse.cz +6 -30 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/ali5451/ali5451.c # 2004/04/07 12:48:19+02:00 perex@suse.cz +7 -30 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/pci/ac97/ac97_codec.c # 2004/04/07 12:48:18+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/parisc/harmony.c # 2004/04/07 12:48:15+02:00 perex@suse.cz +12 -1 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/wavefront/wavefront_synth.c # 2004/04/07 12:48:15+02:00 perex@suse.cz +11 -10 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/wavefront/wavefront.c # 2004/04/07 12:48:15+02:00 perex@suse.cz +16 -53 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/sscape.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +8 -34 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/sgalaxy.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +8 -34 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/sb/sb8.c # 2004/04/07 12:48:15+02:00 perex@suse.cz +8 -32 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/sb/sb16.c # 2004/04/07 12:48:15+02:00 perex@suse.cz +16 -72 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/sb/es968.c # 2004/04/07 12:48:15+02:00 perex@suse.cz +8 -32 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/sb/emu8000_patch.c # 2004/04/07 12:48:15+02:00 perex@suse.cz +3 -3 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/opti9xx/opti92x-ad1848.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +12 -56 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/opl3sa2.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +15 -53 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/gus/interwave.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +15 -60 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/gus/gusmax.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +12 -43 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/gus/gusextreme.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +16 -49 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/gus/gusclassic.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +12 -43 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/es18xx.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +12 -47 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/es1688/es1688.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +10 -38 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/dt019x.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +11 -39 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/cs423x/pc98.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +14 -44 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/cs423x/cs4236.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +15 -59 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/cs423x/cs4231.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +11 -41 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/cmi8330.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +13 -50 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/azt2320.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +13 -42 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/als100.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +12 -41 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/ad1848/ad1848.c # 2004/04/07 12:48:14+02:00 perex@suse.cz +9 -34 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/isa/ad1816a/ad1816a.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +12 -41 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/drivers/virmidi.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +6 -27 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/drivers/serial-u16550.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +13 -43 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/drivers/opl4/opl4_seq.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/drivers/opl3/opl3_seq.c # 2004/04/07 12:48:13+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/drivers/mtpav.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +6 -28 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/drivers/mpu401/mpu401.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +9 -40 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/drivers/dummy.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +8 -31 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/timer.c # 2004/04/07 12:48:11+02:00 perex@suse.cz +2 -13 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/sound.c # 2004/04/07 12:48:11+02:00 perex@suse.cz +4 -3 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/seq/seq_midi.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +3 -2 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/seq/seq_dummy.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +7 -4 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/seq/seq.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +9 -7 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/seq/oss/seq_oss_init.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +3 -2 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/seq/oss/seq_oss.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +2 -1 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/rtctimer.c # 2004/04/07 12:48:11+02:00 perex@suse.cz +2 -13 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/rawmidi.c # 2004/04/07 12:48:11+02:00 perex@suse.cz +4 -22 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/pcm_memory.c # 2004/04/07 12:48:11+02:00 perex@suse.cz +3 -2 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/oss/pcm_oss.c # 2004/04/07 12:48:12+02:00 perex@suse.cz +5 -24 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/core/memalloc.c # 2004/04/07 12:48:11+02:00 perex@suse.cz +3 -20 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # sound/arm/sa11xx-uda1341.c # 2004/04/07 12:48:10+02:00 perex@suse.cz +3 -2 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # include/sound/initval.h # 2004/04/07 12:48:13+02:00 perex@suse.cz +0 -40 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl # 2004/04/07 12:48:10+02:00 perex@suse.cz +9 -37 # ALSA CVS update # D:2004/04/07 18:48:10 # C:Documentation,SA11xx UDA1341 driver,Memalloc module,PCM Midlevel # C:RawMidi Midlevel,RTC timer driver,ALSA Core,Timer Midlevel # C:ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer,Generic drivers # C:MPU401 UART,OPL3,OPL4,ALS100 driver,AZT2320 driver,CMI8330 driver # C:DT019x driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver # C:Sound Scape driver,AD1816A driver,AD1848 driver,CS4231 driver # C:CS4236+ driver,PC98(CS423x) driver,ES1688 driver,GUS Classic driver # C:GUS Extreme driver,GUS MAX driver,AMD InterWave driver,Opti9xx drivers # C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver # C:Wavefront drivers,PARISC Harmony driver,ALS4000 driver,ATIIXP driver # C:AZT3328 driver,BT87x driver,CMIPCI driver,CS4281 driver # C:ENS1370/1+ driver,ES1938 driver,ES1968 driver,FM801 driver # C:Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver,RME32 driver # C:RME96 driver,SonicVibes driver,VIA82xx driver,AC97 Codec Core # C:ALI5451 driver,au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver # C:ICE1712 driver,ICE1724 driver,KORG1212 driver,MIXART driver # C:NM256 driver,RME HDSP driver,RME9652 driver,Trident driver # C:Digigram VX222 driver,YMFPCI driver,Sound Core PDAudioCF driver # C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver # C:SPARC cs4231 driver,USB generic driver # A:Takashi Iwai <tiwai@suse.de> # F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.24->1.25 # F:arm/sa11xx-uda1341.c:1.13->1.14 # F:core/memalloc.c:1.28->1.29 # F:core/pcm_memory.c:1.25->1.26 # F:core/rawmidi.c:1.41->1.42 # F:core/rtctimer.c:1.19->1.20 # F:core/sound.c:1.59->1.60 # F:core/timer.c:1.56->1.57 # F:core/oss/pcm_oss.c:1.66->1.67 # F:core/seq/seq.c:1.9->1.10 # F:core/seq/seq_dummy.c:1.10->1.11 # F:core/seq/seq_midi.c:1.18->1.19 # F:core/seq/oss/seq_oss.c:1.11->1.12 # F:core/seq/oss/seq_oss_init.c:1.11->1.12 # F:drivers/dummy.c:1.26->1.27 # F:drivers/mtpav.c:1.26->1.27 # F:drivers/serial-u16550.c:1.25->1.26 # F:drivers/virmidi.c:1.11->1.12 # F:drivers/mpu401/mpu401.c:1.16->1.17 # F:drivers/opl3/opl3_seq.c:1.12->1.13 # F:drivers/opl4/opl4_seq.c:1.2->1.3 # F:include/initval.h:1.19->1.20 # F:isa/als100.c:1.24->1.25 # F:isa/azt2320.c:1.24->1.25 # F:isa/cmi8330.c:1.28->1.29 # F:isa/dt019x.c:1.18->1.19 # F:isa/es18xx.c:1.44->1.45 # F:isa/opl3sa2.c:1.32->1.33 # F:isa/sgalaxy.c:1.19->1.20 # F:isa/sscape.c:1.11->1.12 # F:isa/ad1816a/ad1816a.c:1.18->1.19 # F:isa/ad1848/ad1848.c:1.10->1.11 # F:isa/cs423x/cs4231.c:1.12->1.13 # F:isa/cs423x/cs4236.c:1.41->1.42 # F:isa/cs423x/pc98.c:1.7->1.8 # F:isa/es1688/es1688.c:1.14->1.15 # F:isa/gus/gusclassic.c:1.13->1.14 # F:isa/gus/gusextreme.c:1.15->1.16 # F:isa/gus/gusmax.c:1.14->1.15 # F:isa/gus/interwave.c:1.32->1.33 # F:isa/opti9xx/opti92x-ad1848.c:1.42->1.43 # F:isa/sb/emu8000_patch.c:1.8->1.9 # F:isa/sb/es968.c:1.24->1.25 # F:isa/sb/sb16.c:1.45->1.46 # F:isa/sb/sb8.c:1.18->1.19 # F:isa/wavefront/wavefront.c:1.27->1.28 # F:isa/wavefront/wavefront_synth.c:1.14->1.15 # F:parisc/harmony.c:1.5->1.6 # F:pci/als4000.c:1.31->1.32 # F:pci/atiixp.c:1.2->1.3 # F:pci/azt3328.c:1.11->1.12 # F:pci/bt87x.c:1.3->1.4 # F:pci/cmipci.c:1.61->1.62 # F:pci/cs4281.c:1.50->1.51 # F:pci/ens1370.c:1.58->1.59 # F:pci/es1938.c:1.33->1.34 # F:pci/es1968.c:1.61->1.62 # F:pci/fm801.c:1.43->1.44 # F:pci/intel8x0.c:1.130->1.131 # F:pci/intel8x0m.c:1.1->1.2 # F:pci/maestro3.c:1.48->1.49 # F:pci/rme32.c:1.31->1.32 # F:pci/rme96.c:1.33->1.34 # F:pci/sonicvibes.c:1.33->1.34 # F:pci/via82xx.c:1.94->1.95 # F:pci/ac97/ac97_codec.c:1.127->1.128 # F:pci/ali5451/ali5451.c:1.43->1.44 # F:pci/au88x0/au88x0.c:1.6->1.7 # F:pci/cs46xx/cs46xx.c:1.24->1.25 # F:pci/emu10k1/emu10k1.c:1.22->1.23 # F:pci/ice1712/ice1712.c:1.47->1.48 # F:pci/ice1712/ice1724.c:1.27->1.28 # F:pci/korg1212/korg1212.c:1.36->1.37 # F:pci/mixart/mixart.c:1.6->1.7 # F:pci/nm256/nm256.c:1.33->1.34 # F:pci/rme9652/hdsp.c:1.54->1.55 # F:pci/rme9652/rme9652.c:1.42->1.43 # F:pci/trident/trident.c:1.21->1.22 # F:pci/vx222/vx222.c:1.3->1.4 # F:pci/ymfpci/ymfpci.c:1.33->1.34 # F:pcmcia/pdaudiocf/pdaudiocf.c:1.4->1.5 # F:pcmcia/vx/vxpocket.c:1.3->1.4 # F:ppc/powermac.c:1.15->1.16 # F:sparc/amd7930.c:1.8->1.9 # F:sparc/cs4231.c:1.12->1.13 # F:usb/usbaudio.c:1.96->1.97 # L:use the new module_param*() functions. # # ChangeSet # 2004/04/24 15:47:52+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # AC97 Codec Core # fix AC'97 revision bits on AD1985 # # sound/pci/ac97/ac97_patch.c # 2004/04/07 02:25:06+02:00 perex@suse.cz +2 -0 # ALSA CVS update # D:2004/04/07 08:25:06 # C:AC97 Codec Core # A:Clemens Ladisch <clemens@ladisch.de> # F:pci/ac97/ac97_patch.c:1.42->1.43 # L:fix AC'97 revision bits on AD1985 # # ChangeSet # 2004/04/24 15:47:33+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # AC97 Codec Core # show AC'97 2.3 information in proc file # # sound/pci/ac97/ac97_proc.c # 2004/04/07 02:21:34+02:00 perex@suse.cz +57 -0 # ALSA CVS update # D:2004/04/07 08:21:33 # C:AC97 Codec Core # A:Clemens Ladisch <clemens@ladisch.de> # F:include/ac97_codec.h:1.43->1.44 # F:pci/ac97/ac97_proc.c:1.5->1.6 # L:show AC'97 2.3 information in proc file # # include/sound/ac97_codec.h # 2004/04/07 02:21:33+02:00 perex@suse.cz +19 -1 # ALSA CVS update # D:2004/04/07 08:21:33 # C:AC97 Codec Core # A:Clemens Ladisch <clemens@ladisch.de> # F:include/ac97_codec.h:1.43->1.44 # F:pci/ac97/ac97_proc.c:1.5->1.6 # L:show AC'97 2.3 information in proc file # # ChangeSet # 2004/04/24 15:47:10+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # Timer Midlevel,ALSA Core # Added early event flag and code to the timer interface. # # sound/core/timer.c # 2004/04/06 12:23:46+02:00 perex@suse.cz +29 -14 # ALSA CVS update # D:2004/04/06 18:23:46 # C:Timer Midlevel,ALSA Core # A:Jaroslav Kysela <perex@suse.cz> # F:core/timer.c:1.55->1.56 # F:include/asound.h:1.37->1.38 # F:include/timer.h:1.16->1.17 # L:Added early event flag and code to the timer interface. # # include/sound/timer.h # 2004/04/06 12:23:47+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/04/06 18:23:46 # C:Timer Midlevel,ALSA Core # A:Jaroslav Kysela <perex@suse.cz> # F:core/timer.c:1.55->1.56 # F:include/asound.h:1.37->1.38 # F:include/timer.h:1.16->1.17 # L:Added early event flag and code to the timer interface. # # include/sound/asound.h # 2004/04/06 12:23:47+02:00 perex@suse.cz +3 -1 # ALSA CVS update # D:2004/04/06 18:23:46 # C:Timer Midlevel,ALSA Core # A:Jaroslav Kysela <perex@suse.cz> # F:core/timer.c:1.55->1.56 # F:include/asound.h:1.37->1.38 # F:include/timer.h:1.16->1.17 # L:Added early event flag and code to the timer interface. # # ChangeSet # 2004/04/24 15:46:51+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # USB generic driver # allow specification of rate_table in AUDIO_FIXED_ENDPOINT quirks # # sound/usb/usbaudio.c # 2004/04/06 09:20:21+02:00 perex@suse.cz +15 -0 # ALSA CVS update # D:2004/04/06 15:20:21 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbaudio.c:1.95->1.96 # L:allow specification of rate_table in AUDIO_FIXED_ENDPOINT quirks # # ChangeSet # 2004/04/24 15:46:27+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # USB generic driver # remove superfluous address operator from literal arrays # # sound/usb/usbquirks.h # 2004/04/06 09:19:00+02:00 perex@suse.cz +5 -5 # ALSA CVS update # D:2004/04/06 15:19:00 # C:USB generic driver # A:Clemens Ladisch <clemens@ladisch.de> # F:usb/usbquirks.h:1.29->1.30 # L:remove superfluous address operator from literal arrays # # ChangeSet # 2004/04/24 15:46:08+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # Intel8x0 driver # 20-bit sample format support # # sound/pci/intel8x0.c # 2004/04/05 05:29:05+02:00 perex@suse.cz +26 -11 # ALSA CVS update # D:2004/04/05 11:29:05 # C:Intel8x0 driver # A:Clemens Ladisch <clemens@ladisch.de> # F:pci/intel8x0.c:1.129->1.130 # L:20-bit sample format support # # ChangeSet # 2004/04/24 15:45:45+02:00 perex@suse.cz # ALSA CVS update - Clemens Ladisch <clemens@ladisch.de> # AC97 Codec Core # fix access to wrong register when clearing powerdown bits # # sound/pci/ac97/ac97_codec.c # 2004/04/05 05:23:34+02:00 perex@suse.cz +2 -2 # ALSA CVS update # D:2004/04/05 11:23:34 # C:AC97 Codec Core # A:Clemens Ladisch <clemens@ladisch.de> # F:pci/ac97/ac97_codec.c:1.126->1.127 # L:fix access to wrong register when clearing powerdown bits # # ChangeSet # 2004/04/24 15:45:26+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # AC97 Codec Core # - fixed the possibl ac97 register cache mismatch. # - added the detection of spdif sample rates. # # sound/pci/ac97/ac97_pcm.c # 2004/04/04 11:03:59+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/04 17:03:58 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_codec.c:1.125->1.126 # F:pci/ac97/ac97_pcm.c:1.12->1.13 # L:- fixed the possibl ac97 register cache mismatch. # L:- added the detection of spdif sample rates. # # sound/pci/ac97/ac97_codec.c # 2004/04/04 11:03:58+02:00 perex@suse.cz +44 -15 # ALSA CVS update # D:2004/04/04 17:03:58 # C:AC97 Codec Core # A:Takashi Iwai <tiwai@suse.de> # F:pci/ac97/ac97_codec.c:1.125->1.126 # F:pci/ac97/ac97_pcm.c:1.12->1.13 # L:- fixed the possibl ac97 register cache mismatch. # L:- added the detection of spdif sample rates. # # ChangeSet # 2004/04/24 15:45:05+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # ATIIXP driver # - fixed SPDIF support. # restricted only 48k sample rate. # - fixed the address assignment for bigendian (not existing, though) # # sound/pci/atiixp.c # 2004/04/04 11:02:43+02:00 perex@suse.cz +82 -43 # ALSA CVS update # D:2004/04/04 17:02:43 # C:ATIIXP driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/atiixp.c:1.1->1.2 # L:- fixed SPDIF support. # L: restricted only 48k sample rate. # L:- fixed the address assignment for bigendian (not existing, though) # # ChangeSet # 2004/04/24 15:44:47+02:00 perex@suse.cz # ALSA CVS update - Takashi Iwai <tiwai@suse.de> # VIA82xx driver # added dxs_support and ac97_quirk entries for Amira notebook. # # sound/pci/via82xx.c # 2004/04/04 11:01:15+02:00 perex@suse.cz +7 -0 # ALSA CVS update # D:2004/04/04 17:01:15 # C:VIA82xx driver # A:Takashi Iwai <tiwai@suse.de> # F:pci/via82xx.c:1.93->1.94 # L:added dxs_support and ac97_quirk entries for Amira notebook. # # ChangeSet # 2004/04/24 15:44:24+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # ALSA Version # release: 1.0.4 # # include/sound/version.h # 2004/04/03 03:40:57+02:00 perex@suse.cz +1 -1 # ALSA CVS update # D:2004/04/03 10:40:57 # C:ALSA Version # A:Jaroslav Kysela <perex@suse.cz> # F:include/version.h:1.40->1.41 # L:release: 1.0.4 # # ChangeSet # 2004/04/24 15:44:04+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # PCMCIA Kconfig # SND_PDAUDIOCF depends on SND_PCM # # sound/pcmcia/Kconfig # 2004/04/03 02:33:33+02:00 perex@suse.cz +1 -0 # ALSA CVS update # D:2004/04/03 09:33:33 # C:PCMCIA Kconfig # A:Jaroslav Kysela <perex@suse.cz> # F:pcmcia/Kconfig:1.6->1.7 # L:SND_PDAUDIOCF depends on SND_PCM # # ChangeSet # 2004/04/24 15:43:44+02:00 perex@suse.cz # ALSA CVS update - Jaroslav Kysela <perex@suse.cz> # CS4281 driver # Added retry_count # # sound/pci/cs4281.c # 2004/04/03 02:32:56+02:00 perex@suse.cz +4 -0 # ALSA CVS update # D:2004/04/03 09:32:56 # C:CS4281 driver # A:Jaroslav Kysela <perex@suse.cz> # F:pci/cs4281.c:1.49->1.50 # L:Added retry_count # # ChangeSet # 2004/04/24 14:33:02+02:00 perex@suse.cz # Cleanups for Aureal PCI IDs. # # include/linux/pci_ids.h # 2004/04/24 14:32:50+02:00 perex@suse.cz +2 -3 # Cleanups for Aureal PCI IDs. # # ChangeSet # 2004/04/01 11:34:39+02:00 perex@suse.cz # Fixed ALSA aureal driver compilation - wrong and missing PCI IDs # # sound/pci/au88x0/au88x0.h # 2004/04/01 11:34:27+02:00 perex@suse.cz +2 -2 # sync with pci_ids.h # # sound/pci/au88x0/au8830.c # 2004/04/01 11:34:27+02:00 perex@suse.cz +1 -1 # Sync with pci_ids.h # # sound/pci/au88x0/au8820.c # 2004/04/01 11:34:27+02:00 perex@suse.cz +1 -1 # Sync with pci_ids.h # # include/linux/pci_ids.h # 2004/04/01 11:34:26+02:00 perex@suse.cz +1 -0 # Added PCI_DEVICE_ID_AUREAL_ADVANTAGE # diff -Nru a/Documentation/BK-usage/bk-kernel-howto.txt b/Documentation/BK-usage/bk-kernel-howto.txt --- a/Documentation/BK-usage/bk-kernel-howto.txt 2004-05-26 15:01:36 -07:00 +++ b/Documentation/BK-usage/bk-kernel-howto.txt 2004-05-26 15:01:36 -07:00 @@ -279,5 +279,5 @@ for my long-lived kernel branch? A. Yes. This requires BK 3.x, though. - bk export -tpatch -r`bk repogca http://linux.bkbits.net/linux-2.5`,+ + bk export -tpatch -r`bk repogca bk://linux.bkbits.net/linux-2.5`,+ diff -Nru a/Documentation/BK-usage/gcapatch b/Documentation/BK-usage/gcapatch --- a/Documentation/BK-usage/gcapatch 2004-05-26 15:01:36 -07:00 +++ b/Documentation/BK-usage/gcapatch 2004-05-26 15:01:36 -07:00 @@ -5,4 +5,4 @@ # Usage: gcapatch > foo.patch # -bk export -tpatch -hdu -r`bk repogca http://linux.bkbits.net/linux-2.5`,+ +bk export -tpatch -hdu -r`bk repogca bk://linux.bkbits.net/linux-2.5`,+ diff -Nru a/Documentation/laptop-mode.txt b/Documentation/laptop-mode.txt --- a/Documentation/laptop-mode.txt 2004-05-26 15:01:36 -07:00 +++ b/Documentation/laptop-mode.txt 2004-05-26 15:01:36 -07:00 @@ -279,7 +279,13 @@ fi } -KLEVEL="$(uname -r | cut -c1-3)" +KLEVEL=$( + uname -r | + ( + IFS="." read a b c + echo $a.$b + ) + ) case "$KLEVEL" in "2.4"|"2.6") true @@ -496,7 +502,7 @@ case $status in "on-line") - echo "Setting HD spindown to 2 hours" + echo "Setting HD spindown for AC mode." /sbin/laptop_mode stop /sbin/hdparm -S $ACAD_HD /dev/hda > /dev/null 2>&1 /sbin/hdparm -B 255 /dev/hda > /dev/null 2>&1 @@ -504,7 +510,7 @@ exit 0 ;; "off-line") - echo "Setting HD spindown to 20 seconds" + echo "Setting HD spindown for battery mode." /sbin/laptop_mode start /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1 /sbin/hdparm -B 1 /dev/hda > /dev/null 2>&1 diff -Nru a/Documentation/networking/bridge.txt b/Documentation/networking/bridge.txt --- a/Documentation/networking/bridge.txt 2004-05-26 15:01:36 -07:00 +++ b/Documentation/networking/bridge.txt 2004-05-26 15:01:36 -07:00 @@ -1,11 +1,8 @@ -In order to use the ethernet bridging functionality you'll need the -userspace tools available at http://www.math.leidenuniv.nl/~buytenh/bridge. -The tarball available there contains extensive documentation, but if you -still have questions, don't hesitate to post to the mailing list (more info -at http://www.math.leidenuniv.nl/mailman/listinfo/bridge). You can also -mail me at buytenh@gnu.org. +In order to use the Ethernet bridging functionality, you'll need the +userspace tools. These programs and documentation are available +at http://bridge.sourceforge.net. The download page is +http://prdownloads.sourceforge.net/bridge. +If you still have questions, don't hesitate to post to the mailing list +(more info http://lists.osdl.org/mailman/listinfo/bridge). - -Lennert Buytenhek -<buytenh@gnu.org> diff -Nru a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt --- a/Documentation/sound/alsa/ALSA-Configuration.txt 2004-05-26 15:01:35 -07:00 +++ b/Documentation/sound/alsa/ALSA-Configuration.txt 2004-05-26 15:01:35 -07:00 @@ -416,7 +416,8 @@ * Creative Card w/Digital out + Digital I/O 2 [0x0fc3/0x1f0f] * Creative Card w/Digital CD in + Digital I/O 2 [0x0fcf/0x1f0f] * Creative Card 5.1/w Digital out + LiveDrive [0x3fc3/0x1fff] - * Creative Card all ins and outs [0x3fff/0x1fff] + * Creative Card 5.1 (c) 2003 [0x3fc3/0x7cff] + * Creative Card all ins and outs [0x3fff/0x7fff] Module snd-ens1370 ------------------ @@ -609,6 +610,10 @@ * Hoontech SoundTrack DSP 24 Media 7.1 * Digigram VX442 + model - Use the given board model, one of the following: + delta1010, dio2496, delta66, delta44, audiophile, delta410, + delta1010lt, vx442, ewx2496, ews88mt, ews88mt_new, ews88d, + dmx6fire, dsp24, dsp24_71, ez8 omni - Omni I/O support for MidiMan M-Audio Delta44/66 cs8427_timeout - reset timeout for the CS8427 chip (S/PDIF transciever) in msec resolution, default value is 500 (0.5 sec) @@ -625,6 +630,9 @@ * AMP Ltd AUDIO2000 * TerraTec Aureon Sky-5.1, Space-7.1 + model - Use the given board model, one of the following: + revo71, amp2000, prodigy71, aureon51, aureon71 + Module supports up to 8 cards and autoprobe. Module snd-intel8x0 @@ -787,6 +795,8 @@ Module supports autoprobe and multiple chips (max 8). + The power-management is supported. + Note: on some notebooks the buffer address cannot be detected automatically, or causes hang-up during initialization. In such a case, specify the buffer top address explicity via @@ -796,9 +806,24 @@ Sony F270: buffer_top=0x272800 The driver supports only ac97 codec. It's possible to force to initialize/use ac97 although it's not detected. In such a - case, use force_ac97=1 option. + case, use force_ac97=1 option - but *NO* guarantee whether it + works! - The power-management is supported. + Note: The NM256 chip can be linked internally with non-AC97 + codecs. This driver supports only the AC97 codec, and won't work + with machines with other (most likely CS423x or OPL3SAx) chips, + even though the device is detected in lspci. In such a case, try + other drivers, e.g. snd-cs4232 or snd-opl3sa2. Some has ISA-PnP + but some doesn't have ISA PnP. You'll need to speicfy isapnp=0 + and proper hardware parameters in the case without ISA PnP. + + Note: This driver is really crappy. It's a porting from the + OSS driver, which is a result of black-magic reverse engineering. + The detection of codec will fail if the driver is loaded *after* + X-server as described above. You might be able to force to load + the module, but it may result in hang-up. Hence, make sure that + you load this module *before* X if you encounter this kind of + problem. Module snd-opl3sa2 ------------------ diff -Nru a/Documentation/sound/alsa/Audigy-mixer.txt b/Documentation/sound/alsa/Audigy-mixer.txt --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/Documentation/sound/alsa/Audigy-mixer.txt 2004-05-26 15:01:36 -07:00 @@ -0,0 +1,345 @@ + + Sound Blaster Audigy mixer / default DSP code + =========================================== + +This is based on SB-Live-mixer.txt. + +The EMU10K2 chips have a DSP part which can be programmed to support +various ways of sample processing, which is described here. +(This acticle does not deal with the overall functionality of the +EMU10K2 chips. See the manuals section for further details.) + +The ALSA driver programs this portion of chip by default code +(can be altered later) which offers the following functionality: + + +1) Digital mixer controls +------------------------- + +These controls are built using the DSP instructions. They offer extended +functionality. Only the default build-in code in the ALSA driver is described +here. Note that the controls work as attenuators: the maximum value is the +neutral position leaving the signal unchanged. Note that if the same destination +is mentioned in multiple controls, the signal is accumulated and can be wrapped +(set to maximal or minimal value without checking of overflow). + + +Explanation of used abbreviations: + +DAC - digital to analog converter +ADC - analog to digital converter +I2S - one-way three wire serial bus for digital sound by Philips Semiconductors + (this standard is used for connecting standalone DAC and ADC converters) +LFE - low frequency effects (subwoofer signal) +AC97 - a chip containing an analog mixer, DAC and ADC converters +IEC958 - S/PDIF +FX-bus - the EMU10K2 chip has an effect bus containing 64 accumulators. + Each of the synthesizer voices can feed its output to these accumulators + and the DSP microcontroller can operate with the resulting sum. + +name='PCM Front Playback Volume',index=0 + +This control is used to attenuate samples for left and right front PCM FX-bus +accumulators. ALSA uses accumulators 8 and 9 for left and right front PCM +samples for 5.1 playback. The result samples are forwarded to the front DAC PCM +slots of the Philips DAC. + +name='PCM Surround Playback Volume',index=0 + +This control is used to attenuate samples for left and right surround PCM FX-bus +accumulators. ALSA uses accumulators 2 and 3 for left and right surround PCM +samples for 5.1 playback. The result samples are forwarded to the surround DAC PCM +slots of the Philips DAC. + +name='PCM Center Playback Volume',index=0 + +This control is used to attenuate samples for center PCM FX-bus accumulator. +ALSA uses accumulator 6 for center PCM sample for 5.1 playback. The result sample +is forwarded to the center DAC PCM slot of the Philips DAC. + +name='PCM LFE Playback Volume',index=0 + +This control is used to attenuate sample for LFE PCM FX-bus accumulator. +ALSA uses accumulator 7 for LFE PCM sample for 5.1 playback. The result sample +is forwarded to the LFE DAC PCM slot of the Philips DAC. + +name='PCM Playback Volume',index=0 + +This control is used to attenuate samples for left and right PCM FX-bus +accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples for +stereo playback. The result samples are forwarded to the front DAC PCM slots +of the Philips DAC. + +name='PCM Capture Volume',index=0 + +This control is used to attenuate samples for left and right PCM FX-bus +accumulator. ALSA uses accumulators 0 and 1 for left and right PCM. +The result is forwarded to the ADC capture FIFO (thus to the standard capture +PCM device). + +name='Music Playback Volume',index=0 + +This control is used to attenuate samples for left and right MIDI FX-bus +accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples. +The result samples are forwarded to the front DAC PCM slots of the AC97 codec. + +name='Music Capture Volume',index=0 + +These controls are used to attenuate samples for left and right MIDI FX-bus +accumulator. ALSA uses accumulators 4 and 5 for left and right PCM. +The result is forwarded to the ADC capture FIFO (thus to the standard capture +PCM device). + +name='Mic Playback Volume',index=0 + +This control is used to attenuate samples for left and right Mic input. +For Mic input is used AC97 codec. The result samples are forwarded to +the front DAC PCM slots of the Philips DAC. Samples are forwarded to Mic +capture FIFO (device 1 - 16bit/8KHz mono) too without volume control. + +name='Mic Capture Volume',index=0 + +This control is used to attenuate samples for left and right Mic input. +The result is forwarded to the ADC capture FIFO (thus to the standard capture +PCM device). + +name='Audigy CD Playback Volume',index=0 + +This control is used to attenuate samples from left and right IEC958 TTL +digital inputs (usually used by a CDROM drive). The result samples are +forwarded to the front DAC PCM slots of the Philips DAC. + +name='Audigy CD Capture Volume',index=0 + +This control is used to attenuate samples from left and right IEC958 TTL +digital inputs (usually used by a CDROM drive). The result samples are +forwarded to the ADC capture FIFO (thus to the standard capture PCM device). + +name='IEC958 Optical Playback Volume',index=0 + +This control is used to attenuate samples from left and right IEC958 optical +digital input. The result samples are forwarded to the front DAC PCM slots +of the Philips DAC. + +name='IEC958 Optical Capture Volume',index=0 + +This control is used to attenuate samples from left and right IEC958 optical +digital inputs. The result samples are forwarded to the ADC capture FIFO +(thus to the standard capture PCM device). + +name='Line2 Playback Volume',index=0 + +This control is used to attenuate samples from left and right I2S ADC +inputs (on the AudigyDrive). The result samples are forwarded to the front +DAC PCM slots of the Philips DAC. + +name='Line2 Capture Volume',index=1 + +This control is used to attenuate samples from left and right I2S ADC +inputs (on the AudigyDrive). The result samples are forwarded to the ADC +capture FIFO (thus to the standard capture PCM device). + +name='Analog Mix Playback Volume',index=0 + +This control is used to attenuate samples from left and right I2S ADC +inputs from Philips ADC. The result samples are forwarded to the front +DAC PCM slots of the Philips DAC. This contains mix from analog sources +like CD, Line In, Aux, .... + +name='Analog Mix Capture Volume',index=1 + +This control is used to attenuate samples from left and right I2S ADC +inputs Philips ADC. The result samples are forwarded to the ADC +capture FIFO (thus to the standard capture PCM device). + +name='Aux2 Playback Volume',index=0 + +This control is used to attenuate samples from left and right I2S ADC +inputs (on the AudigyDrive). The result samples are forwarded to the front +DAC PCM slots of the Philips DAC. + +name='Aux2 Capture Volume',index=1 + +This control is used to attenuate samples from left and right I2S ADC +inputs (on the AudigyDrive). The result samples are forwarded to the ADC +capture FIFO (thus to the standard capture PCM device). + +name='Front Playback Volume',index=0 + +All stereo signals are mixed together and mirrored to surround, center and LFE. +This control is used to attenuate samples for left and right front speakers of +this mix. + +name='Surround Playback Volume',index=0 + +All stereo signals are mixed together and mirrored to surround, center and LFE. +This control is used to attenuate samples for left and right surround speakers of +this mix. + +name='Center Playback Volume',index=0 + +All stereo signals are mixed together and mirrored to surround, center and LFE. +This control is used to attenuate sample for center speaker of this mix. + +name='LFE Playback Volume',index=0 + +All stereo signals are mixed together and mirrored to surround, center and LFE. +This control is used to attenuate sample for LFE speaker of this mix. + +name='Tone Control - Switch',index=0 + +This control turns the tone control on or off. The samples for front, rear +and center / LFE outputs are affected. + +name='Tone Control - Bass',index=0 + +This control sets the bass intensity. There is no neutral value!! +When the tone control code is activated, the samples are always modified. +The closest value to pure signal is 20. + +name='Tone Control - Treble',index=0 + +This control sets the treble intensity. There is no neutral value!! +When the tone control code is activated, the samples are always modified. +The closest value to pure signal is 20. + +name='Master Playback Volume',index=0 + +This control is used to attenuate samples for front, surround, center and +LFE outputs. + +name='IEC958 Optical Raw Playback Switch',index=0 + +If this switch is on, then the samples for the IEC958 (S/PDIF) digital +output are taken only from the raw FX8010 PCM, otherwise standard front +PCM samples are taken. + + +2) PCM stream related controls +------------------------------ + +name='EMU10K1 PCM Volume',index 0-31 + +Channel volume attenuation in range 0-0xffff. The maximum value (no +attenuation) is default. The channel mapping for three values is +as follows: + + 0 - mono, default 0xffff (no attenuation) + 1 - left, default 0xffff (no attenuation) + 2 - right, default 0xffff (no attenuation) + +name='EMU10K1 PCM Send Routing',index 0-31 + +This control specifies the destination - FX-bus accumulators. There 24 +values with this mapping: + + 0 - mono, A destination (FX-bus 0-63), default 0 + 1 - mono, B destination (FX-bus 0-63), default 1 + 2 - mono, C destination (FX-bus 0-63), default 2 + 3 - mono, D destination (FX-bus 0-63), default 3 + 4 - mono, E destination (FX-bus 0-63), default 0 + 5 - mono, F destination (FX-bus 0-63), default 0 + 6 - mono, G destination (FX-bus 0-63), default 0 + 7 - mono, H destination (FX-bus 0-63), default 0 + 8 - left, A destination (FX-bus 0-63), default 0 + 9 - left, B destination (FX-bus 0-63), default 1 + 10 - left, C destination (FX-bus 0-63), default 2 + 11 - left, D destination (FX-bus 0-63), default 3 + 12 - left, E destination (FX-bus 0-63), default 0 + 13 - left, F destination (FX-bus 0-63), default 0 + 14 - left, G destination (FX-bus 0-63), default 0 + 15 - left, H destination (FX-bus 0-63), default 0 + 16 - right, A destination (FX-bus 0-63), default 0 + 17 - right, B destination (FX-bus 0-63), default 1 + 18 - right, C destination (FX-bus 0-63), default 2 + 19 - right, D destination (FX-bus 0-63), default 3 + 20 - right, E destination (FX-bus 0-63), default 0 + 21 - right, F destination (FX-bus 0-63), default 0 + 22 - right, G destination (FX-bus 0-63), default 0 + 23 - right, H destination (FX-bus 0-63), default 0 + +Don't forget that it's illegal to assign a channel to the same FX-bus accumulator +more than once (it means 0=0 && 1=0 is an invalid combination). + +name='EMU10K1 PCM Send Volume',index 0-31 + +It specifies the attenuation (amount) for given destination in range 0-255. +The channel mapping is following: + + 0 - mono, A destination attn, default 255 (no attenuation) + 1 - mono, B destination attn, default 255 (no attenuation) + 2 - mono, C destination attn, default 0 (mute) + 3 - mono, D destination attn, default 0 (mute) + 4 - mono, E destination attn, default 0 (mute) + 5 - mono, F destination attn, default 0 (mute) + 6 - mono, G destination attn, default 0 (mute) + 7 - mono, H destination attn, default 0 (mute) + 8 - left, A destination attn, default 255 (no attenuation) + 9 - left, B destination attn, default 0 (mute) + 10 - left, C destination attn, default 0 (mute) + 11 - left, D destination attn, default 0 (mute) + 12 - left, E destination attn, default 0 (mute) + 13 - left, F destination attn, default 0 (mute) + 14 - left, G destination attn, default 0 (mute) + 15 - left, H destination attn, default 0 (mute) + 16 - right, A destination attn, default 0 (mute) + 17 - right, B destination attn, default 255 (no attenuation) + 18 - right, C destination attn, default 0 (mute) + 19 - right, D destination attn, default 0 (mute) + 20 - right, E destination attn, default 0 (mute) + 21 - right, F destination attn, default 0 (mute) + 22 - right, G destination attn, default 0 (mute) + 23 - right, H destination attn, default 0 (mute) + + + +4) MANUALS/PATENTS: +------------------- + +ftp://opensource.creative.com/pub/doc +------------------------------------- + + Files: + LM4545.pdf AC97 Codec + + m2049.pdf The EMU10K1 Digital Audio Processor + + hog63.ps FX8010 - A DSP Chip Architecture for Audio Effects + + +WIPO Patents +------------ + Patent numbers: + WO 9901813 (A1) Audio Effects Processor with multiple asynchronous (Jan. 14, 1999) + streams + + WO 9901814 (A1) Processor with Instruction Set for Audio Effects (Jan. 14, 1999) + + WO 9901953 (A1) Audio Effects Processor having Decoupled Instruction + Execution and Audio Data Sequencing (Jan. 14, 1999) + + +US Patents (http://www.uspto.gov/) +---------------------------------- + + US 5925841 Digital Sampling Instrument employing cache memory (Jul. 20, 1999) + + US 5928342 Audio Effects Processor integrated on a single chip (Jul. 27, 1999) + with a multiport memory onto which multiple asynchronous + digital sound samples can be concurrently loaded + + US 5930158 Processor with Instruction Set for Audio Effects (Jul. 27, 1999) + + US 6032235 Memory initialization circuit (Tram) (Feb. 29, 2000) + + US 6138207 Interpolation looping of audio samples in cache connected to (Oct. 24, 2000) + system bus with prioritization and modification of bus transfers + in accordance with loop ends and minimum block sizes + + US 6151670 Method for conserving memory storage using a (Nov. 21, 2000) + pool of short term memory registers + + US 6195715 Interrupt control for multiple programs communicating with (Feb. 27, 2001) + a common interrupt by associating programs to GP registers, + defining interrupt register, polling GP registers, and invoking + callback routine associated with defined interrupt register diff -Nru a/Documentation/sound/alsa/CMIPCI.txt b/Documentation/sound/alsa/CMIPCI.txt --- a/Documentation/sound/alsa/CMIPCI.txt 2004-05-26 15:01:35 -07:00 +++ b/Documentation/sound/alsa/CMIPCI.txt 2004-05-26 15:01:35 -07:00 @@ -180,8 +180,8 @@ device automatically to the previous state. On the model 033, AC3 is implemented by the software conversion in -the driver. This prevents the mmap support. If you need mmap -support, pass the "soft_ac3=0" module option. This doesn't matter +the alsa-lib. If you need to bypass the software conversion of IEC958 +subframes, pass the "soft_ac3=0" module option. This doesn't matter on the newer models. diff -Nru a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl --- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl 2004-05-26 15:01:35 -07:00 +++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl 2004-05-26 15:01:35 -07:00 @@ -511,7 +511,7 @@ } // (7) - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } @@ -519,10 +519,7 @@ // destructor -- see "Destructor" sub-section static void __devexit snd_mychip_remove(struct pci_dev *pci) { - mychip_t *chip = snd_magic_cast(mychip_t, - pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } ]]> @@ -691,21 +688,16 @@ <informalexample> <programlisting> <![CDATA[ - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; ]]> </programlisting> </informalexample> - In the above, the chip record is stored. This pointer is + In the above, the card record is stored. This pointer is referred in the remove callback and power-management callbacks, too. - If the card doesn't support the suspend/resume, you can store - the card pointer instead of the chip pointer, so that - <function>snd_card_free</function> can be called directly - without cast in the remove callback. But anyway, be sure - which pointer is used. </para> </section> </section> @@ -726,21 +718,15 @@ <![CDATA[ static void __devexit snd_mychip_remove(struct pci_dev *pci) { - mychip_t *chip = snd_magic_cast(mychip_t, - pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } ]]> </programlisting> </informalexample> - The above code assumes that the chip is allocated - with snd_magic stuff and - has the field to hold the card pointer (see <link - linkend="card-management"><citetitle>the next - section</citetitle></link>). + The above code assumes that the card pointer is set to the PCI + driver data. </para> </section> @@ -1355,16 +1341,7 @@ // initialization of the module static int __init alsa_card_mychip_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { - #ifdef MODULE - printk(KERN_ERR "My chip soundcard not found " - "or device busy\n"); - #endif - return err; - } - return 0; + return pci_module_init(&driver); } // clean up the module @@ -1781,16 +1758,7 @@ <![CDATA[ static int __init alsa_card_mychip_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { - #ifdef MODULE - printk(KERN_ERR "My chip soundcard not found" - " or device busy\n"); - #endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_mychip_exit(void) @@ -5254,47 +5222,23 @@ </para> <para> - Basic jobs of suspend/resume are done in - <structfield>suspend</structfield> and - <structfield>resume</structfield> callbacks of - <structname>pci_driver</structname> struct. Unfortunately, the - API of these callbacks was changed at the middle time of Linux - 2.4.x, if you want to keep the support for older kernels, you - have to write two different callbacks. The example below is the - skeleton callbacks which just call the real suspend and resume - functions. + ALSA provides the common power-management layer. Each card driver + needs to have only low-level suspend and resume callbacks. <informalexample> <programlisting> <![CDATA[ - #ifndef PCI_OLD_SUSPEND - static int snd_my_suspend(struct pci_dev *dev, u32 state) + #ifdef CONFIG_PM + static int snd_my_suspend(snd_card_t *card, unsigned int state) { - mychip_t *chip = snd_magic_cast(mychip_t, - pci_get_drvdata(dev), return -ENXIO); - mychip_suspend(chip); + .... // do things for suspsend return 0; } - static int snd_my_resume(struct pci_dev *dev) + static int snd_my_resume(snd_card_t *card, unsigned int state) { - mychip_t *chip = snd_magic_cast(mychip_t, - pci_get_drvdata(dev), return -ENXIO); - mychip_resume(chip); + .... // do things for suspsend return 0; } - #else - static void snd_my_suspend(struct pci_dev *dev) - { - mychip_t *chip = snd_magic_cast(mychip_t, - pci_get_drvdata(dev), return); - mychip_suspend(chip); - } - static void snd_mychip_resume(struct pci_dev *dev) - { - mychip_t *chip = snd_magic_cast(mychip_t, - pci_get_drvdata(dev), return); - mychip_resume(chip); - } #endif ]]> </programlisting> @@ -5302,17 +5246,10 @@ </para> <para> - For keeping the readability of 2.6 source code, it's recommended to - separate the above ifdef condition as the patch file in alsa-driver - directory. - See <filename>alsa-driver/pci/ali5451.c</filename> for example. - </para> - - <para> The scheme of the real suspend job is as following. <orderedlist> - <listitem><para>Check whether the power-state is already D3hot. If yes, skip the job.</para></listitem> + <listitem><para>Retrieve the chip data from pm_private_data field.</para></listitem> <listitem><para>Call <function>snd_pcm_suspend_all()</function> to suspend the running PCM streams.</para></listitem> <listitem><para>Save the register values if necessary.</para></listitem> <listitem><para>Stop the hardware if necessary.</para></listitem> @@ -5326,12 +5263,11 @@ <informalexample> <programlisting> <![CDATA[ - static void mychip_suspend(mychip_t *chip) + static int mychip_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; // (1) - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; + mychip_t *chip = snd_magic_cast(mychip_t, card->pm_private_data, + return -ENXIO); // (2) snd_pcm_suspend_all(chip->pcm); // (3) @@ -5340,6 +5276,7 @@ snd_mychip_stop_hardware(chip); // (5) snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } ]]> </programlisting> @@ -5350,8 +5287,7 @@ The scheme of the real resume job is as following. <orderedlist> - <listitem><para>Check whether the power-state is already D0. - If yes, skip the job.</para></listitem> + <listitem><para>Retrieve the chip data from pm_private_data field.</para></listitem> <listitem><para>Enable the pci device again by calling <function>pci_enable_device()</function>.</para></listitem> <listitem><para>Re-initialize the chip.</para></listitem> @@ -5372,10 +5308,9 @@ <![CDATA[ static void mychip_resume(mychip_t *chip) { - snd_card_t *card = chip->card; // (1) - if (card->power_state == SNDRV_CTL_POWER_D0) - return; + mychip_t *chip = snd_magic_cast(mychip_t, card->pm_private_data, + return -ENXIO); // (2) pci_enable_device(chip->pci); // (3) @@ -5388,38 +5323,6 @@ snd_mychip_restart_chip(chip); // (7) snd_power_change_state(card, SNDRV_CTL_POWER_D0); - } -]]> - </programlisting> - </informalexample> - </para> - - <para> - In addition to the callbacks above, you should define a callback - for the changes via the ALSA control interface. It's defined - like below: - - <informalexample> - <programlisting> -<![CDATA[ - static int snd_mychip_set_power_state(snd_card_t *card, - unsigned int power_state) - { - mychip_t *chip = snd_magic_cast(mychip_t, - card->power_state_private_data, return -ENXIO); - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - mychip_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - mychip_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } ]]> @@ -5439,41 +5342,42 @@ { .... snd_card_t *card; + mychip_t *chip; .... - #ifdef CONFIG_PM - card->set_power_state = snd_mychip_set_power_state; - card->power_state_private_data = chip; - #endif + snd_card_set_pm_callback(card, snd_my_suspend, snd_my_resume, chip); .... } ]]> </programlisting> </informalexample> + + Here you don't have to put ifdef CONFIG_PM around, since it's already + checked in the header and expanded to empty if not needed. </para> <para> If you need a space for saving the registers, you'll need to - allocate the buffer for it here, too, since you cannot call - <function>kmalloc()</function> with - <constant>GFP_KERNEL</constant> flag or - <function>vmalloc()</function> in the suspend callback. + allocate the buffer for it here, too, since it would be fatal + if you cannot allocate a memory in the suspend phase. The allocated buffer should be released in the corresponding destructor. </para> <para> And next, set suspend/resume callbacks to the pci_driver, + This can be done by passing a macro SND_PCI_PM_CALLBACKS + in the pci_driver struct. This macro is expanded to the correct + (global) callbacks if CONFIG_PM is set. <informalexample> <programlisting> <![CDATA[ static struct pci_driver driver = { .name = "My Chip", - .... - #ifdef CONFIG_PM - .suspend = snd_mychip_suspend, - .resume = snd_mychip_resume, - #endif + .id_table = snd_my_ids, + .probe = snd_my_probe, + .remove = __devexit_p(snd_my_remove), + SND_PCI_PM_CALLBACKS }; ]]> </programlisting> @@ -5521,7 +5425,8 @@ <para> The module parameters must be declared with the standard - <function>MODULE_PARM()</function> and + <function>module_param()()</function>, + <function>module_param_array()()</function> and <function>MODULE_PARM_DESC()</function> macros. The ALSA provides an additional macro, <function>MODULE_PARM_SYNTAX()</function>, for describing its syntax. The strings will be written to @@ -5545,18 +5450,22 @@ <![CDATA[ #define CARD_NAME "My Chip" - MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); + static int boot_devs; + module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); - MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); + module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); - MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); + module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); ]]> </programlisting> </informalexample> + + Here boot_devs is passed but simply ignored since we don't care + the number of parsed parameters. </para> <para> @@ -5577,39 +5486,6 @@ </informalexample> </para> - <para> - For building the driver into kernel, you should define the - <function>setup()</function> function in addition, too. - ALSA provides <function>get_id()</function> function to retrieve - a string argument from the kernel boot parameters. - - <informalexample> - <programlisting> -<![CDATA[ - #ifndef MODULE - - /* format is: snd-mychip=enable,index,id */ - - static int __init alsa_card_mychip_setup(char *str) - { - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; - } - - __setup("snd-mychip=", alsa_card_mychip_setup); - - #endif /* ifndef MODULE */ -]]> - </programlisting> - </informalexample> - </para> </chapter> @@ -5631,10 +5507,14 @@ Suppose that you'll create a new PCI driver for the card <quote>xyz</quote>. The card module name would be snd-xyz. The new driver is usually put into alsa-driver - tree. Then the driver is evaluated, audited and tested + tree, <filename>alsa-driver/pci</filename> directory in + the case of PCI cards. + Then the driver is evaluated, audited and tested by developers and users. After a certain time, the driver - will go to alsa-kernel tree and eventually integrated into - Linux 2.6 tree. + will go to alsa-kernel tree (to the corresponding directory, + such as <filename>alsa-kernel/pci</filename>) and eventually + integrated into Linux 2.6 tree (the directory would be + <filename>linux/sound/pci</filename>). </para> <para> @@ -5661,7 +5541,7 @@ <programlisting> <![CDATA[ snd-xyz-objs := xyz.o - extra-obj-$(CONFIG_SND_XYZ) += snd-xyz.o + obj-$(CONFIG_SND_XYZ) += snd-xyz.o ]]> </programlisting> </informalexample> @@ -5678,8 +5558,8 @@ <informalexample> <programlisting> <![CDATA[ - config SND_BT87X - tristate "Foobar XYX" + config SND_XYZ + tristate "Foobar XYZ" depends on SND select SND_PCM help @@ -5730,7 +5610,8 @@ <orderedlist> <listitem> <para> - Add a new directory (xyz) to extra-subdir-y list in alsa-driver/pci/Makefile + Add a new directory (<filename>xyz</filename>) in + <filename>alsa-driver/pci/Makefile</filename> like below <informalexample> <programlisting> @@ -5744,7 +5625,7 @@ <listitem> <para> - Under the directory xyz, create a Makefile + Under the directory <filename>xyz</filename>, create a Makefile <example> <title>Sample Makefile for a driver xyz</title> diff -Nru a/Documentation/sound/alsa/Procfile.txt b/Documentation/sound/alsa/Procfile.txt --- a/Documentation/sound/alsa/Procfile.txt 2004-05-26 15:01:36 -07:00 +++ b/Documentation/sound/alsa/Procfile.txt 2004-05-26 15:01:36 -07:00 @@ -131,6 +131,12 @@ card*/codec97#0/ac97#?-?+regs Shows the AC97 register dump. Useful for debugging. + When CONFIG_SND_DEBUG is enabled, you can write to this file for + changing an AC97 register directly. Pass two hex numbers. + For example, + + # echo 02 9f1f > /proc/asound/card0/codec97#0/ac97#0-0+regs + Sequencer Information --------------------- diff -Nru a/MAINTAINERS b/MAINTAINERS --- a/MAINTAINERS 2004-05-26 15:01:36 -07:00 +++ b/MAINTAINERS 2004-05-26 15:01:36 -07:00 @@ -538,11 +538,6 @@ W: http://sourceforge.net/projects/cramfs/ S: Orphan -CREDITS FILE -P: John A. Martin -M: jam@acm.org -S: Maintained - CRIS PORT P: Bjorn Wesen M: bjornw@axis.com diff -Nru a/Makefile b/Makefile --- a/Makefile 2004-05-26 15:01:36 -07:00 +++ b/Makefile 2004-05-26 15:01:36 -07:00 @@ -680,7 +680,7 @@ uts_len := 64 define filechk_version.h - if ((`echo -n "$(KERNELRELEASE)" | wc -c ` > $(uts_len))); then \ + if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \ echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \ exit 1; \ fi; \ diff -Nru a/arch/arm/Kconfig b/arch/arm/Kconfig --- a/arch/arm/Kconfig 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/Kconfig 2004-05-26 15:01:36 -07:00 @@ -84,9 +84,6 @@ config ARCH_CO285 bool "Co-EBSA285" -config ARCH_PXA - bool "PXA2xx-based" - config ARCH_EBSA110 bool "EBSA-110" help @@ -126,6 +123,9 @@ If you have any questions or comments about the Linux kernel port to this board, send e-mail to sjhill@cotw.com. +config ARCH_PXA + bool "PXA2xx-based" + config ARCH_RPC bool "RiscPC" help @@ -135,9 +135,6 @@ config ARCH_SA1100 bool "SA1100-based" -config ARCH_SHARK - bool "Shark" - config ARCH_S3C2410 bool "Samsung S3C2410" help @@ -145,8 +142,8 @@ BAST (http://www.simtec.co.uk/products/EB110ITX/), the IPAQ 1940 or the Samsung SMDK2410 development board (and derviatives). -config ARCH_OMAP - bool "TI OMAP" +config ARCH_SHARK + bool "Shark" config ARCH_LH7A40X bool "Sharp LH7A40X" @@ -155,6 +152,9 @@ System on a Chip processors. These CPUs include an ARM922T core with a wide array of integrated devices for hand-held and low-power applications. + +config ARCH_OMAP + bool "TI OMAP" config ARCH_VERSATILE_PB bool "Versatile PB" diff -Nru a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c --- a/arch/arm/common/dmabounce.c 2004-05-26 15:01:35 -07:00 +++ b/arch/arm/common/dmabounce.c 2004-05-26 15:01:35 -07:00 @@ -100,6 +100,7 @@ if (d->dev == dev) return d; } + return NULL; } diff -Nru a/arch/arm/kernel/arch.c b/arch/arm/kernel/arch.c --- a/arch/arm/kernel/arch.c 2004-05-26 15:01:35 -07:00 +++ b/arch/arm/kernel/arch.c 2004-05-26 15:01:35 -07:00 @@ -10,7 +10,6 @@ #include <asm/elf.h> #include <asm/page.h> #include <asm/setup.h> -#include <asm/mach-types.h> #include <asm/mach/arch.h> unsigned int vram_size; diff -Nru a/arch/arm/mach-adifcc/irq.c b/arch/arm/mach-adifcc/irq.c --- a/arch/arm/mach-adifcc/irq.c 2004-05-26 15:01:35 -07:00 +++ b/arch/arm/mach-adifcc/irq.c 2004-05-26 15:01:35 -07:00 @@ -19,8 +19,6 @@ #include <asm/irq.h> #include <asm/hardware.h> -#include <asm/mach-types.h> - static void xs80200_irq_mask (unsigned int irq) { long INTCTL; diff -Nru a/arch/arm/mach-iop3xx/iop310-irq.c b/arch/arm/mach-iop3xx/iop310-irq.c --- a/arch/arm/mach-iop3xx/iop310-irq.c 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/mach-iop3xx/iop310-irq.c 2004-05-26 15:01:36 -07:00 @@ -21,8 +21,6 @@ #include <asm/irq.h> #include <asm/hardware.h> -#include <asm/mach-types.h> - extern void xs80200_irq_mask(unsigned int); extern void xs80200_irq_unmask(unsigned int); extern void xs80200_init_irq(void); diff -Nru a/arch/arm/mach-iop3xx/iop321-time.c b/arch/arm/mach-iop3xx/iop321-time.c --- a/arch/arm/mach-iop3xx/iop321-time.c 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/mach-iop3xx/iop321-time.c 2004-05-26 15:01:36 -07:00 @@ -23,7 +23,6 @@ #include <asm/io.h> #include <asm/irq.h> #include <asm/uaccess.h> -#include <asm/mach-types.h> #include <asm/mach/irq.h> static unsigned long iop321_gettimeoffset(void) diff -Nru a/arch/arm/mach-iop3xx/iq80310-irq.c b/arch/arm/mach-iop3xx/iq80310-irq.c --- a/arch/arm/mach-iop3xx/iq80310-irq.c 2004-05-26 15:01:35 -07:00 +++ b/arch/arm/mach-iop3xx/iq80310-irq.c 2004-05-26 15:01:35 -07:00 @@ -22,8 +22,6 @@ #include <asm/hardware.h> #include <asm/system.h> -#include <asm/mach-types.h> - extern void iop310_init_irq(void); extern void iop310_irq_demux(unsigned int, struct irqdesc *, struct pt_regs *); diff -Nru a/arch/arm/mach-iop3xx/iq80310-time.c b/arch/arm/mach-iop3xx/iq80310-time.c --- a/arch/arm/mach-iop3xx/iq80310-time.c 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/mach-iop3xx/iq80310-time.c 2004-05-26 15:01:36 -07:00 @@ -21,7 +21,6 @@ #include <asm/io.h> #include <asm/irq.h> #include <asm/uaccess.h> -#include <asm/mach-types.h> #include <asm/mach/irq.h> static void iq80310_write_timer (u_long val) diff -Nru a/arch/arm/mach-iop3xx/mm-321.c b/arch/arm/mach-iop3xx/mm-321.c --- a/arch/arm/mach-iop3xx/mm-321.c 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/mach-iop3xx/mm-321.c 2004-05-26 15:01:36 -07:00 @@ -21,7 +21,6 @@ #include <asm/page.h> #include <asm/mach/map.h> -#include <asm/mach-types.h> /* diff -Nru a/arch/arm/mach-iop3xx/mm.c b/arch/arm/mach-iop3xx/mm.c --- a/arch/arm/mach-iop3xx/mm.c 2004-05-26 15:01:35 -07:00 +++ b/arch/arm/mach-iop3xx/mm.c 2004-05-26 15:01:35 -07:00 @@ -23,7 +23,6 @@ #include <asm/page.h> #include <asm/mach/map.h> -#include <asm/mach-types.h> #ifdef CONFIG_IOP310_MU #include "message.h" diff -Nru a/arch/arm/mach-iop3xx/xs80200-irq.c b/arch/arm/mach-iop3xx/xs80200-irq.c --- a/arch/arm/mach-iop3xx/xs80200-irq.c 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/mach-iop3xx/xs80200-irq.c 2004-05-26 15:01:36 -07:00 @@ -17,8 +17,6 @@ #include <asm/irq.h> #include <asm/hardware.h> -#include <asm/mach-types.h> - static void xs80200_irq_mask (unsigned int irq) { unsigned long intctl; diff -Nru a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c --- a/arch/arm/mach-ixp4xx/common.c 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/mach-ixp4xx/common.c 2004-05-26 15:01:36 -07:00 @@ -30,7 +30,6 @@ #include <asm/hardware.h> #include <asm/uaccess.h> #include <asm/io.h> -#include <asm/mach-types.h> #include <asm/pgtable.h> #include <asm/page.h> #include <asm/irq.h> diff -Nru a/arch/arm/mach-omap/bus.c b/arch/arm/mach-omap/bus.c --- a/arch/arm/mach-omap/bus.c 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/mach-omap/bus.c 2004-05-26 15:01:36 -07:00 @@ -39,7 +39,6 @@ #include <linux/spinlock.h> #include <asm/hardware.h> -#include <asm/mach-types.h> #include <asm/io.h> #include <asm/irq.h> #include <asm/mach/irq.h> diff -Nru a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c --- a/arch/arm/mach-pxa/generic.c 2004-05-26 15:01:35 -07:00 +++ b/arch/arm/mach-pxa/generic.c 2004-05-26 15:01:35 -07:00 @@ -104,6 +104,7 @@ .id = 0, .dev = { .dma_mask = &pxamci_dmamask, + .coherent_dma_mask = 0xffffffff, }, .num_resources = ARRAY_SIZE(pxamci_resources), .resource = pxamci_resources, diff -Nru a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c --- a/arch/arm/mach-pxa/lubbock.c 2004-05-26 15:01:35 -07:00 +++ b/arch/arm/mach-pxa/lubbock.c 2004-05-26 15:01:35 -07:00 @@ -11,11 +11,12 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ +#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/device.h> #include <linux/major.h> -#include <linux/fs.h> +#include <linux/fb.h> #include <linux/interrupt.h> #include <asm/setup.h> @@ -29,11 +30,22 @@ #include <asm/mach/irq.h> #include <asm/arch/udc.h> +#include <asm/arch/pxafb.h> #include <asm/hardware/sa1111.h> #include "generic.h" +void lubbock_set_misc_wr(unsigned int mask, unsigned int set) +{ + unsigned long flags; + + local_irq_save(flags); + LUB_MISC_WR = (LUB_MISC_WR & ~mask) | (set & mask); + local_irq_restore(flags); +} +EXPORT_SYMBOL(lubbock_set_misc_wr); + static unsigned long lubbock_irq_enabled; static void lubbock_mask_irq(unsigned int irq) @@ -148,9 +160,29 @@ &smc91x_device, }; +static struct pxafb_mach_info sharp_lm8v31 __initdata = { + .pixclock = 270000, + .xres = 640, + .yres = 480, + .bpp = 16, + .hsync_len = 1, + .left_margin = 3, + .right_margin = 3, + .vsync_len = 1, + .upper_margin = 0, + .lower_margin = 0, + .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, + .cmap_greyscale = 0, + .cmap_inverse = 0, + .cmap_static = 0, + .lccr0 = LCCR0_SDS, + .lccr3 = LCCR3_PCP | LCCR3_Acb(255), +}; + static void __init lubbock_init(void) { pxa_set_udc_info(&udc_info); + set_pxa_fb_info(&sharp_lm8v31); (void) platform_add_devices(devices, ARRAY_SIZE(devices)); } diff -Nru a/arch/arm/mach-s3c2410/s3c2410.c b/arch/arm/mach-s3c2410/s3c2410.c --- a/arch/arm/mach-s3c2410/s3c2410.c 2004-05-26 15:01:36 -07:00 +++ b/arch/arm/mach-s3c2410/s3c2410.c 2004-05-26 15:01:36 -07:00 @@ -31,7 +31,6 @@ #include <asm/hardware.h> #include <asm/io.h> #include <asm/irq.h> -#include <asm/mach-types.h> #include <asm/arch/regs-clock.h> #include <asm/arch/regs-serial.h> diff -Nru a/arch/h8300/kernel/h8300_ksyms.c b/arch/h8300/kernel/h8300_ksyms.c --- a/arch/h8300/kernel/h8300_ksyms.c 2004-05-26 15:01:36 -07:00 +++ b/arch/h8300/kernel/h8300_ksyms.c 2004-05-26 15:01:36 -07:00 @@ -40,6 +40,8 @@ EXPORT_SYMBOL(ip_fast_csum); EXPORT_SYMBOL(kernel_thread); +EXPORT_SYMBOL(enable_irq); +EXPORT_SYMBOL(disable_irq); /* Networking helper routines. */ EXPORT_SYMBOL(csum_partial_copy); diff -Nru a/arch/h8300/kernel/module.c b/arch/h8300/kernel/module.c --- a/arch/h8300/kernel/module.c 2004-05-26 15:01:36 -07:00 +++ b/arch/h8300/kernel/module.c 2004-05-26 15:01:36 -07:00 @@ -67,7 +67,6 @@ Elf32_Sym *sym = (Elf32_Sym *)sechdrs[symindex].sh_addr + ELF32_R_SYM(rela[i].r_info); uint32_t v = sym->st_value + rela[i].r_addend; - uint32_t dot = sechdrs[symindex].sh_addr + rela[i].r_offset; switch (ELF32_R_TYPE(rela[i].r_info)) { case R_H8_DIR24R8: @@ -75,14 +74,15 @@ *loc = (*loc & 0xff000000) | ((*loc & 0xffffff) + v); break; case R_H8_DIR24A8: - *loc += v; + if (ELF32_R_SYM(rela[i].r_info)) + *loc += v; break; case R_H8_DIR32: case R_H8_DIR32A16: *loc += v; break; case R_H8_PCREL16: - v -= dot + 2; + v -= (unsigned long)loc + 2; if ((Elf32_Sword)v > 0x7fff || (Elf32_Sword)v < -(Elf32_Sword)0x8000) goto overflow; @@ -90,7 +90,7 @@ *(unsigned short *)loc = v; break; case R_H8_PCREL8: - v -= dot + 1; + v -= (unsigned long)loc + 1; if ((Elf32_Sword)v > 0x7f || (Elf32_Sword)v < -(Elf32_Sword)0x80) goto overflow; @@ -105,7 +105,7 @@ } return 0; overflow: - printk(KERN_ERR "module %s: relocation offset overflow: %p\n", + printk(KERN_ERR "module %s: relocation offset overflow: %08x\n", me->name, rela[i].r_offset); return -ENOEXEC; } diff -Nru a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c --- a/arch/i386/kernel/cpu/common.c 2004-05-26 15:01:35 -07:00 +++ b/arch/i386/kernel/cpu/common.c 2004-05-26 15:01:35 -07:00 @@ -201,6 +201,8 @@ { struct cpuinfo_x86 *c = &boot_cpu_data; + c->x86_cache_alignment = 32; + if (!have_cpuid_p()) return; @@ -213,8 +215,6 @@ get_cpu_vendor(c, 1); c->x86 = 4; - c->x86_cache_alignment = 32; - if (c->cpuid_level >= 0x00000001) { u32 junk, tfms, cap0, misc; cpuid(0x00000001, &tfms, &misc, &junk, &cap0); diff -Nru a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c --- a/arch/i386/kernel/io_apic.c 2004-05-26 15:01:35 -07:00 +++ b/arch/i386/kernel/io_apic.c 2004-05-26 15:01:35 -07:00 @@ -853,7 +853,7 @@ * we need to reprogram the ioredtbls to cater for the cpus which have come online * so mask in all cases should simply be TARGET_CPUS */ -void __init setup_ioapic_dest(cpumask_t mask) +void __init setup_ioapic_dest(void) { int pin, ioapic, irq, irq_entry; @@ -866,7 +866,7 @@ if (irq_entry == -1) continue; irq = pin_2_irq(irq_entry, ioapic, pin); - set_ioapic_affinity_irq(irq, mask); + set_ioapic_affinity_irq(irq, TARGET_CPUS); } } diff -Nru a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c --- a/arch/i386/kernel/process.c 2004-05-26 15:01:35 -07:00 +++ b/arch/i386/kernel/process.c 2004-05-26 15:01:35 -07:00 @@ -202,6 +202,10 @@ if (!strncmp(str, "poll", 4)) { printk("using polling idle threads.\n"); pm_idle = poll_idle; +#ifdef CONFIG_SMP + if (smp_num_siblings > 1) + printk("WARNING: polling idle and HT enabled, performance may degrade.\n"); +#endif } else if (!strncmp(str, "halt", 4)) { printk("using halt in idle threads.\n"); pm_idle = default_idle; diff -Nru a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c --- a/arch/i386/kernel/smpboot.c 2004-05-26 15:01:36 -07:00 +++ b/arch/i386/kernel/smpboot.c 2004-05-26 15:01:36 -07:00 @@ -1369,8 +1369,7 @@ void __init smp_cpus_done(unsigned int max_cpus) { #ifdef CONFIG_X86_IO_APIC - cpumask_t targets = CPU_MASK_ALL; - setup_ioapic_dest(targets); + setup_ioapic_dest(); #endif zap_low_mappings(); } diff -Nru a/arch/i386/mm/init.c b/arch/i386/mm/init.c --- a/arch/i386/mm/init.c 2004-05-26 15:01:36 -07:00 +++ b/arch/i386/mm/init.c 2004-05-26 15:01:36 -07:00 @@ -328,9 +328,30 @@ #endif } +#if defined(CONFIG_PM_DISK) || defined(CONFIG_SOFTWARE_SUSPEND) +/* + * Swap suspend & friends need this for resume because things like the intel-agp + * driver might have split up a kernel 4MB mapping. + */ +char __nosavedata swsusp_pg_dir[PAGE_SIZE] + __attribute__ ((aligned (PAGE_SIZE))); + +static inline void save_pg_dir(void) +{ + memcpy(swsusp_pg_dir, swapper_pg_dir, PAGE_SIZE); +} +#else +static inline void save_pg_dir(void) +{ +} +#endif + void zap_low_mappings (void) { int i; + + save_pg_dir(); + /* * Zap initial low-memory mappings. * diff -Nru a/arch/i386/power/pmdisk.S b/arch/i386/power/pmdisk.S --- a/arch/i386/power/pmdisk.S 2004-05-26 15:01:36 -07:00 +++ b/arch/i386/power/pmdisk.S 2004-05-26 15:01:36 -07:00 @@ -21,7 +21,7 @@ jmp .L1449 .p2align 4,,7 .L1450: - movl $swapper_pg_dir-__PAGE_OFFSET,%ecx + movl $swsusp_pg_dir-__PAGE_OFFSET,%ecx movl %ecx,%cr3 movl pm_pagedir_nosave,%ebx diff -Nru a/arch/i386/power/swsusp.S b/arch/i386/power/swsusp.S --- a/arch/i386/power/swsusp.S 2004-05-26 15:01:35 -07:00 +++ b/arch/i386/power/swsusp.S 2004-05-26 15:01:35 -07:00 @@ -36,7 +36,7 @@ jmp .L1449 .p2align 4,,7 .L1450: - movl $swapper_pg_dir-__PAGE_OFFSET,%ecx + movl $swsusp_pg_dir-__PAGE_OFFSET,%ecx movl %ecx,%cr3 call do_magic_resume_1 diff -Nru a/arch/ppc64/Kconfig b/arch/ppc64/Kconfig --- a/arch/ppc64/Kconfig 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/Kconfig 2004-05-26 15:01:36 -07:00 @@ -417,6 +417,13 @@ debugging info resulting in a larger kernel image. Say Y here only if you plan to use gdb to debug the kernel. If you don't debug the kernel, you can say N. + +config IRQSTACKS + bool "Use separate kernel stacks when processing interrupts" + help + If you say Y here the kernel will use separate kernel stacks + for handling hard and soft interrupts. This can help avoid + overflowing the process kernel stacks. endmenu diff -Nru a/arch/ppc64/kernel/head.S b/arch/ppc64/kernel/head.S --- a/arch/ppc64/kernel/head.S 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/kernel/head.S 2004-05-26 15:01:36 -07:00 @@ -1281,6 +1281,10 @@ SAVE_4GPRS(16, r1) SAVE_8GPRS(24, r1) + /* Set the marker value "regshere" just before the reg values */ + SET_REG_TO_CONST(r22, 0x7265677368657265) + std r22,STACK_FRAME_OVERHEAD-16(r1) + /* * Clear the RESULT field */ diff -Nru a/arch/ppc64/kernel/ioctl32.c b/arch/ppc64/kernel/ioctl32.c --- a/arch/ppc64/kernel/ioctl32.c 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/kernel/ioctl32.c 2004-05-26 15:01:36 -07:00 @@ -29,307 +29,6 @@ #define CODE #include "compat_ioctl.c" -struct ncp_ioctl_request_32 { - unsigned int function; - unsigned int size; - compat_caddr_t data; -}; - -struct ncp_fs_info_v2_32 { - int version; - unsigned int mounted_uid; - unsigned int connection; - unsigned int buffer_size; - - unsigned int volume_number; - __u32 directory_id; - - __u32 dummy1; - __u32 dummy2; - __u32 dummy3; -}; - -struct ncp_objectname_ioctl_32 -{ - int auth_type; - unsigned int object_name_len; - compat_caddr_t object_name; /* an userspace data, in most cases user name */ -}; - -struct ncp_privatedata_ioctl_32 -{ - unsigned int len; - compat_caddr_t data; /* ~1000 for NDS */ -}; - -#define NCP_IOC_NCPREQUEST_32 _IOR('n', 1, struct ncp_ioctl_request_32) - -#define NCP_IOC_GETMOUNTUID2_32 _IOW('n', 2, unsigned int) - -#define NCP_IOC_GET_FS_INFO_V2_32 _IOWR('n', 4, struct ncp_fs_info_v2_32) - -#define NCP_IOC_GETOBJECTNAME_32 _IOWR('n', 9, struct ncp_objectname_ioctl_32) -#define NCP_IOC_SETOBJECTNAME_32 _IOR('n', 9, struct ncp_objectname_ioctl_32) -#define NCP_IOC_GETPRIVATEDATA_32 _IOWR('n', 10, struct ncp_privatedata_ioctl_32) -#define NCP_IOC_SETPRIVATEDATA_32 _IOR('n', 10, struct ncp_privatedata_ioctl_32) - -static int do_ncp_ncprequest(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_ioctl_request_32 n32; - struct ncp_ioctl_request n; - mm_segment_t old_fs; - int err; - - if (copy_from_user(&n32, (struct ncp_ioctl_request_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.function = n32.function; - n.size = n32.size; - if (n.size > 65536) - return -EINVAL; - n.data = vmalloc(65536); /* 65536 must be same as NCP_PACKET_SIZE_INTERNAL in ncpfs */ - if (!n.data) - return -ENOMEM; - err = -EFAULT; - if (copy_from_user(n.data, (void *)A(n32.data), n.size)) - goto out; - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_NCPREQUEST, (unsigned long)&n); - set_fs (old_fs); - if(err <= 0) - goto out; - if (err > 65536) { - err = -EINVAL; - goto out; - } - if (copy_to_user((void *)A(n32.data), n.data, err)) { - err = -EFAULT; - goto out; - } - out: - vfree(n.data); - return err; -} - -static int do_ncp_getmountuid2(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - mm_segment_t old_fs = get_fs(); - __kernel_uid_t kuid; - int err; - - cmd = NCP_IOC_GETMOUNTUID2; - - set_fs(KERNEL_DS); - err = sys_ioctl(fd, cmd, (unsigned long)&kuid); - set_fs(old_fs); - - if (!err) - err = put_user(kuid, (unsigned int*)arg); - - return err; -} - -static int do_ncp_getfsinfo2(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - mm_segment_t old_fs = get_fs(); - struct ncp_fs_info_v2_32 n32; - struct ncp_fs_info_v2 n; - int err; - - if (copy_from_user(&n32, (struct ncp_fs_info_v2_32*)arg, sizeof(n32))) - return -EFAULT; - if (n32.version != NCP_GET_FS_INFO_VERSION_V2) - return -EINVAL; - n.version = NCP_GET_FS_INFO_VERSION_V2; - - set_fs(KERNEL_DS); - err = sys_ioctl(fd, NCP_IOC_GET_FS_INFO_V2, (unsigned long)&n); - set_fs(old_fs); - - if (!err) { - n32.version = n.version; - n32.mounted_uid = n.mounted_uid; - n32.connection = n.connection; - n32.buffer_size = n.buffer_size; - n32.volume_number = n.volume_number; - n32.directory_id = n.directory_id; - n32.dummy1 = n.dummy1; - n32.dummy2 = n.dummy2; - n32.dummy3 = n.dummy3; - err = copy_to_user((struct ncp_fs_info_v2_32*)arg, &n32, sizeof(n32)) ? -EFAULT : 0; - } - return err; -} - -static int do_ncp_getobjectname(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_objectname_ioctl_32 n32; - struct ncp_objectname_ioctl n; - mm_segment_t old_fs; - int err; - size_t tl; - - if (copy_from_user(&n32, (struct ncp_objectname_ioctl_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.object_name_len = tl = n32.object_name_len; - if (tl) { - n.object_name = kmalloc(tl, GFP_KERNEL); - if (!n.object_name) - return -ENOMEM; - } else { - n.object_name = NULL; - } - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_GETOBJECTNAME, (unsigned long)&n); - set_fs (old_fs); - if(err) - goto out; - - if (tl > n.object_name_len) - tl = n.object_name_len; - - err = -EFAULT; - if (tl && copy_to_user((void *)A(n32.object_name), n.object_name, tl)) - goto out; - - n32.auth_type = n.auth_type; - n32.object_name_len = n.object_name_len; - - if (copy_to_user((struct ncp_objectname_ioctl_32*)arg, &n32, sizeof(n32))) - goto out; - - err = 0; - out: - if (n.object_name) - kfree(n.object_name); - - return err; -} - -static int do_ncp_setobjectname(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_objectname_ioctl_32 n32; - struct ncp_objectname_ioctl n; - mm_segment_t old_fs; - int err; - size_t tl; - - if (copy_from_user(&n32, (struct ncp_objectname_ioctl_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.auth_type = n32.auth_type; - n.object_name_len = tl = n32.object_name_len; - if (tl) { - n.object_name = kmalloc(tl, GFP_KERNEL); - if (!n.object_name) - return -ENOMEM; - err = -EFAULT; - if (copy_from_user(n.object_name, (void *)A(n32.object_name), tl)) - goto out; - } else { - n.object_name = NULL; - } - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_SETOBJECTNAME, (unsigned long)&n); - set_fs (old_fs); - - out: - if (n.object_name) - kfree(n.object_name); - - return err; -} - -static int do_ncp_getprivatedata(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_privatedata_ioctl_32 n32; - struct ncp_privatedata_ioctl n; - mm_segment_t old_fs; - int err; - size_t tl; - - if (copy_from_user(&n32, (struct ncp_privatedata_ioctl_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.len = tl = n32.len; - if (tl) { - n.data = kmalloc(tl, GFP_KERNEL); - if (!n.data) - return -ENOMEM; - } else { - n.data = NULL; - } - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_GETPRIVATEDATA, (unsigned long)&n); - set_fs (old_fs); - if(err) - goto out; - - if (tl > n.len) - tl = n.len; - - err = -EFAULT; - if (tl && copy_to_user((void *)A(n32.data), n.data, tl)) - goto out; - - n32.len = n.len; - - if (copy_to_user((struct ncp_privatedata_ioctl_32*)arg, &n32, sizeof(n32))) - goto out; - - err = 0; - out: - if (n.data) - kfree(n.data); - - return err; -} - -static int do_ncp_setprivatedata(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_privatedata_ioctl_32 n32; - struct ncp_privatedata_ioctl n; - mm_segment_t old_fs; - int err; - size_t tl; - - if (copy_from_user(&n32, (struct ncp_privatedata_ioctl_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.len = tl = n32.len; - if (tl) { - n.data = kmalloc(tl, GFP_KERNEL); - if (!n.data) - return -ENOMEM; - err = -EFAULT; - if (copy_from_user(n.data, (void *)A(n32.data), tl)) - goto out; - } else { - n.data = NULL; - } - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_SETPRIVATEDATA, (unsigned long)&n); - set_fs (old_fs); - - out: - if (n.data) - kfree(n.data); - - return err; -} - - #define HANDLE_IOCTL(cmd,handler) { cmd, (ioctl_trans_handler_t)handler, 0 }, #define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL(cmd,sys_ioctl) @@ -349,17 +48,6 @@ /* Little p (/dev/rtc, /dev/envctrl, etc.) */ COMPATIBLE_IOCTL(_IOR('p', 20, int[7])) /* RTCGET */ COMPATIBLE_IOCTL(_IOW('p', 21, int[7])) /* RTCSET */ - -/* And these ioctls need translation */ - -/* NCPFS */ -HANDLE_IOCTL(NCP_IOC_NCPREQUEST_32, do_ncp_ncprequest) -HANDLE_IOCTL(NCP_IOC_GETMOUNTUID2_32, do_ncp_getmountuid2) -HANDLE_IOCTL(NCP_IOC_GET_FS_INFO_V2_32, do_ncp_getfsinfo2) -HANDLE_IOCTL(NCP_IOC_GETOBJECTNAME_32, do_ncp_getobjectname) -HANDLE_IOCTL(NCP_IOC_SETOBJECTNAME_32, do_ncp_setobjectname) -HANDLE_IOCTL(NCP_IOC_GETPRIVATEDATA_32, do_ncp_getprivatedata) -HANDLE_IOCTL(NCP_IOC_SETPRIVATEDATA_32, do_ncp_setprivatedata) IOCTL_TABLE_END diff -Nru a/arch/ppc64/kernel/irq.c b/arch/ppc64/kernel/irq.c --- a/arch/ppc64/kernel/irq.c 2004-05-26 15:01:35 -07:00 +++ b/arch/ppc64/kernel/irq.c 2004-05-26 15:01:35 -07:00 @@ -370,8 +370,7 @@ return 0; } -static inline int handle_irq_event(int irq, struct pt_regs *regs, - struct irqaction *action) +int handle_irq_event(int irq, struct pt_regs *regs, struct irqaction *action) { int status = 0; int retval = 0; @@ -482,6 +481,9 @@ int cpu = smp_processor_id(); irq_desc_t *desc = get_irq_desc(irq); irqreturn_t action_ret; +#ifdef CONFIG_IRQSTACKS + struct thread_info *curtp, *irqtp; +#endif kstat_cpu(cpu).irqs[irq]++; @@ -548,7 +550,22 @@ */ for (;;) { spin_unlock(&desc->lock); - action_ret = handle_irq_event(irq, regs, action); + +#ifdef CONFIG_IRQSTACKS + /* Switch to the irq stack to handle this */ + curtp = current_thread_info(); + irqtp = hardirq_ctx[smp_processor_id()]; + if (curtp != irqtp) { + irqtp->task = curtp->task; + irqtp->flags = 0; + action_ret = call_handle_irq_event(irq, regs, action, irqtp); + irqtp->task = NULL; + if (irqtp->flags) + set_bits(irqtp->flags, &curtp->flags); + } else +#endif + action_ret = handle_irq_event(irq, regs, action); + spin_lock(&desc->lock); if (!noirqdebug) note_interrupt(irq, desc, action_ret); @@ -690,6 +707,7 @@ once++; ppc_md.init_IRQ(); + irq_ctx_init(); } static struct proc_dir_entry * root_irq_dir; @@ -973,4 +991,51 @@ } -#endif +#endif /* CONFIG_PPC_ISERIES */ + +#ifdef CONFIG_IRQSTACKS +struct thread_info *softirq_ctx[NR_CPUS]; +struct thread_info *hardirq_ctx[NR_CPUS]; + +void irq_ctx_init(void) +{ + struct thread_info *tp; + int i; + + for (i = 0; i < NR_CPUS; i++) { + memset((void *)softirq_ctx[i], 0, THREAD_SIZE); + tp = softirq_ctx[i]; + tp->cpu = i; + tp->preempt_count = SOFTIRQ_OFFSET; + + memset((void *)hardirq_ctx[i], 0, THREAD_SIZE); + tp = hardirq_ctx[i]; + tp->cpu = i; + tp->preempt_count = HARDIRQ_OFFSET; + } +} + +void do_softirq(void) +{ + unsigned long flags; + struct thread_info *curtp, *irqtp; + + if (in_interrupt()) + return; + + local_irq_save(flags); + + if (local_softirq_pending()) { + curtp = current_thread_info(); + irqtp = softirq_ctx[smp_processor_id()]; + irqtp->task = curtp->task; + call_do_softirq(irqtp); + irqtp->task = NULL; + } + + local_irq_restore(flags); +} +EXPORT_SYMBOL(do_softirq); + +#endif /* CONFIG_IRQSTACKS */ + diff -Nru a/arch/ppc64/kernel/misc.S b/arch/ppc64/kernel/misc.S --- a/arch/ppc64/kernel/misc.S 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/kernel/misc.S 2004-05-26 15:01:36 -07:00 @@ -102,6 +102,30 @@ blr #endif /* CONFIG_PPC_ISERIES */ +#ifdef CONFIG_IRQSTACKS +_GLOBAL(call_do_softirq) + mflr r0 + std r0,16(r1) + stdu r1,THREAD_SIZE-112(r3) + mr r1,r3 + bl .__do_softirq + ld r1,0(r1) + ld r0,16(r1) + mtlr r0 + blr + +_GLOBAL(call_handle_irq_event) + mflr r0 + std r0,16(r1) + stdu r1,THREAD_SIZE-112(r6) + mr r1,r6 + bl .handle_irq_event + ld r1,0(r1) + ld r0,16(r1) + mtlr r0 + blr +#endif /* CONFIG_IRQSTACKS */ + /* * Flush instruction cache. */ diff -Nru a/arch/ppc64/kernel/process.c b/arch/ppc64/kernel/process.c --- a/arch/ppc64/kernel/process.c 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/kernel/process.c 2004-05-26 15:01:36 -07:00 @@ -457,16 +457,28 @@ static int kstack_depth_to_print = 64; -static inline int validate_sp(unsigned long sp, struct task_struct *p) +static int validate_sp(unsigned long sp, struct task_struct *p, + unsigned long nbytes) { unsigned long stack_page = (unsigned long)p->thread_info; - if (sp < stack_page + sizeof(struct thread_struct)) - return 0; - if (sp >= stack_page + THREAD_SIZE) - return 0; + if (sp >= stack_page + sizeof(struct thread_struct) + && sp <= stack_page + THREAD_SIZE - nbytes) + return 1; + +#ifdef CONFIG_IRQSTACKS + stack_page = (unsigned long) hardirq_ctx[task_cpu(p)]; + if (sp >= stack_page + sizeof(struct thread_struct) + && sp <= stack_page + THREAD_SIZE - nbytes) + return 1; + + stack_page = (unsigned long) softirq_ctx[task_cpu(p)]; + if (sp >= stack_page + sizeof(struct thread_struct) + && sp <= stack_page + THREAD_SIZE - nbytes) + return 1; +#endif - return 1; + return 0; } unsigned long get_wchan(struct task_struct *p) @@ -478,12 +490,12 @@ return 0; sp = p->thread.ksp; - if (!validate_sp(sp, p)) + if (!validate_sp(sp, p, 112)) return 0; do { sp = *(unsigned long *)sp; - if (!validate_sp(sp, p)) + if (!validate_sp(sp, p, 112)) return 0; if (count > 0) { ip = *(unsigned long *)(sp + 16); @@ -496,9 +508,10 @@ void show_stack(struct task_struct *p, unsigned long *_sp) { - unsigned long ip; + unsigned long ip, newsp, lr; int count = 0; unsigned long sp = (unsigned long)_sp; + int firstframe = 1; if (sp == 0) { if (p) { @@ -509,17 +522,40 @@ } } - if (!validate_sp(sp, p)) - return; - + lr = 0; printk("Call Trace:\n"); do { - sp = *(unsigned long *)sp; - if (!validate_sp(sp, p)) + if (!validate_sp(sp, p, 112)) return; - ip = *(unsigned long *)(sp + 16); - printk("[%016lx] ", ip); - print_symbol("%s\n", ip); + + _sp = (unsigned long *) sp; + newsp = _sp[0]; + ip = _sp[2]; + if (!firstframe || ip != lr) { + printk("[%016lx] [%016lx] ", sp, ip); + print_symbol("%s", ip); + if (firstframe) + printk(" (unreliable)"); + printk("\n"); + } + firstframe = 0; + + /* + * See if this is an exception frame. + * We look for the "regshere" marker in the current frame. + */ + if (validate_sp(sp, p, sizeof(struct pt_regs) + 400) + && _sp[12] == 0x7265677368657265) { + struct pt_regs *regs = (struct pt_regs *) + (sp + STACK_FRAME_OVERHEAD); + printk("--- Exception: %lx", regs->trap); + print_symbol(" at %s\n", regs->nip); + lr = regs->link; + print_symbol(" LR = %s\n", lr); + firstframe = 1; + } + + sp = newsp; } while (count++ < kstack_depth_to_print); } diff -Nru a/arch/ppc64/kernel/prom.c b/arch/ppc64/kernel/prom.c --- a/arch/ppc64/kernel/prom.c 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/kernel/prom.c 2004-05-26 15:01:36 -07:00 @@ -2189,11 +2189,13 @@ ints = imap - nintrc; reg = ints - naddrc; } + if (p == NULL) { #ifdef DEBUG_IRQ - if (p == NULL) printk("hmmm, int tree for %s doesn't have ctrler\n", np->full_name); #endif + return 0; + } *irq = ints; *ictrler = p; return nintrc; @@ -2204,7 +2206,7 @@ int measure_only) { unsigned int *ints; - int intlen, intrcells; + int intlen, intrcells, intrcount; int i, j, n; unsigned int *irq, virq; struct device_node *ic; @@ -2214,34 +2216,40 @@ return mem_start; intrcells = prom_n_intr_cells(np); intlen /= intrcells * sizeof(unsigned int); - np->n_intrs = intlen; np->intrs = (struct interrupt_info *) mem_start; mem_start += intlen * sizeof(struct interrupt_info); if (measure_only) return mem_start; - for (i = 0; i < intlen; ++i) { - np->intrs[i].line = 0; - np->intrs[i].sense = 1; + intrcount = 0; + for (i = 0; i < intlen; ++i, ints += intrcells) { n = map_interrupt(&irq, &ic, np, ints, intrcells); if (n <= 0) continue; - virq = virt_irq_create_mapping(irq[0]); - if (virq == NO_IRQ) { - printk(KERN_CRIT "Could not allocate interrupt " - "number for %s\n", np->full_name); - } else - np->intrs[i].line = irq_offset_up(virq); + + /* don't map IRQ numbers under a cascaded 8259 controller */ + if (ic && device_is_compatible(ic, "chrp,iic")) { + np->intrs[intrcount].line = irq[0]; + } else { + virq = virt_irq_create_mapping(irq[0]); + if (virq == NO_IRQ) { + printk(KERN_CRIT "Could not allocate interrupt" + " number for %s\n", np->full_name); + continue; + } + np->intrs[intrcount].line = irq_offset_up(virq); + } /* We offset irq numbers for the u3 MPIC by 128 in PowerMac */ if (systemcfg->platform == PLATFORM_POWERMAC && ic && ic->parent) { char *name = get_property(ic->parent, "name", NULL); if (name && !strcmp(name, "u3")) - np->intrs[i].line += 128; + np->intrs[intrcount].line += 128; } + np->intrs[intrcount].sense = 1; if (n > 1) - np->intrs[i].sense = irq[1]; + np->intrs[intrcount].sense = irq[1]; if (n > 2) { printk("hmmm, got %d intr cells for %s:", n, np->full_name); @@ -2249,8 +2257,9 @@ printk(" %d", irq[j]); printk("\n"); } - ints += intrcells; + ++intrcount; } + np->n_intrs = intrcount; return mem_start; } diff -Nru a/arch/ppc64/kernel/setup.c b/arch/ppc64/kernel/setup.c --- a/arch/ppc64/kernel/setup.c 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/kernel/setup.c 2004-05-26 15:01:36 -07:00 @@ -572,6 +572,23 @@ extern void (*calibrate_delay)(void); +#ifdef CONFIG_IRQSTACKS +static void __init irqstack_early_init(void) +{ + int i; + + /* interrupt stacks must be under 256MB, we cannot afford to take SLB misses on them */ + for (i = 0; i < NR_CPUS; i++) { + softirq_ctx[i] = (struct thread_info *)__va(lmb_alloc_base(THREAD_SIZE, + THREAD_SIZE, 0x10000000)); + hardirq_ctx[i] = (struct thread_info *)__va(lmb_alloc_base(THREAD_SIZE, + THREAD_SIZE, 0x10000000)); + } +} +#else +#define irqstack_early_init() +#endif + /* * Called into from start_kernel, after lock_kernel has been called. * Initializes bootmem, which is unsed to manage page allocation until @@ -616,6 +633,8 @@ /* Save unparsed command line copy for /proc/cmdline */ strlcpy(saved_command_line, cmd_line, sizeof(saved_command_line)); *cmdline_p = cmd_line; + + irqstack_early_init(); /* set up the bootmem stuff with available memory */ do_init_bootmem(); diff -Nru a/arch/ppc64/kernel/viopath.c b/arch/ppc64/kernel/viopath.c --- a/arch/ppc64/kernel/viopath.c 2004-05-26 15:01:35 -07:00 +++ b/arch/ppc64/kernel/viopath.c 2004-05-26 15:01:35 -07:00 @@ -190,6 +190,8 @@ static int proc_viopath_show(struct seq_file *m, void *v) { char *buf; + u16 vlanMap; + int vlanIndex; dma_addr_t handle; HvLpEvent_Rc hvrc; DECLARE_MUTEX_LOCKED(Semaphore); @@ -216,12 +218,18 @@ down(&Semaphore); - dma_unmap_single(iSeries_vio_dev, handle, PAGE_SIZE, DMA_FROM_DEVICE); - kfree(buf); + vlanMap = HvLpConfig_getVirtualLanIndexMap(); + vlanIndex = 0; + while (vlanMap != 0){ + if (vlanMap & 0x8000) + vlanIndex++;; + vlanMap = vlanMap << 1; + } - buf[PAGE_SIZE] = '\0'; + buf[PAGE_SIZE-1] = '\0'; seq_printf(m, "%s", buf); + seq_printf(m, "AVAILABLE_VETH=%d\n", vlanIndex ); seq_printf(m, "SRLNBR=%c%c%c%c%c%c%c\n", e2a(xItExtVpdPanel.mfgID[2]), e2a(xItExtVpdPanel.mfgID[3]), @@ -230,6 +238,9 @@ e2a(xItExtVpdPanel.systemSerial[3]), e2a(xItExtVpdPanel.systemSerial[4]), e2a(xItExtVpdPanel.systemSerial[5])); + + dma_unmap_single(iSeries_vio_dev, handle, PAGE_SIZE, DMA_FROM_DEVICE); + kfree(buf); return 0; } diff -Nru a/arch/ppc64/mm/numa.c b/arch/ppc64/mm/numa.c --- a/arch/ppc64/mm/numa.c 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/mm/numa.c 2004-05-26 15:01:36 -07:00 @@ -19,7 +19,7 @@ #include <asm/abs_addr.h> #if 1 -#define dbg(args...) udbg_printf(args) +#define dbg(args...) printk(KERN_INFO args) #else #define dbg(args...) #endif @@ -56,16 +56,136 @@ } } +static struct device_node * __init find_cpu_node(unsigned int cpu) +{ + unsigned int hw_cpuid = get_hard_smp_processor_id(cpu); + struct device_node *cpu_node = NULL; + unsigned int *interrupt_server, *reg; + int len; + + while ((cpu_node = of_find_node_by_type(cpu_node, "cpu")) != NULL) { + /* Try interrupt server first */ + interrupt_server = (unsigned int *)get_property(cpu_node, + "ibm,ppc-interrupt-server#s", &len); + + if (interrupt_server && (len > 0)) { + while (len--) { + if (interrupt_server[len-1] == hw_cpuid) + return cpu_node; + } + } else { + reg = (unsigned int *)get_property(cpu_node, + "reg", &len); + if (reg && (len > 0) && (reg[0] == hw_cpuid)) + return cpu_node; + } + } + + return NULL; +} + +/* must hold reference to node during call */ +static int *of_get_associativity(struct device_node *dev) + { + unsigned int *result; + int len; + + result = (unsigned int *)get_property(dev, "ibm,associativity", &len); + + if (len <= 0) + return NULL; + + return result; +} + +static int of_node_numa_domain(struct device_node *device, int depth) +{ + int numa_domain; + unsigned int *tmp; + + tmp = of_get_associativity(device); + if (tmp && (tmp[0] >= depth)) { + numa_domain = tmp[depth]; + } else { + printk(KERN_ERR "WARNING: no NUMA information for " + "%s\n", device->full_name); + numa_domain = 0; + } + return numa_domain; +} + +/* + * In theory, the "ibm,associativity" property may contain multiple + * associativity lists because a resource may be multiply connected + * into the machine. This resource then has different associativity + * characteristics relative to its multiple connections. We ignore + * this for now. We also assume that all cpu and memory sets have + * their distances represented at a common level. This won't be + * true for heirarchical NUMA. + * + * In any case the ibm,associativity-reference-points should give + * the correct depth for a normal NUMA system. + * + * - Dave Hansen <haveblue@us.ibm.com> + */ +static int find_min_common_depth(void) +{ + int depth; + unsigned int *ref_points; + struct device_node *rtas_root; + unsigned int len; + + rtas_root = of_find_node_by_path("/rtas"); + + if (!rtas_root) { + printk(KERN_ERR "WARNING: %s() could not find rtas root\n", + __FUNCTION__); + return -1; + } + + /* + * this property is 2 32-bit integers, each representing a level of + * depth in the associativity nodes. The first is for an SMP + * configuration (should be all 0's) and the second is for a normal + * NUMA configuration. + */ + ref_points = (unsigned int *)get_property(rtas_root, + "ibm,associativity-reference-points", &len); + + if ((len >= 1) && ref_points) { + depth = ref_points[1]; + } else { + printk(KERN_ERR "WARNING: could not find NUMA " + "associativity reference point\n"); + depth = -1; + } + of_node_put(rtas_root); + + return depth; +} + +static unsigned long read_cell_ul(struct device_node *device, unsigned int **buf) +{ + int i; + unsigned long result = 0; + + i = prom_n_size_cells(device); + /* bug on i>2 ?? */ + while (i--) { + result = (result << 32) | **buf; + (*buf)++; + } + return result; +} + static int __init parse_numa_properties(void) { struct device_node *cpu = NULL; struct device_node *memory = NULL; - int *cpu_associativity; - int *memory_associativity; int depth; int max_domain = 0; long entries = lmb_end_of_DRAM() >> MEMORY_INCREMENT_SHIFT; - long i; + unsigned long i; if (strstr(saved_command_line, "numa=off")) { printk(KERN_WARNING "NUMA disabled by user\n"); @@ -78,112 +198,78 @@ for (i = 0; i < entries ; i++) numa_memory_lookup_table[i] = ARRAY_INITIALISER; - cpu = of_find_node_by_type(NULL, "cpu"); - if (!cpu) - goto err; - - memory = of_find_node_by_type(NULL, "memory"); - if (!memory) - goto err; - - cpu_associativity = (int *)get_property(cpu, "ibm,associativity", NULL); - if (!cpu_associativity) - goto err; - - memory_associativity = (int *)get_property(memory, "ibm,associativity", - NULL); - if (!memory_associativity) - goto err; - - /* find common depth */ - if (cpu_associativity[0] < memory_associativity[0]) - depth = cpu_associativity[0]; - else - depth = memory_associativity[0]; - - for (; cpu; cpu = of_find_node_by_type(cpu, "cpu")) { - int *tmp; - int cpu_nr, numa_domain; + depth = find_min_common_depth(); - tmp = (int *)get_property(cpu, "reg", NULL); - if (!tmp) - continue; - cpu_nr = *tmp; + printk(KERN_INFO "NUMA associativity depth for CPU/Memory: %d\n", depth); + if (depth < 0) + return depth; - tmp = (int *)get_property(cpu, "ibm,associativity", - NULL); - if (!tmp) - continue; - numa_domain = tmp[depth]; + for_each_cpu(i) { + int numa_domain; + + cpu = find_cpu_node(i); - /* FIXME */ - if (numa_domain == 0xffff) { - dbg("cpu %d has no numa doman\n", cpu_nr); + if (cpu) { + numa_domain = of_node_numa_domain(cpu, depth); + of_node_put(cpu); + + if (numa_domain >= MAX_NUMNODES) { + /* + * POWER4 LPAR uses 0xffff as invalid node, + * dont warn in this case. + */ + if (numa_domain != 0xffff) + printk(KERN_ERR "WARNING: cpu %ld " + "maps to invalid NUMA node %d\n", + i, numa_domain); + numa_domain = 0; + } + } else { + printk(KERN_ERR "WARNING: no NUMA information for " + "cpu %ld\n", i); numa_domain = 0; } - if (numa_domain >= MAX_NUMNODES) - BUG(); - node_set_online(numa_domain); if (max_domain < numa_domain) max_domain = numa_domain; - map_cpu_to_node(cpu_nr, numa_domain); - /* register the second thread on an SMT machine */ - if (cur_cpu_spec->cpu_features & CPU_FTR_SMT) - map_cpu_to_node(cpu_nr ^ 0x1, numa_domain); + map_cpu_to_node(i, numa_domain); } - for (; memory; memory = of_find_node_by_type(memory, "memory")) { - unsigned int *tmp1, *tmp2; - unsigned long i; - unsigned long start = 0; - unsigned long size = 0; + memory = NULL; + while ((memory = of_find_node_by_type(memory, "memory")) != NULL) { + unsigned long start; + unsigned long size; int numa_domain; int ranges; + unsigned int *memcell_buf; + unsigned int len; - tmp1 = (int *)get_property(memory, "reg", NULL); - if (!tmp1) + memcell_buf = (unsigned int *)get_property(memory, "reg", &len); + if (!memcell_buf || len <= 0) continue; ranges = memory->n_addrs; new_range: - - i = prom_n_size_cells(memory); - while (i--) { - start = (start << 32) | *tmp1; - tmp1++; - } - - i = prom_n_size_cells(memory); - while (i--) { - size = (size << 32) | *tmp1; - tmp1++; - } + /* these are order-sensitive, and modify the buffer pointer */ + start = read_cell_ul(memory, &memcell_buf); + size = read_cell_ul(memory, &memcell_buf); start = _ALIGN_DOWN(start, MEMORY_INCREMENT); size = _ALIGN_UP(size, MEMORY_INCREMENT); - if ((start + size) > MAX_MEMORY) - BUG(); + numa_domain = of_node_numa_domain(memory, depth); - tmp2 = (int *)get_property(memory, "ibm,associativity", - NULL); - if (!tmp2) - continue; - numa_domain = tmp2[depth]; - - /* FIXME */ - if (numa_domain == 0xffff) { - dbg("memory has no numa doman\n"); + if (numa_domain >= MAX_NUMNODES) { + if (numa_domain != 0xffff) + printk(KERN_ERR "WARNING: memory at %lx maps " + "to invalid NUMA node %d\n", start, + numa_domain); numa_domain = 0; } - if (numa_domain >= MAX_NUMNODES) - BUG(); - node_set_online(numa_domain); if (max_domain < numa_domain) @@ -205,11 +291,13 @@ start, size); continue; } - node_data[numa_domain].node_spanned_pages += size / PAGE_SIZE; + node_data[numa_domain].node_spanned_pages += + size / PAGE_SIZE; } else { node_data[numa_domain].node_start_pfn = start / PAGE_SIZE; - node_data[numa_domain].node_spanned_pages = size / PAGE_SIZE; + node_data[numa_domain].node_spanned_pages = + size / PAGE_SIZE; } for (i = start ; i < (start+size); i += MEMORY_INCREMENT) @@ -227,10 +315,6 @@ numnodes = max_domain + 1; return 0; -err: - of_node_put(cpu); - of_node_put(memory); - return -1; } static void __init setup_nonnuma(void) diff -Nru a/arch/ppc64/xmon/xmon.c b/arch/ppc64/xmon/xmon.c --- a/arch/ppc64/xmon/xmon.c 2004-05-26 15:01:36 -07:00 +++ b/arch/ppc64/xmon/xmon.c 2004-05-26 15:01:36 -07:00 @@ -273,7 +273,7 @@ args.args[0] = SURVEILLANCE_TOKEN; args.args[1] = 0; args.args[2] = 0; - enter_rtas((void *) __pa(&args)); + enter_rtas(__pa(&args)); } #endif } @@ -1399,8 +1399,7 @@ /* Look for "regshere" marker to see if this is an exception frame. */ - if (newsp - sp == sizeof(struct pt_regs) + 400 - && mread(sp + 0x60, &marker, sizeof(unsigned long)) + if (mread(sp + 0x60, &marker, sizeof(unsigned long)) && marker == 0x7265677368657265) { if (mread(sp + 0x70, ®s, sizeof(regs)) != sizeof(regs)) { @@ -1417,12 +1416,6 @@ if (newsp == 0) break; - if (newsp < sp) { - printf("Stack chain goes %s: %.16lx\n", - (newsp < KERNELBASE? "into userspace": - "backwards"), newsp); - break; - } sp = newsp; } while (count++ < xmon_depth_to_print); diff -Nru a/arch/sparc64/kernel/ioctl32.c b/arch/sparc64/kernel/ioctl32.c --- a/arch/sparc64/kernel/ioctl32.c 2004-05-26 15:01:36 -07:00 +++ b/arch/sparc64/kernel/ioctl32.c 2004-05-26 15:01:36 -07:00 @@ -148,306 +148,6 @@ return ret; } -struct ncp_ioctl_request_32 { - unsigned int function; - unsigned int size; - compat_caddr_t data; -}; - -struct ncp_fs_info_v2_32 { - int version; - unsigned int mounted_uid; - unsigned int connection; - unsigned int buffer_size; - - unsigned int volume_number; - __u32 directory_id; - - __u32 dummy1; - __u32 dummy2; - __u32 dummy3; -}; - -struct ncp_objectname_ioctl_32 -{ - int auth_type; - unsigned int object_name_len; - compat_caddr_t object_name; /* an userspace data, in most cases user name */ -}; - -struct ncp_privatedata_ioctl_32 -{ - unsigned int len; - compat_caddr_t data; /* ~1000 for NDS */ -}; - -#define NCP_IOC_NCPREQUEST_32 _IOR('n', 1, struct ncp_ioctl_request_32) - -#define NCP_IOC_GETMOUNTUID2_32 _IOW('n', 2, unsigned int) - -#define NCP_IOC_GET_FS_INFO_V2_32 _IOWR('n', 4, struct ncp_fs_info_v2_32) - -#define NCP_IOC_GETOBJECTNAME_32 _IOWR('n', 9, struct ncp_objectname_ioctl_32) -#define NCP_IOC_SETOBJECTNAME_32 _IOR('n', 9, struct ncp_objectname_ioctl_32) -#define NCP_IOC_GETPRIVATEDATA_32 _IOWR('n', 10, struct ncp_privatedata_ioctl_32) -#define NCP_IOC_SETPRIVATEDATA_32 _IOR('n', 10, struct ncp_privatedata_ioctl_32) - -static int do_ncp_ncprequest(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_ioctl_request_32 n32; - struct ncp_ioctl_request n; - mm_segment_t old_fs; - int err; - - if (copy_from_user(&n32, (struct ncp_ioctl_request_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.function = n32.function; - n.size = n32.size; - if (n.size > 65536) - return -EINVAL; - n.data = vmalloc(65536); /* 65536 must be same as NCP_PACKET_SIZE_INTERNAL in ncpfs */ - if (!n.data) - return -ENOMEM; - err = -EFAULT; - if (copy_from_user(n.data, A(n32.data), n.size)) - goto out; - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_NCPREQUEST, (unsigned long)&n); - set_fs (old_fs); - if(err <= 0) - goto out; - if (err > 65536) { - err = -EINVAL; - goto out; - } - if (copy_to_user(A(n32.data), n.data, err)) { - err = -EFAULT; - goto out; - } - out: - vfree(n.data); - return err; -} - -static int do_ncp_getmountuid2(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - mm_segment_t old_fs = get_fs(); - __kernel_uid_t kuid; - int err; - - cmd = NCP_IOC_GETMOUNTUID2; - - set_fs(KERNEL_DS); - err = sys_ioctl(fd, cmd, (unsigned long)&kuid); - set_fs(old_fs); - - if (!err) - err = put_user(kuid, (unsigned int*)arg); - - return err; -} - -static int do_ncp_getfsinfo2(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - mm_segment_t old_fs = get_fs(); - struct ncp_fs_info_v2_32 n32; - struct ncp_fs_info_v2 n; - int err; - - if (copy_from_user(&n32, (struct ncp_fs_info_v2_32*)arg, sizeof(n32))) - return -EFAULT; - if (n32.version != NCP_GET_FS_INFO_VERSION_V2) - return -EINVAL; - n.version = NCP_GET_FS_INFO_VERSION_V2; - - set_fs(KERNEL_DS); - err = sys_ioctl(fd, NCP_IOC_GET_FS_INFO_V2, (unsigned long)&n); - set_fs(old_fs); - - if (!err) { - n32.version = n.version; - n32.mounted_uid = n.mounted_uid; - n32.connection = n.connection; - n32.buffer_size = n.buffer_size; - n32.volume_number = n.volume_number; - n32.directory_id = n.directory_id; - n32.dummy1 = n.dummy1; - n32.dummy2 = n.dummy2; - n32.dummy3 = n.dummy3; - err = copy_to_user((struct ncp_fs_info_v2_32*)arg, &n32, sizeof(n32)) ? -EFAULT : 0; - } - return err; -} - -static int do_ncp_getobjectname(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_objectname_ioctl_32 n32; - struct ncp_objectname_ioctl n; - mm_segment_t old_fs; - int err; - size_t tl; - - if (copy_from_user(&n32, (struct ncp_objectname_ioctl_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.object_name_len = tl = n32.object_name_len; - if (tl) { - n.object_name = kmalloc(tl, GFP_KERNEL); - if (!n.object_name) - return -ENOMEM; - } else { - n.object_name = NULL; - } - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_GETOBJECTNAME, (unsigned long)&n); - set_fs (old_fs); - if(err) - goto out; - - if (tl > n.object_name_len) - tl = n.object_name_len; - - err = -EFAULT; - if (tl && copy_to_user(A(n32.object_name), n.object_name, tl)) - goto out; - - n32.auth_type = n.auth_type; - n32.object_name_len = n.object_name_len; - - if (copy_to_user((struct ncp_objectname_ioctl_32*)arg, &n32, sizeof(n32))) - goto out; - - err = 0; - out: - if (n.object_name) - kfree(n.object_name); - - return err; -} - -static int do_ncp_setobjectname(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_objectname_ioctl_32 n32; - struct ncp_objectname_ioctl n; - mm_segment_t old_fs; - int err; - size_t tl; - - if (copy_from_user(&n32, (struct ncp_objectname_ioctl_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.auth_type = n32.auth_type; - n.object_name_len = tl = n32.object_name_len; - if (tl) { - n.object_name = kmalloc(tl, GFP_KERNEL); - if (!n.object_name) - return -ENOMEM; - err = -EFAULT; - if (copy_from_user(n.object_name, A(n32.object_name), tl)) - goto out; - } else { - n.object_name = NULL; - } - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_SETOBJECTNAME, (unsigned long)&n); - set_fs (old_fs); - - out: - if (n.object_name) - kfree(n.object_name); - - return err; -} - -static int do_ncp_getprivatedata(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_privatedata_ioctl_32 n32; - struct ncp_privatedata_ioctl n; - mm_segment_t old_fs; - int err; - size_t tl; - - if (copy_from_user(&n32, (struct ncp_privatedata_ioctl_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.len = tl = n32.len; - if (tl) { - n.data = kmalloc(tl, GFP_KERNEL); - if (!n.data) - return -ENOMEM; - } else { - n.data = NULL; - } - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_GETPRIVATEDATA, (unsigned long)&n); - set_fs (old_fs); - if(err) - goto out; - - if (tl > n.len) - tl = n.len; - - err = -EFAULT; - if (tl && copy_to_user(A(n32.data), n.data, tl)) - goto out; - - n32.len = n.len; - - if (copy_to_user((struct ncp_privatedata_ioctl_32*)arg, &n32, sizeof(n32))) - goto out; - - err = 0; - out: - if (n.data) - kfree(n.data); - - return err; -} - -static int do_ncp_setprivatedata(unsigned int fd, unsigned int cmd, unsigned long arg) -{ - struct ncp_privatedata_ioctl_32 n32; - struct ncp_privatedata_ioctl n; - mm_segment_t old_fs; - int err; - size_t tl; - - if (copy_from_user(&n32, (struct ncp_privatedata_ioctl_32*)arg, - sizeof(n32))) - return -EFAULT; - - n.len = tl = n32.len; - if (tl) { - n.data = kmalloc(tl, GFP_KERNEL); - if (!n.data) - return -ENOMEM; - err = -EFAULT; - if (copy_from_user(n.data, A(n32.data), tl)) - goto out; - } else { - n.data = NULL; - } - - old_fs = get_fs(); set_fs (KERNEL_DS); - err = sys_ioctl (fd, NCP_IOC_SETPRIVATEDATA, (unsigned long)&n); - set_fs (old_fs); - - out: - if (n.data) - kfree(n.data); - - return err; -} - #if defined(CONFIG_DRM) || defined(CONFIG_DRM_MODULE) /* This really belongs in include/linux/drm.h -DaveM */ #include "../../../drivers/char/drm/drm.h" @@ -1070,18 +770,6 @@ COMPATIBLE_IOCTL(AUDIO_GETDEV_SUNOS) COMPATIBLE_IOCTL(AUDIO_FLUSH) COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE_MULTI) -/* NCP ioctls which do not need any translations */ -COMPATIBLE_IOCTL(NCP_IOC_CONN_LOGGED_IN) -COMPATIBLE_IOCTL(NCP_IOC_SIGN_INIT) -COMPATIBLE_IOCTL(NCP_IOC_SIGN_WANTED) -COMPATIBLE_IOCTL(NCP_IOC_SET_SIGN_WANTED) -COMPATIBLE_IOCTL(NCP_IOC_LOCKUNLOCK) -COMPATIBLE_IOCTL(NCP_IOC_GETROOT) -COMPATIBLE_IOCTL(NCP_IOC_SETROOT) -COMPATIBLE_IOCTL(NCP_IOC_GETCHARSETS) -COMPATIBLE_IOCTL(NCP_IOC_SETCHARSETS) -COMPATIBLE_IOCTL(NCP_IOC_GETDENTRYTTL) -COMPATIBLE_IOCTL(NCP_IOC_SETDENTRYTTL) #if defined(CONFIG_DRM) || defined(CONFIG_DRM_MODULE) COMPATIBLE_IOCTL(DRM_IOCTL_GET_MAGIC) COMPATIBLE_IOCTL(DRM_IOCTL_IRQ_BUSID) @@ -1107,14 +795,6 @@ COMPATIBLE_IOCTL(WIOCSTOP) COMPATIBLE_IOCTL(WIOCGSTAT) /* And these ioctls need translation */ -/* NCPFS */ -HANDLE_IOCTL(NCP_IOC_NCPREQUEST_32, do_ncp_ncprequest) -HANDLE_IOCTL(NCP_IOC_GETMOUNTUID2_32, do_ncp_getmountuid2) -HANDLE_IOCTL(NCP_IOC_GET_FS_INFO_V2_32, do_ncp_getfsinfo2) -HANDLE_IOCTL(NCP_IOC_GETOBJECTNAME_32, do_ncp_getobjectname) -HANDLE_IOCTL(NCP_IOC_SETOBJECTNAME_32, do_ncp_setobjectname) -HANDLE_IOCTL(NCP_IOC_GETPRIVATEDATA_32, do_ncp_getprivatedata) -HANDLE_IOCTL(NCP_IOC_SETPRIVATEDATA_32, do_ncp_setprivatedata) /* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */ HANDLE_IOCTL(FBIOPUTCMAP32, fbiogetputcmap) HANDLE_IOCTL(FBIOGETCMAP32, fbiogetputcmap) diff -Nru a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c --- a/drivers/block/ll_rw_blk.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/block/ll_rw_blk.c 2004-05-26 15:01:35 -07:00 @@ -2824,19 +2824,13 @@ panic("Failed to create kblockd\n"); request_cachep = kmem_cache_create("blkdev_requests", - sizeof(struct request), 0, 0, NULL, NULL); - if (!request_cachep) - panic("Can't create request pool slab cache\n"); + sizeof(struct request), 0, SLAB_PANIC, NULL, NULL); requestq_cachep = kmem_cache_create("blkdev_queue", - sizeof(request_queue_t), 0, 0, NULL, NULL); - if (!requestq_cachep) - panic("Can't create request queue slab cache\n"); + sizeof(request_queue_t), 0, SLAB_PANIC, NULL, NULL); iocontext_cachep = kmem_cache_create("blkdev_ioc", - sizeof(struct io_context), 0, 0, NULL, NULL); - if (!iocontext_cachep) - panic("Can't create io context slab cache\n"); + sizeof(struct io_context), 0, SLAB_PANIC, NULL, NULL); blk_max_low_pfn = max_low_pfn; blk_max_pfn = max_pfn; diff -Nru a/drivers/block/viodasd.c b/drivers/block/viodasd.c --- a/drivers/block/viodasd.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/block/viodasd.c 2004-05-26 15:01:35 -07:00 @@ -40,8 +40,11 @@ #include <linux/string.h> #include <linux/dma-mapping.h> #include <linux/completion.h> +#include <linux/device.h> +#include <linux/kernel.h> #include <asm/uaccess.h> +#include <asm/vio.h> #include <asm/iSeries/HvTypes.h> #include <asm/iSeries/HvLpEvent.h> #include <asm/iSeries/HvLpConfig.h> @@ -519,13 +522,6 @@ "bad rc sending event to OS/400 %d\n", (int)hvrc); return; } - printk(VIOD_KERN_INFO "disk %d: %lu sectors (%lu MB) " - "CHS=%d/%d/%d sector size %d%s\n", - dev_no, (unsigned long)(d->size >> 9), - (unsigned long)(d->size >> 20), - (int)d->cylinders, (int)d->tracks, - (int)d->sectors, (int)d->bytes_per_sector, - d->read_only ? " (RO)" : ""); /* create the request queue for the disk */ spin_lock_init(&d->q_lock); q = blk_init_queue(do_viodasd_request, &d->q_lock); @@ -563,6 +559,14 @@ g->private_data = d; set_capacity(g, d->size >> 9); + printk(VIOD_KERN_INFO "disk %d: %lu sectors (%lu MB) " + "CHS=%d/%d/%d sector size %d%s\n", + dev_no, (unsigned long)(d->size >> 9), + (unsigned long)(d->size >> 20), + (int)d->cylinders, (int)d->tracks, + (int)d->sectors, (int)d->bytes_per_sector, + d->read_only ? " (RO)" : ""); + /* register us in the global list */ add_disk(g); } @@ -725,6 +729,26 @@ } /* + * Get the driver to reprobe for more disks. + */ +static ssize_t probe_disks(struct device_driver *drv, const char *buf, + size_t count) +{ + struct viodasd_device *d; + + for (d = viodasd_devices; d < &viodasd_devices[MAX_DISKNO]; d++) { + if (d->disk == NULL) + probe_disk(d); + } + return count; +} +static DRIVER_ATTR(probe, S_IWUSR, NULL, probe_disks) + +static struct vio_driver viodasd_driver = { + .name = "viodasd" +}; + +/* * Initialize the whole device driver. Handle module and non-module * versions */ @@ -767,6 +791,9 @@ for (i = 0; i < MAX_DISKNO; i++) probe_disk(&viodasd_devices[i]); + vio_register_driver(&viodasd_driver); /* FIX ME - error checking */ + driver_create_file(&viodasd_driver.driver, &driver_attr_probe); + return 0; } module_init(viodasd_init); @@ -775,6 +802,9 @@ { int i; struct viodasd_device *d; + + driver_remove_file(&viodasd_driver.driver, &driver_attr_probe); + vio_unregister_driver(&viodasd_driver); for (i = 0; i < MAX_DISKNO; i++) { d = &viodasd_devices[i]; diff -Nru a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c --- a/drivers/bluetooth/bt3c_cs.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/bluetooth/bt3c_cs.c 2004-05-26 15:01:36 -07:00 @@ -491,6 +491,9 @@ static struct device bt3c_device = { .bus_id = "pcmcia", + .kobj = { + .k_name = "bt3c" + } }; diff -Nru a/drivers/bluetooth/hci_bcsp.c b/drivers/bluetooth/hci_bcsp.c --- a/drivers/bluetooth/hci_bcsp.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/bluetooth/hci_bcsp.c 2004-05-26 15:01:36 -07:00 @@ -33,7 +33,6 @@ #include <linux/config.h> #include <linux/module.h> -#include <linux/config.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/sched.h> diff -Nru a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c --- a/drivers/input/serio/sa1111ps2.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/input/serio/sa1111ps2.c 2004-05-26 15:01:36 -07:00 @@ -45,7 +45,6 @@ { struct ps2if *ps2if = dev_id; unsigned int scancode, flag, status; - int handled = IRQ_NONE; status = sa1111_readl(ps2if->base + SA1111_PS2STAT); while (status & PS2STAT_RXF) { @@ -63,11 +62,9 @@ serio_interrupt(&ps2if->io, scancode, flag, regs); status = sa1111_readl(ps2if->base + SA1111_PS2STAT); - - handled = IRQ_HANDLED; } - return handled; + return IRQ_HANDLED; } /* diff -Nru a/drivers/media/video/ir-kbd-gpio.c b/drivers/media/video/ir-kbd-gpio.c --- a/drivers/media/video/ir-kbd-gpio.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/media/video/ir-kbd-gpio.c 2004-05-26 15:01:36 -07:00 @@ -64,7 +64,7 @@ [ 13 ] = KEY_STOP, // freeze [ 29 ] = KEY_RECORD, // capture [ 3 ] = KEY_PLAY, // unmarked - [ 24 ] = KEY_RED, // unmarked + [ 23 ] = KEY_RED, // unmarked [ 7 ] = KEY_GREEN, // unmarked #if 0 diff -Nru a/drivers/media/video/mxb.c b/drivers/media/video/mxb.c --- a/drivers/media/video/mxb.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/media/video/mxb.c 2004-05-26 15:01:35 -07:00 @@ -24,42 +24,15 @@ #define DEBUG_VARIABLE debug #include <media/saa7146_vv.h> -#include <linux/video_decoder.h> /* for saa7111a */ +#include <media/tuner.h> +#include <linux/video_decoder.h> #include "mxb.h" #include "tea6415c.h" #include "tea6420.h" #include "tda9840.h" -#include <media/tuner.h> -#define I2C_SAA7111A 0x24 - -/* All unused bytes are reserverd. */ -#define SAA711X_CHIP_VERSION 0x00 -#define SAA711X_ANALOG_INPUT_CONTROL_1 0x02 -#define SAA711X_ANALOG_INPUT_CONTROL_2 0x03 -#define SAA711X_ANALOG_INPUT_CONTROL_3 0x04 -#define SAA711X_ANALOG_INPUT_CONTROL_4 0x05 -#define SAA711X_HORIZONTAL_SYNC_START 0x06 -#define SAA711X_HORIZONTAL_SYNC_STOP 0x07 -#define SAA711X_SYNC_CONTROL 0x08 -#define SAA711X_LUMINANCE_CONTROL 0x09 -#define SAA711X_LUMINANCE_BRIGHTNESS 0x0A -#define SAA711X_LUMINANCE_CONTRAST 0x0B -#define SAA711X_CHROMA_SATURATION 0x0C -#define SAA711X_CHROMA_HUE_CONTROL 0x0D -#define SAA711X_CHROMA_CONTROL 0x0E -#define SAA711X_FORMAT_DELAY_CONTROL 0x10 -#define SAA711X_OUTPUT_CONTROL_1 0x11 -#define SAA711X_OUTPUT_CONTROL_2 0x12 -#define SAA711X_OUTPUT_CONTROL_3 0x13 -#define SAA711X_V_GATE_1_START 0x15 -#define SAA711X_V_GATE_1_STOP 0x16 -#define SAA711X_V_GATE_1_MSB 0x17 -#define SAA711X_TEXT_SLICER_STATUS 0x1A -#define SAA711X_DECODED_BYTES_OF_TS_1 0x1B -#define SAA711X_DECODED_BYTES_OF_TS_2 0x1C -#define SAA711X_STATUS_BYTE 0x1F +#define I2C_SAA7111 0x24 #define MXB_BOARD_CAN_DO_VBI(dev) (dev->revision != 0) @@ -175,42 +148,33 @@ static struct saa7146_extension extension; -static int mxb_vbi_bypass(struct saa7146_dev* dev) -{ - struct mxb* mxb = (struct mxb*)dev->ext_priv; - s32 byte = 0x0; - int result = 0; - - DEB_EE(("dev:%p\n",dev)); - - /* switch bypass in saa7111a, this should be done in the - saa7111a driver of course... */ - if ( -1 == (result = i2c_smbus_read_byte_data(mxb->saa7111a, SAA711X_OUTPUT_CONTROL_3))) { - DEB_D(("could not read from saa7111a.\n")); - return -EFAULT; - } - byte = result; - byte &= 0xf0; - byte |= 0x0a; - - if ( 0 != (result = i2c_smbus_write_byte_data(mxb->saa7111a, SAA711X_OUTPUT_CONTROL_3, byte))) { - DEB_D(("could not write to saa7111a.\n")); - return -EFAULT; - } - return 0; -} - static int mxb_probe(struct saa7146_dev* dev) { struct mxb* mxb = 0; struct i2c_client *client; struct list_head *item; + int result; - request_module("tuner"); - request_module("tea6420"); - request_module("tea6415c"); - request_module("tda9840"); - request_module("saa7111"); + if ((result = request_module("saa7111")) < 0) { + printk("mxb: saa7111 i2c module not available.\n"); + return -ENODEV; + } + if ((result = request_module("tuner")) < 0) { + printk("mxb: tuner i2c module not available.\n"); + return -ENODEV; + } + if ((result = request_module("tea6420")) < 0) { + printk("mxb: tea6420 i2c module not available.\n"); + return -ENODEV; + } + if ((result = request_module("tea6415c")) < 0) { + printk("mxb: tea6415c i2c module not available.\n"); + return -ENODEV; + } + if ((result = request_module("tda9840")) < 0) { + printk("mxb: tda9840 i2c module not available.\n"); + return -ENODEV; + } mxb = (struct mxb*)kmalloc(sizeof(struct mxb), GFP_KERNEL); if( NULL == mxb ) { @@ -219,10 +183,6 @@ } memset(mxb, 0x0, sizeof(struct mxb)); - /* FIXME: enable i2c-port pins, video-port-pins - video port pins should be enabled here ?! */ - saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26)); - saa7146_i2c_adapter_prepare(dev, &mxb->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); if(i2c_add_adapter(&mxb->i2c_adapter) < 0) { DEB_S(("cannot register i2c-device. skipping.\n")); @@ -241,7 +201,7 @@ mxb->tea6415c = client; if( I2C_TDA9840 == client->addr ) mxb->tda9840 = client; - if( I2C_SAA7111A == client->addr ) + if( I2C_SAA7111 == client->addr ) mxb->saa7111a = client; if( 0x60 == client->addr ) mxb->tuner = client; @@ -251,8 +211,7 @@ if( 0 == mxb->tea6420_1 || 0 == mxb->tea6420_2 || 0 == mxb->tea6415c || 0 == mxb->tda9840 || 0 == mxb->saa7111a || 0 == mxb->tuner ) { - printk("mxb: did not find all i2c devices. are you sure you\n"); - printk("mxb: insmod'ed tea6420, tea6415c, saa7111, tea6415c and tuner?\n"); + printk("mxb: did not find all i2c devices. aborting\n"); i2c_del_adapter(&mxb->i2c_adapter); kfree(mxb); return -ENODEV; @@ -322,37 +281,35 @@ {-1, { 0} } }; -static unsigned char mxb_saa7111_init[25] = { - 0x00, - - 0x00, /* 00 - ID byte */ - 0x00, /* 01 - reserved */ +static const unsigned char mxb_saa7111_init[] = { + 0x00, 0x00, /* 00 - ID byte */ + 0x01, 0x00, /* 01 - reserved */ /*front end */ - 0xd8, /* 02 - FUSE=x, GUDL=x, MODE=x */ - 0x23, /* 03 - HLNRS=0, VBSL=1, WPOFF=0, HOLDG=0, GAFIX=0, GAI1=256, GAI2=256 */ - 0x00, /* 04 - GAI1=256 */ - 0x00, /* 05 - GAI2=256 */ + 0x02, 0xd8, /* 02 - FUSE=x, GUDL=x, MODE=x */ + 0x03, 0x23, /* 03 - HLNRS=0, VBSL=1, WPOFF=0, HOLDG=0, GAFIX=0, GAI1=256, GAI2=256 */ + 0x04, 0x00, /* 04 - GAI1=256 */ + 0x05, 0x00, /* 05 - GAI2=256 */ /* decoder */ - 0xf0, /* 06 - HSB at xx(50Hz) / xx(60Hz) pixels after end of last line */ - 0x30, /* 07 - HSS at xx(50Hz) / xx(60Hz) pixels after end of last line */ - 0xa8, /* 08 - AUFD=x, FSEL=x, EXFIL=x, VTRC=x, HPLL=x, VNOI=x */ - 0x02, /* 09 - BYPS=x, PREF=x, BPSS=x, VBLB=x, UPTCV=x, APER=x */ - 0x80, /* 0a - BRIG=128 */ - 0x47, /* 0b - CONT=1.109 */ - 0x40, /* 0c - SATN=1.0 */ - 0x00, /* 0d - HUE=0 */ - 0x01, /* 0e - CDTO=0, CSTD=0, DCCF=0, FCTC=0, CHBW=1 */ - 0x00, /* 0f - reserved */ - 0xd0, /* 10 - OFTS=x, HDEL=x, VRLN=x, YDEL=x */ - 0x8c, /* 11 - GPSW=x, CM99=x, FECO=x, COMPO=x, OEYC=1, OEHV=1, VIPB=0, COLO=0 */ - 0x80, /* 12 - xx output control 2 */ - 0x30, /* 13 - xx output control 3 */ - 0x00, /* 14 - reserved */ - 0x15, /* 15 - VBI */ - 0x04, /* 16 - VBI */ - 0x00, /* 17 - VBI */ + 0x06, 0xf0, /* 06 - HSB at xx(50Hz) / xx(60Hz) pixels after end of last line */ + 0x07, 0x30, /* 07 - HSS at xx(50Hz) / xx(60Hz) pixels after end of last line */ + 0x08, 0xa8, /* 08 - AUFD=x, FSEL=x, EXFIL=x, VTRC=x, HPLL=x, VNOI=x */ + 0x09, 0x02, /* 09 - BYPS=x, PREF=x, BPSS=x, VBLB=x, UPTCV=x, APER=x */ + 0x0a, 0x80, /* 0a - BRIG=128 */ + 0x0b, 0x47, /* 0b - CONT=1.109 */ + 0x0c, 0x40, /* 0c - SATN=1.0 */ + 0x0d, 0x00, /* 0d - HUE=0 */ + 0x0e, 0x01, /* 0e - CDTO=0, CSTD=0, DCCF=0, FCTC=0, CHBW=1 */ + 0x0f, 0x00, /* 0f - reserved */ + 0x10, 0xd0, /* 10 - OFTS=x, HDEL=x, VRLN=x, YDEL=x */ + 0x11, 0x8c, /* 11 - GPSW=x, CM99=x, FECO=x, COMPO=x, OEYC=1, OEHV=1, VIPB=0, COLO=0 */ + 0x12, 0x80, /* 12 - xx output control 2 */ + 0x13, 0x30, /* 13 - xx output control 3 */ + 0x14, 0x00, /* 14 - reserved */ + 0x15, 0x15, /* 15 - VBI */ + 0x16, 0x04, /* 16 - VBI */ + 0x17, 0x00, /* 17 - VBI */ }; /* bring hardware to a sane state. this has to be done, just in case someone @@ -362,25 +319,29 @@ static int mxb_init_done(struct saa7146_dev* dev) { struct mxb* mxb = (struct mxb*)dev->ext_priv; - + struct video_decoder_init init; struct i2c_msg msg; int i = 0, err = 0; struct tea6415c_multiplex vm; + /* select video mode in saa7111a */ + i = VIDEO_MODE_PAL; + /* fixme: currently pointless: gets overwritten by configuration below */ + mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_NORM, &i); + /* write configuration to saa7111a */ - i = i2c_master_send(mxb->saa7111a, mxb_saa7111_init, sizeof(mxb_saa7111_init)); - if (i < 0) { - printk("failed to initialize saa7111a. this should never happen.\n"); - } + init.data = mxb_saa7111_init; + init.len = sizeof(mxb_saa7111_init); + mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_INIT, &init); /* select tuner-output on saa7111a */ i = 0; mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_INPUT, &i); -// i = VIDEO_MODE_PAL; -// mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_NORM, &i); - mxb_vbi_bypass(dev); + /* enable vbi bypass */ + i = 1; + mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_VBI_BYPASS, &i); /* select a tuner type */ i = 5; @@ -538,36 +499,6 @@ return 0; } -/* hack: this should go into saa711x */ -static int saa7111_set_gpio(struct saa7146_dev *dev, int bl) -{ - struct mxb* mxb = (struct mxb*)dev->ext_priv; - s32 byte = 0x0; - int result = 0; - - DEB_EE(("dev:%p\n",dev)); - - /* get the old register contents */ - if ( -1 == (byte = i2c_smbus_read_byte_data(mxb->saa7111a, SAA711X_OUTPUT_CONTROL_1))) { - DEB_D(("could not read from saa711x\n")); - return -EFAULT; - } - - if( 0 == bl ) { - byte &= 0x7f; - } else { - byte |= 0x80; - } - - /* write register contents back */ - if ( 0 != (result = i2c_smbus_write_byte_data(mxb->saa7111a, SAA711X_OUTPUT_CONTROL_1, byte))) { - DEB_D(("could not write to saa711x\n")); - return -EFAULT; - } - - return 0; -} - static int mxb_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg) { struct saa7146_dev *dev = fh->dev; @@ -988,18 +919,22 @@ static int std_callback(struct saa7146_dev* dev, struct saa7146_standard *std) { + struct mxb* mxb = (struct mxb*)dev->ext_priv; + int zero = 0; + int one = 1; + if(V4L2_STD_PAL_I == std->id ) { DEB_D(("VIDIOC_S_STD: setting mxb for PAL_I.\n")); /* set the 7146 gpio register -- I don't know what this does exactly */ saa7146_write(dev, GPIO_CTRL, 0x00404050); /* unset the 7111 gpio register -- I don't know what this does exactly */ - saa7111_set_gpio(dev,0); + mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_GPIO, &zero); } else { DEB_D(("VIDIOC_S_STD: setting mxb for PAL/NTSC/SECAM.\n")); /* set the 7146 gpio register -- I don't know what this does exactly */ saa7146_write(dev, GPIO_CTRL, 0x00404050); /* set the 7111 gpio register -- I don't know what this does exactly */ - saa7111_set_gpio(dev,1); + mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_GPIO, &one); } return 0; } diff -Nru a/drivers/mtd/chips/sharp.c b/drivers/mtd/chips/sharp.c --- a/drivers/mtd/chips/sharp.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/mtd/chips/sharp.c 2004-05-26 15:01:36 -07:00 @@ -30,6 +30,7 @@ #include <linux/mtd/mtd.h> #include <linux/mtd/cfi.h> #include <linux/delay.h> +#include <linux/init.h> #define CMD_RESET 0xffffffff #define CMD_READ_ID 0x90909090 diff -Nru a/drivers/mtd/maps/uclinux.c b/drivers/mtd/maps/uclinux.c --- a/drivers/mtd/maps/uclinux.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/mtd/maps/uclinux.c 2004-05-26 15:01:36 -07:00 @@ -17,6 +17,7 @@ #include <linux/kernel.h> #include <linux/fs.h> #include <linux/major.h> +#include <linux/root_dev.h> #include <linux/mtd/mtd.h> #include <linux/mtd/map.h> #include <linux/mtd/partitions.h> diff -Nru a/drivers/net/8390.h b/drivers/net/8390.h --- a/drivers/net/8390.h 2004-05-26 15:01:36 -07:00 +++ b/drivers/net/8390.h 2004-05-26 15:01:36 -07:00 @@ -143,7 +143,7 @@ #define inb_p(_p) inb(_p) #define outb_p(_v,_p) outb(_v,_p) -#elif defined(CONFIG_NET_CBUS) || defined(CONFIG_NE_H8300) +#elif defined(CONFIG_NET_CBUS) || defined(CONFIG_NE_H8300) || defined(CONFIG_NE_H8300_MODULE) #define EI_SHIFT(x) (ei_local->reg_offset[x]) #else #define EI_SHIFT(x) (x) diff -Nru a/drivers/net/Kconfig b/drivers/net/Kconfig --- a/drivers/net/Kconfig 2004-05-26 15:01:36 -07:00 +++ b/drivers/net/Kconfig 2004-05-26 15:01:36 -07:00 @@ -1829,7 +1829,7 @@ controller on the Motorola ColdFire 5272 processor. config NE_H8300 - bool "NE2000 compatible support for H8/300" + tristate "NE2000 compatible support for H8/300" depends on H8300 && NET_ETHERNET help Say Y here if you want to use the NE2000 compatible diff -Nru a/drivers/net/ne-h8300.c b/drivers/net/ne-h8300.c --- a/drivers/net/ne-h8300.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/net/ne-h8300.c 2004-05-26 15:01:35 -07:00 @@ -260,8 +260,8 @@ bus_width &= 1 << ((ioaddr >> 21) & 7); ei_status.word16 = (bus_width == 0); /* temporary setting */ for(i = 0; i < 16 /*sizeof(SA_prom)*/; i++) { - SA_prom[i] = inb(ioaddr + NE_DATAPORT); - inb(ioaddr + NE_DATAPORT); /* dummy read */ + SA_prom[i] = inb_p(ioaddr + NE_DATAPORT); + inb_p(ioaddr + NE_DATAPORT); /* dummy read */ } start_page = NESM_START_PG; @@ -590,7 +590,7 @@ #ifdef MODULE -#define MAX_NE_CARDS 4 /* Max number of NE cards per module */ +#define MAX_NE_CARDS 1 /* Max number of NE cards per module */ static struct net_device *dev_ne[MAX_NE_CARDS]; static int io[MAX_NE_CARDS]; static int irq[MAX_NE_CARDS]; @@ -599,7 +599,7 @@ MODULE_PARM(io, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); MODULE_PARM(bad, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); -MODULE_PARM_DESC(io, "I/O base address(es),required"); +MODULE_PARM_DESC(io, "I/O base address(es)"); MODULE_PARM_DESC(irq, "IRQ number(s)"); MODULE_DESCRIPTION("H8/300 NE2000 Ethernet driver"); MODULE_LICENSE("GPL"); @@ -612,26 +612,35 @@ int init_module(void) { int this_dev, found = 0; + int err; for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) { struct net_device *dev = alloc_ei_netdev(); if (!dev) break; - dev->irq = irq[this_dev]; - dev->mem_end = bad[this_dev]; - dev->base_addr = io[this_dev]; - if (do_ne_probe(dev) == 0) { - if (register_netdev(dev) == 0) { - dev_ne[found++] = dev; - continue; + if (io[this_dev]) { + dev->irq = irq[this_dev]; + dev->mem_end = bad[this_dev]; + dev->base_addr = io[this_dev]; + } else { + dev->base_addr = h8300_ne_base[this_dev]; + dev->irq = h8300_ne_irq[this_dev]; + } + err = init_reg_offset(dev, dev->base_addr); + if (!err) { + if (do_ne_probe(dev) == 0) { + if (register_netdev(dev) == 0) { + dev_ne[found++] = dev; + continue; + } + cleanup_card(dev); } - cleanup_card(dev); } free_netdev(dev); if (found) break; if (io[this_dev] != 0) - printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]); + printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", dev->base_addr); else printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n"); return -ENXIO; diff -Nru a/drivers/net/tg3.c b/drivers/net/tg3.c --- a/drivers/net/tg3.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/net/tg3.c 2004-05-26 15:01:36 -07:00 @@ -56,8 +56,8 @@ #define DRV_MODULE_NAME "tg3" #define PFX DRV_MODULE_NAME ": " -#define DRV_MODULE_VERSION "3.4" -#define DRV_MODULE_RELDATE "May 14, 2004" +#define DRV_MODULE_VERSION "3.5" +#define DRV_MODULE_RELDATE "May 25, 2004" #define TG3_DEF_MAC_MODE 0 #define TG3_DEF_RX_MODE 0 @@ -128,7 +128,8 @@ /* minimum number of free TX descriptors required to wake up TX process */ #define TG3_TX_WAKEUP_THRESH (TG3_TX_RING_SIZE / 4) -#define TG3_NUM_STATS 25 /* number of ETHTOOL_GSTATS u64's */ +/* number of ETHTOOL_GSTATS u64's */ +#define TG3_NUM_STATS (sizeof(struct tg3_ethtool_stats)/sizeof(u64)) static char version[] __devinitdata = DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; @@ -216,10 +217,13 @@ struct { char string[ETH_GSTRING_LEN]; } ethtool_stats_keys[TG3_NUM_STATS] = { + { "rx_octets" }, { "rx_fragments" }, { "rx_ucast_packets" }, + { "rx_mcast_packets" }, { "rx_bcast_packets" }, { "rx_fcs_errors" }, + { "rx_align_errors" }, { "rx_xon_pause_rcvd" }, { "rx_xoff_pause_rcvd" }, { "rx_mac_ctrl_rcvd" }, @@ -229,6 +233,19 @@ { "rx_undersize_packets" }, { "rx_in_length_errors" }, { "rx_out_length_errors" }, + { "rx_64_or_less_octet_packets" }, + { "rx_65_to_127_octet_packets" }, + { "rx_128_to_255_octet_packets" }, + { "rx_256_to_511_octet_packets" }, + { "rx_512_to_1023_octet_packets" }, + { "rx_1024_to_1522_octet_packets" }, + { "rx_1523_to_2047_octet_packets" }, + { "rx_2048_to_4095_octet_packets" }, + { "rx_4096_to_8191_octet_packets" }, + { "rx_8192_to_9022_octet_packets" }, + + { "tx_octets" }, + { "tx_collisions" }, { "tx_xon_sent" }, { "tx_xoff_sent" }, @@ -239,9 +256,43 @@ { "tx_deferred" }, { "tx_excessive_collisions" }, { "tx_late_collisions" }, + { "tx_collide_2times" }, + { "tx_collide_3times" }, + { "tx_collide_4times" }, + { "tx_collide_5times" }, + { "tx_collide_6times" }, + { "tx_collide_7times" }, + { "tx_collide_8times" }, + { "tx_collide_9times" }, + { "tx_collide_10times" }, + { "tx_collide_11times" }, + { "tx_collide_12times" }, + { "tx_collide_13times" }, + { "tx_collide_14times" }, + { "tx_collide_15times" }, { "tx_ucast_packets" }, { "tx_mcast_packets" }, - { "tx_bcast_packets" } + { "tx_bcast_packets" }, + { "tx_carrier_sense_errors" }, + { "tx_discards" }, + { "tx_errors" }, + + { "dma_writeq_full" }, + { "dma_write_prioq_full" }, + { "rxbds_empty" }, + { "rx_discards" }, + { "rx_errors" }, + { "rx_threshold_hit" }, + + { "dma_readq_full" }, + { "dma_read_prioq_full" }, + { "tx_comp_queue_full" }, + + { "ring_set_send_prod_index" }, + { "ring_status_update" }, + { "nic_irqs" }, + { "nic_avoided_irqs" }, + { "nic_tx_threshold_hit" } }; static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) @@ -1053,6 +1104,8 @@ static void tg3_setup_flow_control(struct tg3 *tp, u32 local_adv, u32 remote_adv) { u32 new_tg3_flags = 0; + u32 old_rx_mode = tp->rx_mode; + u32 old_tx_mode = tp->tx_mode; if (local_adv & ADVERTISE_PAUSE_CAP) { if (local_adv & ADVERTISE_PAUSE_ASYM) { @@ -1083,10 +1136,18 @@ else tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; + if (old_rx_mode != tp->rx_mode) { + tw32_f(MAC_RX_MODE, tp->rx_mode); + } + if (new_tg3_flags & TG3_FLAG_TX_PAUSE) tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; else tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; + + if (old_tx_mode != tp->tx_mode) { + tw32_f(MAC_TX_MODE, tp->tx_mode); + } } static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex) @@ -2472,7 +2533,7 @@ static int tg3_poll(struct net_device *netdev, int *budget) { - struct tg3 *tp = netdev->priv; + struct tg3 *tp = netdev_priv(netdev); struct tg3_hw_status *sblk = tp->hw_status; unsigned long flags; int done; @@ -2554,7 +2615,7 @@ static irqreturn_t tg3_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = dev_id; - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); struct tg3_hw_status *sblk = tp->hw_status; unsigned long flags; unsigned int handled = 1; @@ -2634,7 +2695,7 @@ static void tg3_tx_timeout(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); printk(KERN_ERR PFX "%s: transmit timed out, resetting\n", dev->name); @@ -2750,7 +2811,7 @@ static int tg3_start_xmit_4gbug(struct sk_buff *skb, struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); dma_addr_t mapping; unsigned int i; u32 len, entry, base_flags, mss; @@ -2954,7 +3015,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); dma_addr_t mapping; u32 len, entry, base_flags, mss; unsigned long flags; @@ -3124,7 +3185,7 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp)) return -EINVAL; @@ -4741,7 +4802,7 @@ static int tg3_set_mac_addr(struct net_device *dev, void *p) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); struct sockaddr *addr = p; memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); @@ -5533,7 +5594,7 @@ static int tg3_open(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); int err; spin_lock_irq(&tp->lock); @@ -5836,7 +5897,7 @@ static int tg3_close(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); netif_stop_queue(dev); @@ -5921,10 +5982,13 @@ if (!hw_stats) return old_estats; + ESTAT_ADD(rx_octets); ESTAT_ADD(rx_fragments); ESTAT_ADD(rx_ucast_packets); + ESTAT_ADD(rx_mcast_packets); ESTAT_ADD(rx_bcast_packets); ESTAT_ADD(rx_fcs_errors); + ESTAT_ADD(rx_align_errors); ESTAT_ADD(rx_xon_pause_rcvd); ESTAT_ADD(rx_xoff_pause_rcvd); ESTAT_ADD(rx_mac_ctrl_rcvd); @@ -5934,7 +5998,19 @@ ESTAT_ADD(rx_undersize_packets); ESTAT_ADD(rx_in_length_errors); ESTAT_ADD(rx_out_length_errors); + ESTAT_ADD(rx_64_or_less_octet_packets); + ESTAT_ADD(rx_65_to_127_octet_packets); + ESTAT_ADD(rx_128_to_255_octet_packets); + ESTAT_ADD(rx_256_to_511_octet_packets); + ESTAT_ADD(rx_512_to_1023_octet_packets); + ESTAT_ADD(rx_1024_to_1522_octet_packets); + ESTAT_ADD(rx_1523_to_2047_octet_packets); + ESTAT_ADD(rx_2048_to_4095_octet_packets); + ESTAT_ADD(rx_4096_to_8191_octet_packets); + ESTAT_ADD(rx_8192_to_9022_octet_packets); + ESTAT_ADD(tx_octets); + ESTAT_ADD(tx_collisions); ESTAT_ADD(tx_xon_sent); ESTAT_ADD(tx_xoff_sent); ESTAT_ADD(tx_flow_control); @@ -5944,16 +6020,50 @@ ESTAT_ADD(tx_deferred); ESTAT_ADD(tx_excessive_collisions); ESTAT_ADD(tx_late_collisions); + ESTAT_ADD(tx_collide_2times); + ESTAT_ADD(tx_collide_3times); + ESTAT_ADD(tx_collide_4times); + ESTAT_ADD(tx_collide_5times); + ESTAT_ADD(tx_collide_6times); + ESTAT_ADD(tx_collide_7times); + ESTAT_ADD(tx_collide_8times); + ESTAT_ADD(tx_collide_9times); + ESTAT_ADD(tx_collide_10times); + ESTAT_ADD(tx_collide_11times); + ESTAT_ADD(tx_collide_12times); + ESTAT_ADD(tx_collide_13times); + ESTAT_ADD(tx_collide_14times); + ESTAT_ADD(tx_collide_15times); ESTAT_ADD(tx_ucast_packets); ESTAT_ADD(tx_mcast_packets); ESTAT_ADD(tx_bcast_packets); + ESTAT_ADD(tx_carrier_sense_errors); + ESTAT_ADD(tx_discards); + ESTAT_ADD(tx_errors); + + ESTAT_ADD(dma_writeq_full); + ESTAT_ADD(dma_write_prioq_full); + ESTAT_ADD(rxbds_empty); + ESTAT_ADD(rx_discards); + ESTAT_ADD(rx_errors); + ESTAT_ADD(rx_threshold_hit); + + ESTAT_ADD(dma_readq_full); + ESTAT_ADD(dma_read_prioq_full); + ESTAT_ADD(tx_comp_queue_full); + + ESTAT_ADD(ring_set_send_prod_index); + ESTAT_ADD(ring_status_update); + ESTAT_ADD(nic_irqs); + ESTAT_ADD(nic_avoided_irqs); + ESTAT_ADD(nic_tx_threshold_hit); return estats; } static struct net_device_stats *tg3_get_stats(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); struct net_device_stats *stats = &tp->net_stats; struct net_device_stats *old_stats = &tp->net_stats_prev; struct tg3_hw_stats *hw_stats = tp->hw_stats; @@ -5977,7 +6087,8 @@ get_stat64(&hw_stats->tx_octets); stats->rx_errors = old_stats->rx_errors + - get_stat64(&hw_stats->rx_errors); + get_stat64(&hw_stats->rx_errors) + + get_stat64(&hw_stats->rx_discards); stats->tx_errors = old_stats->tx_errors + get_stat64(&hw_stats->tx_errors) + get_stat64(&hw_stats->tx_mac_errors) + @@ -6044,7 +6155,7 @@ static void __tg3_set_rx_mode(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); u32 rx_mode; rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | @@ -6108,7 +6219,7 @@ static void tg3_set_rx_mode(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); spin_lock_irq(&tp->lock); __tg3_set_rx_mode(dev); @@ -6126,7 +6237,7 @@ struct ethtool_regs *regs, void *_p) { u32 *p = _p; - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); u8 *orig_p = _p; int i; @@ -6257,7 +6368,7 @@ static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); if (!(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) || tp->link_config.phy_is_low_power) @@ -6292,7 +6403,7 @@ static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); if (!(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) || tp->link_config.phy_is_low_power) @@ -6331,7 +6442,7 @@ static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); strcpy(info->driver, DRV_MODULE_NAME); strcpy(info->version, DRV_MODULE_VERSION); @@ -6340,7 +6451,7 @@ static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); wol->supported = WAKE_MAGIC; wol->wolopts = 0; @@ -6351,7 +6462,7 @@ static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); if (wol->wolopts & ~WAKE_MAGIC) return -EINVAL; @@ -6372,20 +6483,20 @@ static u32 tg3_get_msglevel(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); return tp->msg_enable; } static void tg3_set_msglevel(struct net_device *dev, u32 value) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); tp->msg_enable = value; } #if TG3_TSO_SUPPORT != 0 static int tg3_set_tso(struct net_device *dev, u32 value) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); if (!(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) { if (value) @@ -6398,7 +6509,7 @@ static int tg3_nway_reset(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); u32 bmcr; int r; @@ -6417,7 +6528,7 @@ static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); ering->rx_max_pending = TG3_RX_RING_SIZE - 1; ering->rx_mini_max_pending = 0; @@ -6431,7 +6542,7 @@ static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); if ((ering->rx_pending > TG3_RX_RING_SIZE - 1) || (ering->rx_jumbo_pending > TG3_RX_JUMBO_RING_SIZE - 1) || @@ -6462,7 +6573,7 @@ static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); epause->autoneg = (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) != 0; epause->rx_pause = (tp->tg3_flags & TG3_FLAG_PAUSE_RX) != 0; @@ -6471,7 +6582,7 @@ static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); tg3_netif_stop(tp); spin_lock_irq(&tp->lock); @@ -6499,13 +6610,13 @@ static u32 tg3_get_rx_csum(struct net_device *dev) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); return (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0; } static int tg3_set_rx_csum(struct net_device *dev, u32 data) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) { if (data != 0) @@ -6525,7 +6636,7 @@ static int tg3_set_tx_csum(struct net_device *dev, u32 data) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) { if (data != 0) @@ -6562,13 +6673,13 @@ struct ethtool_stats *estats, u64 *tmp_stats) { struct tg3 *tp = dev->priv; - memcpy(tmp_stats, &tp->estats, sizeof(tp->estats)); + memcpy(tmp_stats, tg3_get_estats(tp), sizeof(tp->estats)); } static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data; - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); int err; switch(cmd) { @@ -6608,7 +6719,7 @@ #if TG3_VLAN_TAG_USED static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); spin_lock_irq(&tp->lock); spin_lock(&tp->tx_lock); @@ -6624,7 +6735,7 @@ static void tg3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) { - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); spin_lock_irq(&tp->lock); spin_lock(&tp->tx_lock); @@ -8047,7 +8158,7 @@ dev->vlan_rx_kill_vid = tg3_vlan_rx_kill_vid; #endif - tp = dev->priv; + tp = netdev_priv(dev); tp->pdev = pdev; tp->dev = dev; tp->pm_cap = pm_cap; @@ -8268,8 +8379,10 @@ struct net_device *dev = pci_get_drvdata(pdev); if (dev) { + struct tg3 *tp = netdev_priv(dev); + unregister_netdev(dev); - iounmap((void *) ((struct tg3 *)(dev->priv))->regs); + iounmap((void *)tp->regs); free_netdev(dev); pci_release_regions(pdev); pci_disable_device(pdev); @@ -8280,7 +8393,7 @@ static int tg3_suspend(struct pci_dev *pdev, u32 state) { struct net_device *dev = pci_get_drvdata(pdev); - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); int err; if (!netif_running(dev)) @@ -8327,7 +8440,7 @@ static int tg3_resume(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); - struct tg3 *tp = dev->priv; + struct tg3 *tp = netdev_priv(dev); int err; if (!netif_running(dev)) diff -Nru a/drivers/net/tg3.h b/drivers/net/tg3.h --- a/drivers/net/tg3.h 2004-05-26 15:01:35 -07:00 +++ b/drivers/net/tg3.h 2004-05-26 15:01:35 -07:00 @@ -1845,10 +1845,13 @@ struct tg3_ethtool_stats { /* Statistics maintained by Receive MAC. */ + u64 rx_octets; u64 rx_fragments; u64 rx_ucast_packets; + u64 rx_mcast_packets; u64 rx_bcast_packets; u64 rx_fcs_errors; + u64 rx_align_errors; u64 rx_xon_pause_rcvd; u64 rx_xoff_pause_rcvd; u64 rx_mac_ctrl_rcvd; @@ -1858,8 +1861,20 @@ u64 rx_undersize_packets; u64 rx_in_length_errors; u64 rx_out_length_errors; + u64 rx_64_or_less_octet_packets; + u64 rx_65_to_127_octet_packets; + u64 rx_128_to_255_octet_packets; + u64 rx_256_to_511_octet_packets; + u64 rx_512_to_1023_octet_packets; + u64 rx_1024_to_1522_octet_packets; + u64 rx_1523_to_2047_octet_packets; + u64 rx_2048_to_4095_octet_packets; + u64 rx_4096_to_8191_octet_packets; + u64 rx_8192_to_9022_octet_packets; /* Statistics maintained by Transmit MAC. */ + u64 tx_octets; + u64 tx_collisions; u64 tx_xon_sent; u64 tx_xoff_sent; u64 tx_flow_control; @@ -1869,9 +1884,46 @@ u64 tx_deferred; u64 tx_excessive_collisions; u64 tx_late_collisions; + u64 tx_collide_2times; + u64 tx_collide_3times; + u64 tx_collide_4times; + u64 tx_collide_5times; + u64 tx_collide_6times; + u64 tx_collide_7times; + u64 tx_collide_8times; + u64 tx_collide_9times; + u64 tx_collide_10times; + u64 tx_collide_11times; + u64 tx_collide_12times; + u64 tx_collide_13times; + u64 tx_collide_14times; + u64 tx_collide_15times; u64 tx_ucast_packets; u64 tx_mcast_packets; u64 tx_bcast_packets; + u64 tx_carrier_sense_errors; + u64 tx_discards; + u64 tx_errors; + + /* Statistics maintained by Receive List Placement. */ + u64 dma_writeq_full; + u64 dma_write_prioq_full; + u64 rxbds_empty; + u64 rx_discards; + u64 rx_errors; + u64 rx_threshold_hit; + + /* Statistics maintained by Send Data Initiator. */ + u64 dma_readq_full; + u64 dma_read_prioq_full; + u64 tx_comp_queue_full; + + /* Statistics maintained by Host Coalescing. */ + u64 ring_set_send_prod_index; + u64 ring_status_update; + u64 nic_irqs; + u64 nic_avoided_irqs; + u64 nic_tx_threshold_hit; }; struct tg3 { diff -Nru a/drivers/net/tokenring/olympic.c b/drivers/net/tokenring/olympic.c --- a/drivers/net/tokenring/olympic.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/net/tokenring/olympic.c 2004-05-26 15:01:36 -07:00 @@ -1806,7 +1806,7 @@ static void __exit olympic_pci_cleanup(void) { - return pci_unregister_driver(&olympic_driver) ; + pci_unregister_driver(&olympic_driver) ; } diff -Nru a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c --- a/drivers/pcmcia/cs.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/pcmcia/cs.c 2004-05-26 15:01:35 -07:00 @@ -789,9 +789,10 @@ return 1; for (i = 0; i < MAX_IO_WIN; i++) { if (s->io[i].NumPorts == 0) { - if (find_io_region(base, num, align, name, s) == 0) { + s->io[i].res = find_io_region(*base, num, align, name, s); + if (s->io[i].res) { s->io[i].Attributes = attr; - s->io[i].BasePort = *base; + s->io[i].BasePort = *base = s->io[i].res->start; s->io[i].NumPorts = s->io[i].InUse = num; break; } else @@ -801,7 +802,8 @@ /* Try to extend top of window */ try = s->io[i].BasePort + s->io[i].NumPorts; if ((*base == 0) || (*base == try)) - if (find_io_region(&try, num, 0, name, s) == 0) { + if (adjust_io_region(s->io[i].res, s->io[i].res->start, + s->io[i].res->end + num, s) == 0) { *base = try; s->io[i].NumPorts += num; s->io[i].InUse += num; @@ -810,7 +812,8 @@ /* Try to extend bottom of window */ try = s->io[i].BasePort - num; if ((*base == 0) || (*base == try)) - if (find_io_region(&try, num, 0, name, s) == 0) { + if (adjust_io_region(s->io[i].res, s->io[i].res->start - num, + s->io[i].res->end, s) == 0) { s->io[i].BasePort = *base = try; s->io[i].NumPorts += num; s->io[i].InUse += num; @@ -824,15 +827,18 @@ ioaddr_t num) { int i; - if(!(s->features & SS_CAP_STATIC_MAP)) - release_region(base, num); + for (i = 0; i < MAX_IO_WIN; i++) { if ((s->io[i].BasePort <= base) && (s->io[i].BasePort+s->io[i].NumPorts >= base+num)) { s->io[i].InUse -= num; /* Free the window if no one else is using it */ - if (s->io[i].InUse == 0) + if (s->io[i].InUse == 0) { s->io[i].NumPorts = 0; + release_resource(s->io[i].res); + kfree(s->io[i].res); + s->io[i].res = NULL; + } } } } diff -Nru a/drivers/pcmcia/cs_internal.h b/drivers/pcmcia/cs_internal.h --- a/drivers/pcmcia/cs_internal.h 2004-05-26 15:01:36 -07:00 +++ b/drivers/pcmcia/cs_internal.h 2004-05-26 15:01:36 -07:00 @@ -181,8 +181,10 @@ /* In rsrc_mgr */ void validate_mem(struct pcmcia_socket *s); -int find_io_region(ioaddr_t *base, ioaddr_t num, unsigned long align, +struct resource *find_io_region(unsigned long base, int num, unsigned long align, char *name, struct pcmcia_socket *s); +int adjust_io_region(struct resource *res, unsigned long r_start, + unsigned long r_end, struct pcmcia_socket *s); int find_mem_region(u_long *base, u_long num, u_long align, int low, char *name, struct pcmcia_socket *s); int try_irq(u_int Attributes, int irq, int specific); diff -Nru a/drivers/pcmcia/pxa2xx_lubbock.c b/drivers/pcmcia/pxa2xx_lubbock.c --- a/drivers/pcmcia/pxa2xx_lubbock.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/pcmcia/pxa2xx_lubbock.c 2004-05-26 15:01:36 -07:00 @@ -20,9 +20,11 @@ #include <linux/device.h> #include <linux/errno.h> #include <linux/init.h> +#include <linux/delay.h> #include <asm/hardware.h> #include <asm/hardware/sa1111.h> +#include <asm/mach-types.h> #include "sa1111_generic.h" @@ -30,156 +32,170 @@ lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { - unsigned long flags, gpio, misc_wr; - int ret = 1; - struct pcmcia_state new_state; - - local_irq_save(flags); - - gpio = PA_DWR; - misc_wr = LUB_MISC_WR; - - /* Lubbock uses the Maxim MAX1602, with the following connections: - * - * Socket 0 (PCMCIA): - * MAX1602 Lubbock Register - * Pin Signal - * ----- ------- ---------------------- - * A0VPP S0_PWR0 SA-1111 GPIO A<0> - * A1VPP S0_PWR1 SA-1111 GPIO A<1> - * A0VCC S0_PWR2 SA-1111 GPIO A<2> - * A1VCC S0_PWR3 SA-1111 GPIO A<3> - * VX VCC - * VY +3.3V - * 12IN +12V - * CODE +3.3V Cirrus Code, CODE = High (VY) - * - * Socket 1 (CF): - * MAX1602 Lubbock Register - * Pin Signal - * ----- ------- ---------------------- - * A0VPP GND VPP is not connected - * A1VPP GND VPP is not connected - * A0VCC S1_PWR0 MISC_WR<14> - * A1VCC S1_PWR0 MISC_WR<15> - * VX VCC - * VY +3.3V - * 12IN GND VPP is not connected - * CODE +3.3V Cirrus Code, CODE = High (VY) - * - */ - -again: - switch(skt->nr){ - case 0: - - switch(state->Vcc){ - case 0: - gpio &= ~(GPIO_bit(2) | GPIO_bit(3)); - break; - - case 33: - gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(3); - break; - - case 50: - gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(2); - break; - - default: - printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, state->Vcc); - ret = -1; - } - - switch(state->Vpp){ - case 0: - gpio &= ~(GPIO_bit(0) | GPIO_bit(1)); - break; - - case 120: - gpio = (gpio & ~(GPIO_bit(0) | GPIO_bit(1))) | GPIO_bit(1); - break; - - default: - /* REVISIT: I'm not sure about this? Is this correct? - Is it always safe or do we have potential problems - with bogus combinations of Vcc and Vpp settings? */ - if(state->Vpp == state->Vcc) - gpio = (gpio & ~(GPIO_bit(0) | GPIO_bit(1))) | GPIO_bit(0); - else { - printk(KERN_ERR "%s(): unrecognized Vpp %u\n", __FUNCTION__, state->Vpp); - ret = -1; - break; - } - } - - break; - - case 1: - switch(state->Vcc){ - case 0: - misc_wr &= ~((1 << 15) | (1 << 14)); - break; - - case 33: - misc_wr = (misc_wr & ~(1 << 15)) | (1 << 14); - gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(2); - break; - - case 50: - misc_wr = (misc_wr & ~(1 << 15)) | (1 << 14); - break; - - default: - printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, state->Vcc); - ret = -1; - break; - } - - if(state->Vpp!=state->Vcc && state->Vpp!=0){ - printk(KERN_ERR "%s(): CF slot cannot support Vpp %u\n", __FUNCTION__, state->Vpp); - ret = -1; - break; - } - - break; - - default: - ret = -1; - } - - if (ret >= 0) { - sa1111_pcmcia_configure_socket(skt, state); - LUB_MISC_WR = misc_wr; - PA_DWR = gpio; - } + unsigned int pa_dwr_mask, pa_dwr_set, misc_mask, misc_set; + int ret = 0; + + pa_dwr_mask = pa_dwr_set = misc_mask = misc_set = 0; + + /* Lubbock uses the Maxim MAX1602, with the following connections: + * + * Socket 0 (PCMCIA): + * MAX1602 Lubbock Register + * Pin Signal + * ----- ------- ---------------------- + * A0VPP S0_PWR0 SA-1111 GPIO A<0> + * A1VPP S0_PWR1 SA-1111 GPIO A<1> + * A0VCC S0_PWR2 SA-1111 GPIO A<2> + * A1VCC S0_PWR3 SA-1111 GPIO A<3> + * VX VCC + * VY +3.3V + * 12IN +12V + * CODE +3.3V Cirrus Code, CODE = High (VY) + * + * Socket 1 (CF): + * MAX1602 Lubbock Register + * Pin Signal + * ----- ------- ---------------------- + * A0VPP GND VPP is not connected + * A1VPP GND VPP is not connected + * A0VCC S1_PWR0 MISC_WR<14> + * A1VCC S1_PWR1 MISC_WR<15> + * VX VCC + * VY +3.3V + * 12IN GND VPP is not connected + * CODE +3.3V Cirrus Code, CODE = High (VY) + * + */ + + again: + switch (skt->nr) { + case 0: + pa_dwr_mask = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3; + + switch (state->Vcc) { + case 0: /* Hi-Z */ + break; + + case 33: /* VY */ + pa_dwr_set |= GPIO_A3; + break; + + case 50: /* VX */ + pa_dwr_set |= GPIO_A2; + break; + + default: + printk(KERN_ERR "%s(): unrecognized Vcc %u\n", + __FUNCTION__, state->Vcc); + ret = -1; + } + + switch (state->Vpp) { + case 0: /* Hi-Z */ + break; + + case 120: /* 12IN */ + pa_dwr_set |= GPIO_A1; + break; + + default: /* VCC */ + if (state->Vpp == state->Vcc) + pa_dwr_set |= GPIO_A0; + else { + printk(KERN_ERR "%s(): unrecognized Vpp %u\n", + __FUNCTION__, state->Vpp); + ret = -1; + break; + } + } + break; + + case 1: + misc_mask = (1 << 15) | (1 << 14); + + switch (state->Vcc) { + case 0: /* Hi-Z */ + break; + + case 33: /* VY */ + misc_set |= 1 << 15; + break; + + case 50: /* VX */ + misc_set |= 1 << 14; + break; + + default: + printk(KERN_ERR "%s(): unrecognized Vcc %u\n", + __FUNCTION__, state->Vcc); + ret = -1; + break; + } + + if (state->Vpp != state->Vcc && state->Vpp != 0) { + printk(KERN_ERR "%s(): CF slot cannot support Vpp %u\n", + __FUNCTION__, state->Vpp); + ret = -1; + break; + } + break; + + default: + ret = -1; + } + + if (ret == 0) + ret = sa1111_pcmcia_configure_socket(skt, state); + + if (ret == 0) { + lubbock_set_misc_wr(misc_mask, misc_set); + sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set); + } - if (ret > 0) { - ret = 0; #if 1 - /* - * HACK ALERT: - * We can't sense the voltage properly on Lubbock before actually - * applying some power to the socket (catch 22). - * Resense the socket Voltage Sense pins after applying socket power. - */ - sa1111_pcmcia_socket_state(skt, &new_state); - if (state->Vcc == 33 && !new_state.vs_3v && !new_state.vs_Xv) { - /* Switch to 5V, Configure socket with 5V voltage */ - PA_DWR &= ~(GPIO_bit(0) | GPIO_bit(1) | GPIO_bit(2) | GPIO_bit(3)); - PA_DDR &= ~(GPIO_bit(0) | GPIO_bit(1) | GPIO_bit(2) | GPIO_bit(3)); - /* We need to hack around the const qualifier as well to keep this - ugly workaround localized and not force it to the rest of the code. - Barf bags avaliable in the seat pocket in front of you! */ - ((socket_state_t *)state)->Vcc = 50; - ((socket_state_t *)state)->Vpp = 50; - goto again; - } + if (ret == 0 && state->Vcc == 33) { + struct pcmcia_state new_state; + + /* + * HACK ALERT: + * We can't sense the voltage properly on Lubbock before + * actually applying some power to the socket (catch 22). + * Resense the socket Voltage Sense pins after applying + * socket power. + * + * Note: It takes about 2.5ms for the MAX1602 VCC output + * to rise. + */ + mdelay(3); + + sa1111_pcmcia_socket_state(skt, &new_state); + + if (!new_state.vs_3v && !new_state.vs_Xv) { + /* + * Switch to 5V, Configure socket with 5V voltage + */ + lubbock_set_misc_wr(misc_mask, 0); + sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, 0); + + /* + * It takes about 100ms to turn off Vcc. + */ + mdelay(100); + + /* + * We need to hack around the const qualifier as + * well to keep this ugly workaround localized and + * not force it to the rest of the code. Barf bags + * avaliable in the seat pocket in front of you! + */ + ((socket_state_t *)state)->Vcc = 50; + ((socket_state_t *)state)->Vpp = 50; + goto again; + } + } #endif - } - local_irq_restore(flags); - return ret; + return ret; } static struct pcmcia_low_level lubbock_pcmcia_ops = { @@ -196,7 +212,7 @@ #include "pxa2xx_base.h" -int __init pcmcia_lubbock_init(struct device *dev) +int __init pcmcia_lubbock_init(struct sa1111_dev *sadev) { int ret = -ENODEV; @@ -205,16 +221,15 @@ * Set GPIO_A<3:0> to be outputs for the MAX1600, * and switch to standby mode. */ - PA_DWR = 0; - PA_DDR = 0; - PA_SDR = 0; - PA_SSR = 0; + sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0); + sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); + sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); /* Set CF Socket 1 power to standby mode. */ - LUB_MISC_WR &= ~(GPIO_bit(15) | GPIO_bit(14)); + lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); - dev->platform_data = &lubbock_pcmcia_ops; - ret = pxa2xx_drv_pcmcia_probe(dev); + sadev->dev.platform_data = &lubbock_pcmcia_ops; + ret = pxa2xx_drv_pcmcia_probe(&sadev->dev); } return ret; diff -Nru a/drivers/pcmcia/rsrc_mgr.c b/drivers/pcmcia/rsrc_mgr.c --- a/drivers/pcmcia/rsrc_mgr.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/pcmcia/rsrc_mgr.c 2004-05-26 15:01:36 -07:00 @@ -550,7 +550,7 @@ for (m = data->map->next; m != data->map; m = m->next) { unsigned long start = m->base; - unsigned long end = m->base + m->num; + unsigned long end = m->base + m->num - 1; /* * If the lower resources are not available, try aligning @@ -569,7 +569,7 @@ if (res->start >= res->end) break; - if ((res->start + size) <= end) + if ((res->start + size - 1) <= end) break; } @@ -580,6 +580,32 @@ res->start = res->end; } +/* + * Adjust an existing IO region allocation, but making sure that we don't + * encroach outside the resources which the user supplied. + */ +int adjust_io_region(struct resource *res, unsigned long r_start, + unsigned long r_end, struct pcmcia_socket *s) +{ + resource_map_t *m; + int ret = -ENOMEM; + + down(&rsrc_sem); + for (m = io_db.next; m != &io_db; m = m->next) { + unsigned long start = m->base; + unsigned long end = m->base + m->num - 1; + + if (start > r_start || r_end > end) + continue; + + ret = adjust_resource(res, r_start, r_end - r_start + 1); + break; + } + up(&rsrc_sem); + + return ret; +} + /*====================================================================== These find ranges of I/O ports or memory addresses that are not @@ -593,40 +619,37 @@ ======================================================================*/ -int find_io_region(ioaddr_t *base, ioaddr_t num, unsigned long align, - char *name, struct pcmcia_socket *s) +struct resource *find_io_region(unsigned long base, int num, + unsigned long align, char *name, struct pcmcia_socket *s) { struct resource *res = make_resource(0, num, IORESOURCE_IO, name); struct pcmcia_align_data data; - unsigned long min = *base; + unsigned long min = base; int ret; if (align == 0) align = 0x10000; data.mask = align - 1; - data.offset = *base & data.mask; + data.offset = base & data.mask; data.map = &io_db; + down(&rsrc_sem); #ifdef CONFIG_PCI if (s->cb_dev) { ret = pci_bus_alloc_resource(s->cb_dev->bus, res, num, 1, min, 0, pcmcia_align, &data); } else #endif - { - down(&rsrc_sem); ret = allocate_resource(&ioport_resource, res, num, min, ~0UL, 0, pcmcia_align, &data); - up(&rsrc_sem); - } + up(&rsrc_sem); if (ret != 0) { kfree(res); - } else { - *base = res->start; + res = NULL; } - return ret; + return res; } int find_mem_region(u_long *base, u_long num, u_long align, @@ -652,6 +675,7 @@ min = 0x100000UL + *base; } + down(&rsrc_sem); #ifdef CONFIG_PCI if (s->cb_dev) { ret = pci_bus_alloc_resource(s->cb_dev->bus, res, num, @@ -659,12 +683,9 @@ pcmcia_align, &data); } else #endif - { - down(&rsrc_sem); ret = allocate_resource(&iomem_resource, res, num, min, max, 0, pcmcia_align, &data); - up(&rsrc_sem); - } + up(&rsrc_sem); if (ret == 0 || low) break; low = 1; diff -Nru a/drivers/pcmcia/sa1111_generic.c b/drivers/pcmcia/sa1111_generic.c --- a/drivers/pcmcia/sa1111_generic.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/pcmcia/sa1111_generic.c 2004-05-26 15:01:35 -07:00 @@ -149,7 +149,7 @@ pcmcia_jornada720_init(&dev->dev); #endif #ifdef CONFIG_ARCH_LUBBOCK - pcmcia_lubbock_init(&dev->dev); + pcmcia_lubbock_init(dev); #endif #ifdef CONFIG_ASSABET_NEPONSET pcmcia_neponset_init(dev); diff -Nru a/drivers/pcmcia/sa1111_generic.h b/drivers/pcmcia/sa1111_generic.h --- a/drivers/pcmcia/sa1111_generic.h 2004-05-26 15:01:36 -07:00 +++ b/drivers/pcmcia/sa1111_generic.h 2004-05-26 15:01:36 -07:00 @@ -10,6 +10,6 @@ extern int pcmcia_badge4_init(struct device *); extern int pcmcia_jornada720_init(struct device *); -extern int pcmcia_lubbock_init(struct device *); +extern int pcmcia_lubbock_init(struct sa1111_dev *); extern int pcmcia_neponset_init(struct sa1111_dev *); diff -Nru a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig --- a/drivers/scsi/Kconfig 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/Kconfig 2004-05-26 15:01:36 -07:00 @@ -149,19 +149,8 @@ can say Y here to force the SCSI driver to probe for multiple LUNs. A SCSI device with multiple LUNs acts logically like multiple SCSI devices. The vast majority of SCSI devices have only one LUN, and - so most people can say N here and should in fact do so, because it - is safer. - -config SCSI_REPORT_LUNS - bool "Build with SCSI REPORT LUNS support" - depends on SCSI - default y - help - If you want support for SCSI REPORT LUNS, say Y here. - The REPORT LUNS command is useful for devices (such as disk arrays) - with large numbers of LUNs where the LUN values are not contiguous - (sparse LUN). REPORT LUNS scanning is done only for SCSI-3 devices. - Most users can safely answer N here. + so most people can say N here. The max_luns boot/module parameter + allows to override this setting. config SCSI_CONSTANTS bool "Verbose SCSI error reporting (kernel size +=12K)" @@ -363,7 +352,7 @@ # All the I2O code and drivers do not seem to be 64bit safe. config SCSI_DPT_I2O tristate "Adaptec I2O RAID support " - depends on !64BIT && SCSI && BROKEN + depends on !64BIT && SCSI help This driver supports all of Adaptec's I2O based RAID controllers as well as the DPT SmartRaid V cards. This is an Adaptec maintained diff -Nru a/drivers/scsi/NCR53c406a.c b/drivers/scsi/NCR53c406a.c --- a/drivers/scsi/NCR53c406a.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/NCR53c406a.c 2004-05-26 15:01:36 -07:00 @@ -170,7 +170,6 @@ /* Static function prototypes */ static void NCR53c406a_intr(int, void *, struct pt_regs *); static irqreturn_t do_NCR53c406a_intr(int, void *, struct pt_regs *); -static void wait_intr(void); static void chip_init(void); static void calc_port_addr(void); #ifndef IRQ_LEV @@ -665,6 +664,7 @@ return (info_msg); } +#if 0 static void wait_intr(void) { unsigned long i = jiffies + WATCHDOG; @@ -684,6 +684,7 @@ NCR53c406a_intr(0, NULL, NULL); } +#endif static int NCR53c406a_queue(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *)) { diff -Nru a/drivers/scsi/aacraid/README b/drivers/scsi/aacraid/README --- a/drivers/scsi/aacraid/README 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/aacraid/README 2004-05-26 15:01:35 -07:00 @@ -38,15 +38,19 @@ (fixed 64bit and 64G memory model, changed confusing naming convention where fibs that go to the hardware are consistently called hw_fibs and not just fibs like the name of the driver tracking structure) +Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. + Original Driver ------------------------- Adaptec Unix OEM Product Group Mailing List ------------------------- -None currently. Also note this is very different to Brian's original driver +linux-aacraid-devel@dell.com (Interested parties troll here) +http://mbserver.adaptec.com/ (Currently more Community Support than Devel Support) +Also note this is very different to Brian's original driver so don't expect him to support it. -Adaptec does support this driver. Contact either tech support or deanna bonds. +Adaptec does support this driver. Contact either tech support or Mark Salyzyn. Original by Brian Boerner February 2001 Rewritten by Alan Cox, November 2001 diff -Nru a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h --- a/drivers/scsi/aacraid/aacraid.h 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/aacraid/aacraid.h 2004-05-26 15:01:35 -07:00 @@ -1,18 +1,20 @@ -//#define dprintk(x) printk x -#define dprintk(x) +#if (!defined(dprintk)) +# define dprintk(x) +#endif /*------------------------------------------------------------------------------ * D E F I N E S *----------------------------------------------------------------------------*/ + #define MAXIMUM_NUM_CONTAINERS 31 #define MAXIMUM_NUM_ADAPTERS 8 -#define AAC_NUM_FIB 578 +#define AAC_NUM_FIB 578 //#define AAC_NUM_IO_FIB 512 -#define AAC_NUM_IO_FIB 100 +#define AAC_NUM_IO_FIB 100 -#define AAC_MAX_TARGET (MAXIMUM_NUM_CONTAINERS+1) -#define AAC_MAX_LUN (8) +#define AAC_MAX_TARGET (MAXIMUM_NUM_CONTAINERS+1) +#define AAC_MAX_LUN (8) #define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff) @@ -241,92 +243,6 @@ }; /* - * Implement our own version of these so we have 64 bit compatability - * The adapter uses these and can only handle 32 bit addresses - */ - -struct aac_list_head { - u32 next; - u32 prev; -}; - -#define AAC_INIT_LIST_HEAD(ptr) do { \ - (ptr)->next = (u32)(ulong)(ptr); \ - (ptr)->prev = (u32)(ulong)(ptr); \ -} while (0) -/** - * aac_list_empty - tests whether a list is empty - * @head: the list to test. - */ -static __inline__ int aac_list_empty(struct aac_list_head *head) -{ - return head->next == ((u32)(ulong)head); -} - -/* - * Insert a new entry between two known consecutive entries. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static __inline__ void aac_list_add(struct aac_list_head * n, - struct aac_list_head * prev, - struct aac_list_head * next) -{ - next->prev = (u32)(ulong)n; - n->next = (u32)(ulong)next; - n->prev = (u32)(ulong)prev; - prev->next = (u32)(ulong)n; -} - -/** - * list_add_tail - add a new entry - * @new: new entry to be added - * @head: list head to add it before - * - * Insert a new entry before the specified head. - * This is useful for implementing queues. - */ -static __inline__ void aac_list_add_tail(struct aac_list_head *n, struct aac_list_head *head) -{ - aac_list_add(n, (struct aac_list_head*)(ulong)(head->prev), head); -} - -/* - * Delete a list entry by making the prev/next entries - * point to each other. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static __inline__ void __aac_list_del(struct aac_list_head * p, - struct aac_list_head * n) -{ - n->prev = (u32)(ulong)p; - p->next = (u32)(ulong)n; -} - -/** - * aac_list_del - deletes entry from list. - * @entry: the element to delete from the list. - * Note: list_empty on entry does not return true after this, the entry is in an undefined state. - */ -static __inline__ void aac_list_del(struct aac_list_head *entry) -{ - __aac_list_del((struct aac_list_head*)(ulong)entry->prev,(struct aac_list_head*)(ulong) entry->next); - entry->next = entry->prev = 0; -} - -/** - * aac_list_entry - get the struct for this entry - * @ptr: the &struct list_head pointer. - * @type: the type of the struct this is embedded in. - * @member: the name of the list_struct within the struct. - */ -#define aac_list_entry(ptr, type, member) \ - ((type *)((char *)(ptr)-(ulong)(&((type *)0)->member))) - -/* * Assign type values to the FSA communication data structures */ @@ -339,11 +255,11 @@ #define FsaNormal 1 #define FsaHigh 2 - /* * Define the FIB. The FIB is the where all the requested data and * command information are put to the application on the FSA adapter. */ + struct aac_fibhdr { u32 XferState; // Current transfer state for this CCB u16 Command; // Routing information for the destination @@ -359,13 +275,9 @@ u32 _ReceiverTimeStart; // Timestamp for receipt of fib u32 _ReceiverTimeDone; // Timestamp for completion of fib } _s; - struct aac_list_head _FibLinks; // Used to link Adapter Initiated Fibs on the host -// struct list_head _FibLinks; // Used to link Adapter Initiated Fibs on the host } _u; }; -#define FibLinks _u._FibLinks - #define FIB_DATA_SIZE_IN_BYTES (512 - sizeof(struct aac_fibhdr)) @@ -558,12 +470,11 @@ spinlock_t lockdata; /* Actual lock (used only on one side of the lock) */ unsigned long SavedIrql; /* Previous IRQL when the spin lock is taken */ u32 padding; /* Padding - FIXME - can remove I believe */ - struct aac_list_head cmdq; /* A queue of FIBs which need to be prcessed by the FS thread. This is */ -// struct list_head cmdq; /* A queue of FIBs which need to be prcessed by the FS thread. This is */ - /* only valid for command queues which receive entries from the adapter. */ - struct list_head pendingq; /* A queue of outstanding fib's to the adapter. */ - u32 numpending; /* Number of entries on outstanding queue. */ - struct aac_dev * dev; /* Back pointer to adapter structure */ + struct list_head cmdq; /* A queue of FIBs which need to be prcessed by the FS thread. This is */ + /* only valid for command queues which receive entries from the adapter. */ + struct list_head pendingq; /* A queue of outstanding fib's to the adapter. */ + u32 numpending; /* Number of entries on outstanding queue. */ + struct aac_dev * dev; /* Back pointer to adapter structure */ }; /* @@ -744,7 +655,7 @@ struct semaphore wait_sem; // this is used to wait for the next fib to arrive. int wait; // Set to true when thread is in WaitForSingleObject unsigned long count; // total number of FIBs on FibList - struct aac_list_head hw_fib_list; // this holds hw_fibs which should be 32 bit addresses + struct list_head fib_list; // this holds fibs and their attachd hw_fibs }; struct fsa_scsi_hba { @@ -781,7 +692,11 @@ * Outstanding I/O queue. */ struct list_head queue; - + /* + * And for the internal issue/reply queues (we may be able + * to merge these two) + */ + struct list_head fiblink; void *data; struct hw_fib *hw_fib; /* Actual shared object */ dma_addr_t hw_fib_pa; /* physical address of hw_fib*/ @@ -836,19 +751,19 @@ /* * Supported Options */ -#define AAC_OPT_SNAPSHOT cpu_to_le32(1) -#define AAC_OPT_CLUSTERS cpu_to_le32(1<<1) -#define AAC_OPT_WRITE_CACHE cpu_to_le32(1<<2) -#define AAC_OPT_64BIT_DATA cpu_to_le32(1<<3) -#define AAC_OPT_HOST_TIME_FIB cpu_to_le32(1<<4) -#define AAC_OPT_RAID50 cpu_to_le32(1<<5) -#define AAC_OPT_4GB_WINDOW cpu_to_le32(1<<6) -#define AAC_OPT_SCSI_UPGRADEABLE cpu_to_le32(1<<7) -#define AAC_OPT_SOFT_ERR_REPORT cpu_to_le32(1<<8) -#define AAC_OPT_SUPPORTED_RECONDITION cpu_to_le32(1<<9) -#define AAC_OPT_SGMAP_HOST64 cpu_to_le32(1<<10) -#define AAC_OPT_ALARM cpu_to_le32(1<<11) -#define AAC_OPT_NONDASD cpu_to_le32(1<<12) +#define AAC_OPT_SNAPSHOT cpu_to_le32(1) +#define AAC_OPT_CLUSTERS cpu_to_le32(1<<1) +#define AAC_OPT_WRITE_CACHE cpu_to_le32(1<<2) +#define AAC_OPT_64BIT_DATA cpu_to_le32(1<<3) +#define AAC_OPT_HOST_TIME_FIB cpu_to_le32(1<<4) +#define AAC_OPT_RAID50 cpu_to_le32(1<<5) +#define AAC_OPT_4GB_WINDOW cpu_to_le32(1<<6) +#define AAC_OPT_SCSI_UPGRADEABLE cpu_to_le32(1<<7) +#define AAC_OPT_SOFT_ERR_REPORT cpu_to_le32(1<<8) +#define AAC_OPT_SUPPORTED_RECONDITION cpu_to_le32(1<<9) +#define AAC_OPT_SGMAP_HOST64 cpu_to_le32(1<<10) +#define AAC_OPT_ALARM cpu_to_le32(1<<11) +#define AAC_OPT_NONDASD cpu_to_le32(1<<12) struct aac_dev { @@ -862,11 +777,10 @@ */ dma_addr_t hw_fib_pa; struct hw_fib *hw_fib_va; - ulong fib_base_va; + struct hw_fib *aif_base_va; /* * Fib Headers */ -// dmb struct fib fibs[AAC_NUM_FIB]; /* Doing it here takes up too much from the scsi pool*/ struct fib *fibs; struct fib *free_fib; @@ -887,7 +801,6 @@ unsigned long fsrev; /* Main driver's revision number */ struct aac_init *init; /* Holds initialization info to communicate with adapter */ -// void * init_pa; /* Holds physical address of the init struct */ dma_addr_t init_pa; /* Holds physical address of the init struct */ struct pci_dev *pdev; /* Our PCI interface */ @@ -898,7 +811,7 @@ struct Scsi_Host *scsi_host_ptr; struct fsa_scsi_hba fsa_dev; - int thread_pid; + pid_t thread_pid; int cardtype; /* diff -Nru a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c --- a/drivers/scsi/aacraid/commctrl.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/aacraid/commctrl.c 2004-05-26 15:01:35 -07:00 @@ -148,7 +148,7 @@ * the list to 0. */ fibctx->count = 0; - AAC_INIT_LIST_HEAD(&fibctx->hw_fib_list); + INIT_LIST_HEAD(&fibctx->fib_list); fibctx->jiffies = jiffies/HZ; /* * Now add this context onto the adapter's @@ -179,7 +179,7 @@ { struct fib_ioctl f; struct aac_fib_context *fibctx, *aifcp; - struct hw_fib * hw_fib; + struct fib *fib; int status; struct list_head * entry; int found; @@ -222,25 +222,27 @@ * -EAGAIN */ return_fib: - if (!aac_list_empty(&fibctx->hw_fib_list)) { - struct aac_list_head * entry; + if (!list_empty(&fibctx->fib_list)) { + struct list_head * entry; /* * Pull the next fib from the fibs */ - entry = (struct aac_list_head*)(ulong)fibctx->hw_fib_list.next; - aac_list_del(entry); + entry = fibctx->fib_list.next; + list_del(entry); - hw_fib = aac_list_entry(entry, struct hw_fib, header.FibLinks); + fib = list_entry(entry, struct fib, fiblink); fibctx->count--; spin_unlock_irqrestore(&dev->fib_lock, flags); - if (copy_to_user(f.fib, hw_fib, sizeof(struct hw_fib))) { - kfree(hw_fib); + if (copy_to_user(f.fib, fib->hw_fib, sizeof(struct hw_fib))) { + kfree(fib->hw_fib); + kfree(fib); return -EFAULT; } /* * Free the space occupied by this copy of the fib. */ - kfree(hw_fib); + kfree(fib->hw_fib); + kfree(fib); status = 0; fibctx->jiffies = jiffies/HZ; } else { @@ -262,24 +264,25 @@ int aac_close_fib_context(struct aac_dev * dev, struct aac_fib_context * fibctx) { - struct hw_fib *hw_fib; + struct fib *fib; /* * First free any FIBs that have not been consumed. */ - while (!aac_list_empty(&fibctx->hw_fib_list)) { - struct aac_list_head * entry; + while (!list_empty(&fibctx->fib_list)) { + struct list_head * entry; /* * Pull the next fib from the fibs */ - entry = (struct aac_list_head*)(ulong)(fibctx->hw_fib_list.next); - aac_list_del(entry); - hw_fib = aac_list_entry(entry, struct hw_fib, header.FibLinks); + entry = fibctx->fib_list.next; + list_del(entry); + fib = list_entry(entry, struct fib, fiblink); fibctx->count--; /* * Free the space occupied by this copy of the fib. */ - kfree(hw_fib); + kfree(fib->hw_fib); + kfree(fib); } /* * Remove the Context from the AdapterFibContext List diff -Nru a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c --- a/drivers/scsi/aacraid/comminit.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/aacraid/comminit.c 2004-05-26 15:01:35 -07:00 @@ -81,9 +81,9 @@ * Adapter Fibs are the first thing allocated so that they * start page aligned */ - dev->fib_base_va = (ulong)base; + dev->aif_base_va = (struct hw_fib *)base; - init->AdapterFibsVirtualAddress = cpu_to_le32((u32)(ulong)phys); + init->AdapterFibsVirtualAddress = cpu_to_le32(0); init->AdapterFibsPhysicalAddress = cpu_to_le32((u32)phys); init->AdapterFibsSize = cpu_to_le32(fibsize); init->AdapterFibAlign = cpu_to_le32(sizeof(struct hw_fib)); @@ -94,6 +94,9 @@ * mapping system, but older Firmware did, and had *troubles* dealing * with the math overloading past 32 bits, thus we must limit this * field. + * + * FIXME: this assumes the memory is mapped zero->n, which isnt + * always true on real computers. */ if ((num_physpages << (PAGE_SHIFT - 12)) <= AAC_MAX_HOSTPHYSMEMPAGES) { init->HostPhysMemPages = @@ -140,7 +143,7 @@ q->dev = dev; INIT_LIST_HEAD(&q->pendingq); init_waitqueue_head(&q->cmdready); - AAC_INIT_LIST_HEAD(&q->cmdq); + INIT_LIST_HEAD(&q->cmdq); init_waitqueue_head(&q->qfull); spin_lock_init(&q->lockdata); q->lock = &q->lockdata; diff -Nru a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c --- a/drivers/scsi/aacraid/commsup.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/aacraid/commsup.c 2004-05-26 15:01:36 -07:00 @@ -133,13 +133,10 @@ unsigned long flags; spin_lock_irqsave(&dev->fib_lock, flags); fibptr = dev->free_fib; - while(!fibptr){ - spin_unlock_irqrestore(&dev->fib_lock, flags); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - spin_lock_irqsave(&dev->fib_lock, flags); - fibptr = dev->free_fib; - } + /* Cannot sleep here or you get hangs. Instead we did the + maths at compile time. */ + if(!fibptr) + BUG(); dev->free_fib = fibptr->next; spin_unlock_irqrestore(&dev->fib_lock, flags); /* @@ -290,7 +287,7 @@ } } -/*Command thread: * +/** * aac_queue_get - get the next free QE * @dev: Adapter * @index: Returned index @@ -450,8 +447,7 @@ * Map the fib into 32bits by using the fib number */ -// hw_fib->header.SenderFibAddress = ((u32)(fibptr-dev->fibs)) << 1; - hw_fib->header.SenderFibAddress = cpu_to_le32((u32)(ulong)fibptr->hw_fib_pa); + hw_fib->header.SenderFibAddress = cpu_to_le32(((u32)(fibptr-dev->fibs)) << 1); hw_fib->header.SenderData = (u32)(fibptr - dev->fibs); /* * Set FIB state to indicate where it came from and if we want a @@ -492,7 +488,7 @@ dprintk((KERN_DEBUG " Command = %d.\n", hw_fib->header.Command)); dprintk((KERN_DEBUG " XferState = %x.\n", hw_fib->header.XferState)); dprintk((KERN_DEBUG " hw_fib va being sent=%p\n",fibptr->hw_fib)); - dprintk((KERN_DEBUG " hw_fib pa being sent=%xl\n",(ulong)fibptr->hw_fib_pa)); + dprintk((KERN_DEBUG " hw_fib pa being sent=%lx\n",(ulong)fibptr->hw_fib_pa)); dprintk((KERN_DEBUG " fib being sent=%p\n",fibptr)); /* * Fill in the Callback and CallbackContext if we are not @@ -806,8 +802,8 @@ int aac_command_thread(struct aac_dev * dev) { - struct hw_fib *hw_fib, *newfib; - struct fib fibptr; /* for error logging */ + struct hw_fib *hw_fib, *hw_newfib; + struct fib *fib, *newfib; struct aac_queue_block *queues = dev->queues; struct aac_fib_context *fibctx; unsigned long flags; @@ -828,42 +824,44 @@ * Let the DPC know it has a place to send the AIF's to. */ dev->aif_thread = 1; - memset(&fibptr, 0, sizeof(struct fib)); add_wait_queue(&queues->queue[HostNormCmdQueue].cmdready, &wait); set_current_state(TASK_INTERRUPTIBLE); while(1) { spin_lock_irqsave(queues->queue[HostNormCmdQueue].lock, flags); - while(!aac_list_empty(&(queues->queue[HostNormCmdQueue].cmdq))) { - struct aac_list_head *entry; + while(!list_empty(&(queues->queue[HostNormCmdQueue].cmdq))) { + struct list_head *entry; struct aac_aifcmd * aifcmd; set_current_state(TASK_RUNNING); - entry = (struct aac_list_head*)(ulong)(queues->queue[HostNormCmdQueue].cmdq.next); - dprintk(("aacraid: Command thread: removing fib from cmdq (%p)\n",entry)); - aac_list_del(entry); + entry = queues->queue[HostNormCmdQueue].cmdq.next; + list_del(entry); spin_unlock_irqrestore(queues->queue[HostNormCmdQueue].lock, flags); - hw_fib = aac_list_entry(entry, struct hw_fib, header.FibLinks); + fib = list_entry(entry, struct fib, fiblink); /* * We will process the FIB here or pass it to a * worker thread that is TBD. We Really can't * do anything at this point since we don't have * anything defined for this thread to do. */ - memset(&fibptr, 0, sizeof(struct fib)); - fibptr.type = FSAFS_NTC_FIB_CONTEXT; - fibptr.size = sizeof( struct fib ); - fibptr.hw_fib = hw_fib; - fibptr.data = hw_fib->data; - fibptr.dev = dev; + hw_fib = fib->hw_fib; + memset(fib, 0, sizeof(struct fib)); + fib->type = FSAFS_NTC_FIB_CONTEXT; + fib->size = sizeof( struct fib ); + fib->hw_fib = hw_fib; + fib->data = hw_fib->data; + fib->dev = dev; /* * We only handle AifRequest fibs from the adapter. */ aifcmd = (struct aac_aifcmd *) hw_fib->data; - if (aifcmd->command == le16_to_cpu(AifCmdDriverNotify)) { - aac_handle_aif(dev, &fibptr); + if (aifcmd->command == cpu_to_le32(AifCmdDriverNotify)) { + /* Handle Driver Notify Events */ + aac_handle_aif(dev, fib); + *(u32 *)hw_fib->data = cpu_to_le32(ST_OK); + fib_adapter_complete(fib, sizeof(u32)); } else { struct list_head *entry; /* The u32 here is important and intended. We are using @@ -872,6 +870,10 @@ u32 time_now, time_last; unsigned long flagv; + /* Sniff events */ + if (aifcmd->command == cpu_to_le32(AifCmdEventNotify)) + aac_handle_aif(dev, fib); + time_now = jiffies/HZ; spin_lock_irqsave(&dev->fib_lock, flagv); @@ -893,6 +895,11 @@ */ if (fibctx->count > 20) { + /* + * It's *not* jiffies folks, + * but jiffies / HZ so do not + * panic ... + */ time_last = fibctx->jiffies; /* * Has it been > 2 minutes @@ -909,17 +916,20 @@ * Warning: no sleep allowed while * holding spinlock */ - newfib = kmalloc(sizeof(struct hw_fib), GFP_ATOMIC); - if (newfib) { + hw_newfib = kmalloc(sizeof(struct hw_fib), GFP_ATOMIC); + newfib = kmalloc(sizeof(struct fib), GFP_ATOMIC); + if (newfib && hw_newfib) { /* * Make the copy of the FIB */ - memcpy(newfib, hw_fib, sizeof(struct hw_fib)); + memcpy(hw_newfib, hw_fib, sizeof(struct hw_fib)); + memcpy(newfib, fib, sizeof(struct fib)); + newfib->hw_fib = hw_newfib; /* * Put the FIB onto the * fibctx's fibs */ - aac_list_add_tail(&newfib->header.FibLinks, &fibctx->hw_fib_list); + list_add_tail(&newfib->fiblink, &fibctx->fib_list); fibctx->count++; /* * Set the event to wake up the @@ -928,6 +938,10 @@ up(&fibctx->wait_sem); } else { printk(KERN_WARNING "aifd: didn't allocate NewFib.\n"); + if(newfib) + kfree(newfib); + if(hw_newfib) + kfree(hw_newfib); } entry = entry->next; } @@ -935,10 +949,11 @@ * Set the status of this FIB */ *(u32 *)hw_fib->data = cpu_to_le32(ST_OK); - fib_adapter_complete(&fibptr, sizeof(u32)); + fib_adapter_complete(fib, sizeof(u32)); spin_unlock_irqrestore(&dev->fib_lock, flagv); } spin_lock_irqsave(queues->queue[HostNormCmdQueue].lock, flags); + kfree(fib); } /* * There are no more AIF's diff -Nru a/drivers/scsi/aacraid/dpcsup.c b/drivers/scsi/aacraid/dpcsup.c --- a/drivers/scsi/aacraid/dpcsup.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/aacraid/dpcsup.c 2004-05-26 15:01:36 -07:00 @@ -70,12 +70,12 @@ */ while(aac_consumer_get(dev, q, &entry)) { - u32 fast ; - fast = (entry->addr & cpu_to_le32(0x01)); - hwfib = (struct hw_fib *)((char *)dev->hw_fib_va + - ((entry->addr & ~0x01) - dev->hw_fib_pa)); - fib = &dev->fibs[hwfib->header.SenderData]; - + int fast; + u32 index = le32_to_cpu(entry->addr); + fast = index & 0x01; + fib = &dev->fibs[index >> 1]; + hwfib = fib->hw_fib; + aac_consumer_free(dev, q, HostNormRespQueue); /* * Remove this fib from the Outstanding I/O queue. @@ -169,29 +169,44 @@ */ while(aac_consumer_get(dev, q, &entry)) { + struct fib fibctx; struct hw_fib * hw_fib; - hw_fib = (struct hw_fib *)((char *)dev->hw_fib_va + - ((entry->addr & ~0x01) - dev->hw_fib_pa)); - - if (dev->aif_thread) { - aac_list_add_tail(&hw_fib->header.FibLinks, &q->cmdq); + u32 index; + struct fib *fib = &fibctx; + + index = le32_to_cpu(entry->addr) / sizeof(struct hw_fib); + hw_fib = &dev->aif_base_va[index]; + + /* + * Allocate a FIB at all costs. For non queued stuff + * we can just use the stack so we are happy. We need + * a fib object in order to manage the linked lists + */ + if (dev->aif_thread) + if((fib = kmalloc(sizeof(struct fib), GFP_ATOMIC)) == NULL) + fib = &fibctx; + + memset(fib, 0, sizeof(struct fib)); + INIT_LIST_HEAD(&fib->fiblink); + fib->type = FSAFS_NTC_FIB_CONTEXT; + fib->size = sizeof(struct fib); + fib->hw_fib = hw_fib; + fib->data = hw_fib->data; + fib->dev = dev; + + + if (dev->aif_thread && fib != &fibctx) { + list_add_tail(&fib->fiblink, &q->cmdq); aac_consumer_free(dev, q, HostNormCmdQueue); wake_up_interruptible(&q->cmdready); } else { - struct fib fibctx; aac_consumer_free(dev, q, HostNormCmdQueue); spin_unlock_irqrestore(q->lock, flags); - memset(&fibctx, 0, sizeof(struct fib)); - fibctx.type = FSAFS_NTC_FIB_CONTEXT; - fibctx.size = sizeof(struct fib); - fibctx.hw_fib = hw_fib; - fibctx.data = hw_fib->data; - fibctx.dev = dev; /* * Set the status of this FIB */ *(u32 *)hw_fib->data = cpu_to_le32(ST_OK); - fib_adapter_complete(&fibctx, sizeof(u32)); + fib_adapter_complete(fib, sizeof(u32)); spin_lock_irqsave(q->lock, flags); } } diff -Nru a/drivers/scsi/aacraid/sa.c b/drivers/scsi/aacraid/sa.c --- a/drivers/scsi/aacraid/sa.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/aacraid/sa.c 2004-05-26 15:01:36 -07:00 @@ -419,6 +419,11 @@ * Start any kernel threads needed */ dev->thread_pid = kernel_thread((int (*)(void *))aac_command_thread, dev, 0); + if (dev->thread_pid < 0) { + printk(KERN_ERR "aacraid: Unable to create command thread.\n"); + return -1; + } + /* * Tell the adapter that all is configure, and it can start * accepting requests diff -Nru a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c --- a/drivers/scsi/atp870u.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/atp870u.c 2004-05-26 15:01:35 -07:00 @@ -4,6 +4,7 @@ * Copyright (C) 1997 Wu Ching Chen * 2.1.x update (C) 1998 Krzysztof G. Baranowski * 2.5.x update (C) 2002 Red Hat <alan@redhat.com> + * 2.6.x update (C) 2004 Red Hat <alan@redhat.com> * * Marcelo Tosatti <marcelo@conectiva.com.br> : SMP fixes * @@ -126,9 +127,11 @@ /* * Issue more commands */ + spin_lock_irqsave(dev->host->host_lock, flags); if (((dev->quhdu != dev->quendu) || (dev->last_cmd != 0xff)) && (dev->in_snd == 0)) { send_s870(host); } + spin_unlock_irqrestore(dev->host->host_lock, flags); /* * Done */ @@ -371,9 +374,11 @@ /* * If there is stuff to send and nothing going then send it */ + spin_lock_irqsave(dev->host->host_lock, flags); if (((dev->last_cmd != 0xff) || (dev->quhdu != dev->quendu)) && (dev->in_snd == 0)) { send_s870(host); } + spin_unlock_irqrestore(dev->host->host_lock, flags); dev->in_int = 0; goto out; } @@ -443,9 +448,16 @@ return IRQ_HANDLED; } +/** + * atp870u_queuecommand - Queue SCSI command + * @req_p: request block + * @done: completion function + * + * Queue a command to the ATP queue. Called with the host lock held. + */ + static int atp870u_queuecommand(Scsi_Cmnd * req_p, void (*done) (Scsi_Cmnd *)) { - unsigned long flags; unsigned short int m; unsigned int tmport; struct Scsi_Host *host; @@ -484,7 +496,6 @@ * Count new command */ - spin_lock_irqsave(host->host_lock, flags); dev->quendu++; if (dev->quendu >= qcnt) { dev->quendu = 0; @@ -498,24 +509,31 @@ } dev->quendu--; req_p->result = 0x00020000; - spin_unlock_irqrestore(host->host_lock, flags); done(req_p); return 0; } dev->querequ[dev->quendu] = req_p; tmport = dev->ioport + 0x1c; - spin_unlock_irqrestore(host->host_lock, flags); if ((inb(tmport) == 0) && (dev->in_int == 0) && (dev->in_snd == 0)) { send_s870(host); } return 0; } +/** + * send_s870 - send a command to the controller + * @host: host + * + * On entry there is work queued to be done. We move some of that work to the + * controller itself. + * + * Caller holds the host lock. + */ + static void send_s870(struct Scsi_Host *host) { unsigned int tmport; Scsi_Cmnd *workrequ; - unsigned long flags; unsigned int i; unsigned char j, target_id; unsigned char *prd; @@ -527,10 +545,7 @@ struct atp_unit *dev = (struct atp_unit *)&host->hostdata; int sg_count; - spin_lock_irqsave(host->host_lock, flags); - if (dev->in_snd != 0) { - spin_unlock_irqrestore(host->host_lock, flags); return; } dev->in_snd = 1; @@ -543,13 +558,11 @@ dev->last_cmd = 0xff; if (dev->quhdu == dev->quendu) { dev->in_snd = 0; - spin_unlock_irqrestore(dev->host->host_lock, flags); return; } } if ((dev->last_cmd != 0xff) && (dev->working != 0)) { dev->in_snd = 0; - spin_unlock_irqrestore(dev->host->host_lock, flags); return; } dev->working++; @@ -567,7 +580,6 @@ dev->quhdu = j; dev->working--; dev->in_snd = 0; - spin_unlock_irqrestore(host->host_lock, flags); return; cmd_subp: workportu = dev->ioport; @@ -582,7 +594,6 @@ abortsnd: dev->last_cmd |= 0x40; dev->in_snd = 0; - spin_unlock_irqrestore(dev->host->host_lock, flags); return; oktosend: memcpy(&dev->ata_cdbu[0], &workrequ->cmnd[0], workrequ->cmd_len); @@ -684,7 +695,6 @@ dev->last_cmd |= 0x40; } dev->in_snd = 0; - spin_unlock_irqrestore(host->host_lock, flags); return; } tmpcip = dev->pciport; @@ -770,7 +780,6 @@ dev->last_cmd |= 0x40; } dev->in_snd = 0; - spin_unlock_irqrestore(host->host_lock, flags); return; } if (inb(tmport) == 0) { @@ -781,9 +790,6 @@ dev->last_cmd |= 0x40; } dev->in_snd = 0; - spin_unlock_irqrestore(host->host_lock, flags); - return; - } static unsigned char fun_scam(struct atp_unit *dev, unsigned short int *val) diff -Nru a/drivers/scsi/dc390.h b/drivers/scsi/dc390.h --- a/drivers/scsi/dc390.h 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/dc390.h 2004-05-26 15:01:35 -07:00 @@ -19,7 +19,7 @@ #endif #define DC390_BANNER "Tekram DC390/AM53C974" -#define DC390_VERSION "2.0f 2000-12-20" +#define DC390_VERSION "2.1b 2004-04-13" /* We don't have eh_abort_handler, eh_device_reset_handler, * eh_bus_reset_handler, eh_host_reset_handler yet! @@ -33,11 +33,11 @@ # define USE_NEW_EH #endif -extern int DC390_detect(Scsi_Host_Template *psht); -extern int DC390_queue_command(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *)); -extern int DC390_abort(Scsi_Cmnd *cmd); -extern int DC390_reset(Scsi_Cmnd *cmd); -extern int DC390_bios_param(struct scsi_device *sdev, struct block_device *dev, +static int DC390_detect(Scsi_Host_Template *psht); +static int DC390_queue_command(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *)); +static int DC390_abort(Scsi_Cmnd *cmd); +static int DC390_reset(Scsi_Cmnd *cmd); +static int DC390_bios_param(struct scsi_device *sdev, struct block_device *dev, sector_t capacity, int geom[]); static int DC390_release(struct Scsi_Host *); diff -Nru a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c --- a/drivers/scsi/dpt_i2o.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/dpt_i2o.c 2004-05-26 15:01:36 -07:00 @@ -20,17 +20,21 @@ * (at your option) any later version. * * * ***************************************************************************/ +/*************************************************************************** + * Sat Dec 20 2003 Go Taniguchi <go@turbolinux.co.jp> + - Support 2.6 kernel and DMA-mapping + - ioctl fix for raid tools + - use schedule_timeout in long long loop + **************************************************************************/ -//#define DEBUG 1 -//#define UARTDELAY 1 +/*#define DEBUG 1 */ +/*#define UARTDELAY 1 */ -// On the real kernel ADDR32 should always be zero for 2.4. GFP_HIGH allocates -// high pages. Keep the macro around because of the broken unmerged ia64 tree +/* On the real kernel ADDR32 should always be zero for 2.4. GFP_HIGH allocates + high pages. Keep the macro around because of the broken unmerged ia64 tree */ #define ADDR32 (0) -#error Please convert me to Documentation/DMA-mapping.txt - #include <linux/version.h> #include <linux/module.h> @@ -53,6 +57,7 @@ #include <linux/kernel.h> /* for printk */ #include <linux/sched.h> #include <linux/reboot.h> +#include <linux/spinlock.h> #include <linux/smp_lock.h> #include <linux/timer.h> @@ -85,7 +90,7 @@ #elif defined(__alpha__) PROC_ALPHA , #else - (-1),(-1) + (-1),(-1), #endif FT_HBADRVR, 0, OEM_DPT, OS_LINUX, CAP_OVERLAP, DEV_ALL, ADF_ALL_SC5, 0, 0, DPT_VERSION, DPT_REVISION, DPT_SUBREVISION, @@ -226,7 +231,7 @@ /* Active IOPs now in OPERATIONAL state */ PDEBUG("HBA's in OPERATIONAL state\n"); - printk(KERN_INFO"dpti: If you have a lot of devices this could take a few minutes.\n"); + printk("dpti: If you have a lot of devices this could take a few minutes.\n"); for (pHba = hba_chain; pHba; pHba = pHba->next) { printk(KERN_INFO"%s: Reading the hardware resource table.\n", pHba->name); if (adpt_i2o_lct_get(pHba) < 0){ @@ -269,6 +274,7 @@ adpt_hba* pHba = (adpt_hba*) host->hostdata[0]; // adpt_i2o_quiesce_hba(pHba); adpt_i2o_delete_hba(pHba); + scsi_unregister(host); return 0; } @@ -339,6 +345,8 @@ if (rcode != 0) { sprintf(pHba->detail, "Adaptec I2O RAID"); printk(KERN_INFO "%s: Inquiry Error (%d)\n",pHba->name,rcode); + if (rcode != -ETIME && rcode != -EINTR) + kfree(buf); } else { memset(pHba->detail, 0, sizeof(pHba->detail)); memcpy(&(pHba->detail), "Vendor: Adaptec ", 16); @@ -347,8 +355,8 @@ memcpy(&(pHba->detail[40]), " FW: ", 4); memcpy(&(pHba->detail[44]), (u8*) &buf[32], 4); pHba->detail[48] = '\0'; /* precautionary */ + kfree(buf); } - kfree(buf); adpt_i2o_status_get(pHba); return ; } @@ -478,7 +486,7 @@ heads = 255; sectors = 63; } - cylinders = capacity / (heads * sectors); + cylinders = sector_div(capacity, heads * sectors); // Special case if CDROM if(sdev->type == 5) { // CDROM @@ -871,6 +879,9 @@ return -EINVAL; } pci_set_master(pDev); + if (pci_set_dma_mask(pDev, 0xffffffffffffffffULL) && + pci_set_dma_mask(pDev, 0xffffffffULL)) + return -EINVAL; base_addr0_phys = pci_resource_start(pDev,0); hba_map0_area_size = pci_resource_len(pDev,0); @@ -963,6 +974,7 @@ // Initializing the spinlocks spin_lock_init(&pHba->state_lock); + spin_lock_init(&adpt_post_wait_lock); if(raptorFlag == 0){ printk(KERN_INFO"Adaptec I2O RAID controller %d at %lx size=%x irq=%d\n", @@ -1064,7 +1076,7 @@ { int i; - printk(KERN_INFO"Loading Adaptec I2O RAID: Version " DPT_I2O_VERSION "\n"); + printk("Loading Adaptec I2O RAID: Version " DPT_I2O_VERSION "\n"); for (i = 0; i < DPTI_MAX_HBA; i++) { hbas[i] = NULL; } @@ -1152,12 +1164,22 @@ timeout *= HZ; if((status = adpt_i2o_post_this(pHba, msg, len)) == 0){ set_current_state(TASK_INTERRUPTIBLE); - spin_unlock_irq(pHba->host->host_lock); + if(pHba->host) + spin_unlock_irq(pHba->host->host_lock); if (!timeout) schedule(); - else + else{ + timeout = schedule_timeout(timeout); + if (timeout == 0) { + // I/O issued, but cannot get result in + // specified time. Freeing resorces is + // dangerous. + status = -ETIME; + } schedule_timeout(timeout*HZ); - spin_lock_irq(pHba->host->host_lock); + } + if(pHba->host) + spin_lock_irq(pHba->host->host_lock); } spin_lock_irq(&adpt_wq_i2o_post.lock); __remove_wait_queue(&adpt_wq_i2o_post, &wait); @@ -1209,6 +1231,8 @@ printk(KERN_WARNING"dpti%d: Timeout waiting for message frame!\n", pHba->unit); return -ETIMEDOUT; } + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } while(m == EMPTY_QUEUE); msg = (u32*) (pHba->msg_addr_virt + m); @@ -1283,6 +1307,8 @@ printk(KERN_WARNING"Timeout waiting for message!\n"); return -ETIMEDOUT; } + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } while (m == EMPTY_QUEUE); status = (u8*)kmalloc(4, GFP_KERNEL|ADDR32); @@ -1314,6 +1340,8 @@ return -ETIMEDOUT; } rmb(); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } if(*status == 0x01 /*I2O_EXEC_IOP_RESET_IN_PROGRESS*/) { @@ -1330,6 +1358,8 @@ printk(KERN_ERR "%s:Timeout waiting for IOP Reset.\n",pHba->name); return -ETIMEDOUT; } + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } while (m == EMPTY_QUEUE); // Flush the offset adpt_send_nop(pHba, m); @@ -1695,15 +1725,20 @@ } do { - spin_lock_irqsave(pHba->host->host_lock, flags); + if(pHba->host) + spin_lock_irqsave(pHba->host->host_lock, flags); // This state stops any new commands from enterring the // controller while processing the ioctl // pHba->state |= DPTI_STATE_IOCTL; // We can't set this now - The scsi subsystem sets host_blocked and // the queue empties and stops. We need a way to restart the queue rcode = adpt_i2o_post_wait(pHba, msg, size, FOREVER); + if (rcode != 0) + printk("adpt_i2o_passthru: post wait failed %d %p\n", + rcode, reply); // pHba->state &= ~DPTI_STATE_IOCTL; - spin_unlock_irqrestore(pHba->host->host_lock, flags); + if(pHba->host) + spin_unlock_irqrestore(pHba->host->host_lock, flags); } while(rcode == -ETIMEDOUT); if(rcode){ @@ -1764,10 +1799,12 @@ cleanup: - kfree (reply); + if (rcode != -ETIME && rcode != -EINTR) + kfree (reply); while(sg_index) { if(sg_list[--sg_index]) { - kfree((void*)(sg_list[sg_index])); + if (rcode != -ETIME && rcode != -EINTR) + kfree((void*)(sg_list[sg_index])); } } return rcode; @@ -1875,7 +1912,7 @@ int minor; int error = 0; adpt_hba* pHba; - ulong flags; + ulong flags = 0; minor = iminor(inode); if (minor >= DPTI_MAX_HBA){ @@ -1941,9 +1978,11 @@ break; } case I2ORESETCMD: - spin_lock_irqsave(pHba->host->host_lock, flags); + if(pHba->host) + spin_lock_irqsave(pHba->host->host_lock, flags); adpt_hba_reset(pHba); - spin_unlock_irqrestore(pHba->host->host_lock, flags); + if(pHba->host) + spin_unlock_irqrestore(pHba->host->host_lock, flags); break; case I2ORESCANCMD: adpt_rescan(pHba); @@ -1956,7 +1995,7 @@ } -static void adpt_isr(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t adpt_isr(int irq, void *dev_id, struct pt_regs *regs) { Scsi_Cmnd* cmd; adpt_hba* pHba = dev_id; @@ -1965,12 +2004,15 @@ u32 status=0; u32 context; ulong flags = 0; + int handled = 0; - if (pHba == NULL ){ + if (pHba == NULL){ printk(KERN_WARNING"adpt_isr: NULL dev_id\n"); - return; + return IRQ_NONE; } - spin_lock_irqsave(pHba->host->host_lock, flags); + if(pHba->host) + spin_lock_irqsave(pHba->host->host_lock, flags); + while( readl(pHba->irq_mask) & I2O_INTERRUPT_PENDING_B) { m = readl(pHba->reply_port); if(m == EMPTY_QUEUE){ @@ -2035,7 +2077,10 @@ wmb(); rmb(); } -out: spin_unlock_irqrestore(pHba->host->host_lock, flags); + handled = 1; +out: if(pHba->host) + spin_unlock_irqrestore(pHba->host->host_lock, flags); + return IRQ_RETVAL(handled); } static s32 adpt_scsi_to_i2o(adpt_hba* pHba, Scsi_Cmnd* cmd, struct adpt_device* d) @@ -2110,15 +2155,19 @@ /* Now fill in the SGList and command */ if(cmd->use_sg) { struct scatterlist *sg = (struct scatterlist *)cmd->request_buffer; + int sg_count = pci_map_sg(pHba->pDev, sg, cmd->use_sg, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); + + len = 0; - for(i = 0 ; i < cmd->use_sg; i++) { - *mptr++ = direction|0x10000000|sg->length; - len+=sg->length; - *mptr++ = virt_to_bus(sg->address); + for(i = 0 ; i < sg_count; i++) { + *mptr++ = direction|0x10000000|sg_dma_len(sg); + len+=sg_dma_len(sg); + *mptr++ = sg_dma_address(sg); sg++; } /* Make this an end of list */ - mptr[-2] = direction|0xD0000000|(sg-1)->length; + mptr[-2] = direction|0xD0000000|sg_dma_len(sg-1); reqlen = mptr - msg; *lenptr = len; @@ -2132,7 +2181,10 @@ reqlen = 12; } else { *mptr++ = 0xD0000000|direction|cmd->request_bufflen; - *mptr++ = virt_to_bus(cmd->request_buffer); + *mptr++ = pci_map_single(pHba->pDev, + cmd->request_buffer, + cmd->request_bufflen, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); } } @@ -2305,15 +2357,17 @@ static s32 adpt_rescan(adpt_hba* pHba) { s32 rcode; - ulong flags; + ulong flags = 0; - spin_lock_irqsave(pHba->host->host_lock, flags); + if(pHba->host) + spin_lock_irqsave(pHba->host->host_lock, flags); if ((rcode=adpt_i2o_lct_get(pHba)) < 0) goto out; if ((rcode=adpt_i2o_reparse_lct(pHba)) < 0) goto out; rcode = 0; -out: spin_unlock_irqrestore(pHba->host->host_lock, flags); +out: if(pHba->host) + spin_unlock_irqrestore(pHba->host->host_lock, flags); return rcode; } @@ -2595,6 +2649,8 @@ printk(KERN_ERR "%s: Timeout waiting for message frame!\n",pHba->name); return 2; } + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } msg = (u32*)(pHba->msg_addr_virt + m); writel( THREE_WORD_MSG_SIZE | SGL_OFFSET_0,&msg[0]); @@ -2628,6 +2684,8 @@ printk(KERN_WARNING"%s: Timeout waiting for message frame\n",pHba->name); return -ETIMEDOUT; } + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } while(m == EMPTY_QUEUE); msg=(u32 *)(pHba->msg_addr_virt+m); @@ -2663,9 +2721,10 @@ rmb(); if(time_after(jiffies,timeout)){ printk(KERN_WARNING"%s: Timeout Initializing\n",pHba->name); - kfree((void*)status); return -ETIMEDOUT; } + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } while (1); // If the command was successful, fill the fifo with our reply @@ -2743,6 +2802,8 @@ pHba->name); return -ETIMEDOUT; } + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } while(m==EMPTY_QUEUE); @@ -2769,6 +2830,8 @@ return -ETIMEDOUT; } rmb(); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(1); } // Set up our number of outbound and inbound messages @@ -3094,17 +3157,33 @@ int group, int field, void *buf, int buflen) { u16 opblk[] = { 1, 0, I2O_PARAMS_FIELD_GET, group, 1, field }; - u8 resblk[8+buflen]; /* 8 bytes for header */ + u8 *resblk; + int size; + /* 8 bytes for header */ + resblk = kmalloc(sizeof(u8) * (8+buflen), GFP_KERNEL|ADDR32); + if (resblk == NULL) { + printk(KERN_CRIT "%s: query scalar failed; Out of memory.\n", pHba->name); + return -ENOMEM; + } + if (field == -1) /* whole group */ opblk[4] = -1; size = adpt_i2o_issue_params(I2O_CMD_UTIL_PARAMS_GET, pHba, tid, - opblk, sizeof(opblk), resblk, sizeof(resblk)); + opblk, sizeof(opblk), resblk, sizeof(u8)*(8+buflen)); + if (size == -ETIME) { + printk(KERN_WARNING "%s: issue params failed; Timed out.\n", pHba->name); + return -ETIME; + } else if (size == -EINTR) { + printk(KERN_WARNING "%s: issue params failed; Interrupted.\n", pHba->name); + return -EINTR; + } memcpy(buf, resblk+8, buflen); /* cut off header */ + kfree(resblk); if (size < 0) return size; @@ -3138,6 +3217,7 @@ msg[8] = virt_to_bus(resblk); if ((wait_status = adpt_i2o_post_wait(pHba, msg, sizeof(msg), 20))) { + printk("adpt_i2o_issue_params: post_wait failed (%p)\n", resblk); return wait_status; /* -DetailedStatus */ } diff -Nru a/drivers/scsi/dpti.h b/drivers/scsi/dpti.h --- a/drivers/scsi/dpti.h 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/dpti.h 2004-05-26 15:01:35 -07:00 @@ -65,7 +65,7 @@ #include "dpt/dpti_i2o.h" #include "dpt/dpti_ioctl.h" -#define DPT_I2O_VERSION "2.4 Build 5" +#define DPT_I2O_VERSION "2.4 Build 5go" #define DPT_VERSION 2 #define DPT_REVISION '4' #define DPT_SUBREVISION '5' @@ -272,7 +272,7 @@ static void adpt_i2o_sys_shutdown(void); static int adpt_init(void); static int adpt_i2o_build_sys_table(void); -static void adpt_isr(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t adpt_isr(int irq, void *dev_id, struct pt_regs *regs); #ifdef REBOOT_NOTIFIER static int adpt_reboot_event(struct notifier_block *n, ulong code, void *p); #endif diff -Nru a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c --- a/drivers/scsi/gdth.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/gdth.c 2004-05-26 15:01:36 -07:00 @@ -4,9 +4,9 @@ * Intel Corporation: Storage RAID Controllers * * * * gdth.c * - * Copyright (C) 1995-03 ICP vortex GmbH, Achim Leubner * - * Copyright (C) 2002-03 Intel Corporation * - * Copyright (C) 2003 Adaptec Inc. * + * Copyright (C) 1995-04 ICP vortex GmbH, Achim Leubner * + * Copyright (C) 2002-04 Intel Corporation * + * Copyright (C) 2003-04 Adaptec Inc. * * <achim_leubner@adaptec.com> * * * * Additions/Fixes: * @@ -27,9 +27,42 @@ * along with this kernel; if not, write to the Free Software * * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * * - * Tested with Linux 1.2.13, ..., 2.2.20, ..., 2.4.22 * + * Linux kernel 2.2.x, 2.4.x, 2.6.x supported * * * * $Log: gdth.c,v $ + * Revision 1.73 2004/03/31 13:33:03 achim + * Special command 0xfd implemented to detect 64-bit DMA support + * + * Revision 1.72 2004/03/17 08:56:04 achim + * 64-bit DMA only enabled if FW >= x.43 + * + * Revision 1.71 2004/03/05 15:51:29 achim + * Screen service: separate message buffer, bugfixes + * + * Revision 1.70 2004/02/27 12:19:07 achim + * Bugfix: Reset bit in config (0xfe) call removed + * + * Revision 1.69 2004/02/20 09:50:24 achim + * Compatibility changes for kernels < 2.4.20 + * Bugfix screen service command size + * pci_set_dma_mask() error handling added + * + * Revision 1.68 2004/02/19 15:46:54 achim + * 64-bit DMA bugfixes + * Drive size bugfix for drives > 1TB + * + * Revision 1.67 2004/01/14 13:11:57 achim + * Tool access over /proc no longer supported + * Bugfixes IOCTLs + * + * Revision 1.66 2003/12/19 15:04:06 achim + * Bugfixes support for drives > 2TB + * + * Revision 1.65 2003/12/15 11:21:56 achim + * 64-bit DMA support added + * Support for drives > 2 TB implemented + * Kernels 2.2.x, 2.4.x, 2.6.x supported + * * Revision 1.64 2003/09/17 08:30:26 achim * EISA/ISA controller scan disabled * Command line switch probe_eisa_isa added @@ -299,10 +332,12 @@ * shared_access:N enable driver reserve/release protocol * probe_eisa_isa:Y scan for EISA/ISA controllers * probe_eisa_isa:N do not scan for EISA/ISA controllers + * force_dma32:Y use only 32 bit DMA mode + * force_dma32:N use 64 bit DMA mode, if supported * * The default values are: "gdth=disable:N,reserve_mode:1,reverse_scan:N, * max_ids:127,rescan:N,virt_ctr:N,hdr_channel:0, - * shared_access:Y,probe_eisa_isa:N". + * shared_access:Y,probe_eisa_isa:N,force_dma32:N". * Here is another example: "gdth=reserve_list:0,1,2,0,0,1,3,0,rescan:Y". * * When loading the gdth driver as a module, the same options are available. @@ -313,7 +348,7 @@ * * Default: "modprobe gdth disable=0 reserve_mode=1 reverse_scan=0 * max_ids=127 rescan=0 virt_ctr=0 hdr_channel=0 shared_access=0 - * probe_eisa_isa=0" + * probe_eisa_isa=0 force_dma32=0" * The other example: "modprobe gdth reserve_list=0,1,2,0,0,1,3,0 rescan=1". */ @@ -330,9 +365,12 @@ * phase: Service/parameter/return code special command */ -/* default: activate /proc and character device IOCTL interface */ -#define GDTH_IOCTL_PROC -#define GDTH_IOCTL_CHRDEV + +/* interrupt coalescing */ +/* #define INT_COAL */ + +/* statistics */ +#define GDTH_STATISTICS #include <linux/module.h> @@ -353,35 +391,35 @@ #ifdef GDTH_RTC #include <linux/mc146818rtc.h> #endif -#if LINUX_VERSION_CODE >= 0x020100 #include <linux/reboot.h> -#else -#include <linux/bios32.h> -#endif #include <asm/dma.h> #include <asm/system.h> #include <asm/io.h> #include <asm/uaccess.h> -#if LINUX_VERSION_CODE >= 0x020322 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) #include <linux/spinlock.h> -#elif LINUX_VERSION_CODE >= 0x02015F +#else #include <asm/spinlock.h> #endif - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) #include <linux/blkdev.h> - -#include "scsi.h" -#include "hosts.h" -#if LINUX_VERSION_CODE < 0x020503 +#else +#include <linux/blk.h> #include "sd.h" #endif +#include "scsi.h" +#include "hosts.h" #include "gdth.h" static void gdth_delay(int milliseconds); -static void gdth_eval_mapping(ulong32 size, int *cyls, int *heads, int *secs); +static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) static irqreturn_t gdth_interrupt(int irq, void *dev_id, struct pt_regs *regs); +#else +static void gdth_interrupt(int irq, void *dev_id, struct pt_regs *regs); +#endif static int gdth_sync_event(int hanum,int service,unchar index,Scsi_Cmnd *scp); static int gdth_async_event(int hanum); static void gdth_log_event(gdth_evt_data *dvr, char *buffer); @@ -419,31 +457,19 @@ static void gdth_release_event(int hanum); static int gdth_wait(int hanum,int index,ulong32 time); static int gdth_internal_cmd(int hanum,unchar service,ushort opcode,ulong32 p1, - ulong32 p2,ulong32 p3); + ulong64 p2,ulong64 p3); static int gdth_search_drives(int hanum); static int gdth_analyse_hdrive(int hanum, ushort hdrive); -static void *gdth_mmap(ulong paddr, ulong size); -static void gdth_munmap(void *addr); - static const char *gdth_ctr_name(int hanum); -#ifdef GDTH_IOCTL_CHRDEV static int gdth_open(struct inode *inode, struct file *filep); static int gdth_close(struct inode *inode, struct file *filep); static int gdth_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg); -#endif -#if LINUX_VERSION_CODE >= 0x010300 static void gdth_flush(int hanum); -#if LINUX_VERSION_CODE >= 0x020100 static int gdth_halt(struct notifier_block *nb, ulong event, void *buf); -#else -static int halt_called = FALSE; -void gdth_halt(void); -#endif -#endif #ifdef DEBUG_GDTH static unchar DebugState = DEBUG_GDTH; @@ -528,6 +554,9 @@ #ifdef GDTH_STATISTICS static ulong32 max_rq=0, max_index=0, max_sg=0; +#ifdef INT_COAL +static ulong32 max_int_coal=0; +#endif static ulong32 act_ints=0, act_ios=0, act_stats=0, act_rq=0; static struct timer_list gdth_timer; #endif @@ -542,80 +571,12 @@ #define BUS_L2P(a,b) ((b)>(a)->virt_bus ? (b-1):(b)) -#if LINUX_VERSION_CODE < 0x010300 -static void *gdth_mmap(ulong paddr, ulong size) -{ - if (paddr >= high_memory) - return NULL; - else - return (void *)paddr; -} -static void gdth_munmap(void *addr) -{ -} -inline ulong32 virt_to_phys(volatile void *addr) -{ - return (ulong32)addr; -} -inline void *phys_to_virt(ulong32 addr) -{ - return (void *)addr; -} -#define virt_to_bus virt_to_phys -#define bus_to_virt phys_to_virt -#define gdth_readb(addr) (*(volatile unchar *)(addr)) -#define gdth_readw(addr) (*(volatile ushort *)(addr)) -#define gdth_readl(addr) (*(volatile ulong32 *)(addr)) -#define gdth_writeb(b,addr) (*(volatile unchar *)(addr) = (b)) -#define gdth_writew(b,addr) (*(volatile ushort *)(addr) = (b)) -#define gdth_writel(b,addr) (*(volatile ulong32 *)(addr) = (b)) -#define memset_io(a,b,c) memset((void *)(a),(b),(c)) -#define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c)) -#define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c)) - -#define PCI_SLOT(devfn) ((devfn >> 3) & 0x1f) - -#elif LINUX_VERSION_CODE < 0x020100 -static int remapped = FALSE; -static void *gdth_mmap(ulong paddr, ulong size) -{ - if ( paddr >= high_memory) { - remapped = TRUE; - return vremap(paddr, size); - } else { - return (void *)paddr; - } -} -static void gdth_munmap(void *addr) -{ - if (remapped) - vfree(addr); - remapped = FALSE; -} -#define gdth_readb(addr) readb((ulong)(addr)) -#define gdth_readw(addr) readw((ulong)(addr)) -#define gdth_readl(addr) (ulong32)readl((ulong)(addr)) -#define gdth_writeb(b,addr) writeb((b),(ulong)(addr)) -#define gdth_writew(b,addr) writew((b),(ulong)(addr)) -#define gdth_writel(b,addr) writel((ulong32)(b),(ulong)(addr)) - -#else -static void *gdth_mmap(ulong paddr, ulong size) -{ - return ioremap(paddr, size); -} -static void gdth_munmap(void *addr) -{ - return iounmap(addr); -} #define gdth_readb(addr) readb((ulong)(addr)) #define gdth_readw(addr) readw((ulong)(addr)) #define gdth_readl(addr) (ulong32)readl((ulong)(addr)) #define gdth_writeb(b,addr) writeb((b),(ulong)(addr)) #define gdth_writew(b,addr) writew((b),(ulong)(addr)) #define gdth_writel(b,addr) writel((ulong32)(b),(ulong)(addr)) -#endif - static unchar gdth_drq_tab[4] = {5,6,7,7}; /* DRQ table */ static unchar gdth_irq_tab[6] = {0,10,11,12,14,0}; /* IRQ table */ @@ -631,9 +592,7 @@ static gdth_evt_str ebuffer[MAX_EVENTS]; /* event buffer */ static int elastidx; static int eoldidx; -#ifdef GDTH_IOCTL_CHRDEV static int major; -#endif #define DIN 1 /* IN data direction */ #define DOU 2 /* OUT data direction */ @@ -648,8 +607,8 @@ DUN,DUN,DUN,DUN,DUN,DOU,DUN,DUN,DUN,DUN,DIN,DUN,DUN,DUN,DUN,DUN, DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN, DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN, - DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN, - DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN, + DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DIN,DUN,DOU,DUN,DUN,DUN,DUN,DUN, + DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DIN,DUN, DUN,DUN,DUN,DUN,DUN,DNO,DNO,DUN,DIN,DNO,DOU,DUN,DNO,DUN,DOU,DOU, DOU,DOU,DOU,DNO,DUN,DIN,DOU,DIN,DIN,DUN,DUN,DUN,DUN,DUN,DUN,DUN, DUN,DUN,DOU,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN, @@ -659,47 +618,32 @@ }; /* __initfunc, __initdata macros */ -#if LINUX_VERSION_CODE >= 0x020322 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +#define __devinitdata +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) #define GDTH_INITFUNC(type, func) type __init func #include <linux/init.h> -#elif LINUX_VERSION_CODE >= 0x020126 +#else #define GDTH_INITFUNC(type, func) __initfunc(type func) #include <linux/init.h> -#else -#define GDTH_INITFUNC(type, func) type func -#define __initdata -#define __init #endif -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) #define GDTH_INIT_LOCK_HA(ha) spin_lock_init(&(ha)->smp_lock) #define GDTH_LOCK_HA(ha,flags) spin_lock_irqsave(&(ha)->smp_lock,flags) #define GDTH_UNLOCK_HA(ha,flags) spin_unlock_irqrestore(&(ha)->smp_lock,flags) #define GDTH_LOCK_SCSI_DONE(dev, flags) spin_lock_irqsave(dev->host_lock,flags) #define GDTH_UNLOCK_SCSI_DONE(dev, flags) spin_unlock_irqrestore(dev->host_lock,flags) -#define GDTH_LOCK_SCSI_DOCMD(dev) spin_lock_irq(dev->host_lock) -#define GDTH_UNLOCK_SCSI_DOCMD(dev) spin_unlock_irq(dev->host_lock) -#elif LINUX_VERSION_CODE >= 0x02015F +#else #define GDTH_INIT_LOCK_HA(ha) spin_lock_init(&(ha)->smp_lock) #define GDTH_LOCK_HA(ha,flags) spin_lock_irqsave(&(ha)->smp_lock,flags) #define GDTH_UNLOCK_HA(ha,flags) spin_unlock_irqrestore(&(ha)->smp_lock,flags) #define GDTH_LOCK_SCSI_DONE(flags) spin_lock_irqsave(&io_request_lock,flags) #define GDTH_UNLOCK_SCSI_DONE(flags) spin_unlock_irqrestore(&io_request_lock,flags) -#define GDTH_LOCK_SCSI_DOCMD() spin_lock_irq(&io_request_lock) -#define GDTH_UNLOCK_SCSI_DOCMD() spin_unlock_irq(&io_request_lock) - -#else -#define GDTH_INIT_LOCK_HA(ha) do {} while (0) -#define GDTH_LOCK_HA(ha,flags) do {save_flags(flags); cli();} while (0) -#define GDTH_UNLOCK_HA(ha,flags) do {restore_flags(flags);} while (0) - -#define GDTH_LOCK_SCSI_DONE(flags) do {} while (0) -#define GDTH_UNLOCK_SCSI_DONE(flags) do {} while (0) -#define GDTH_LOCK_SCSI_DOCMD() do {} while (0) -#define GDTH_UNLOCK_SCSI_DOCMD() do {} while (0) #endif /* LILO and modprobe/insmod parameters */ @@ -730,9 +674,10 @@ static int shared_access = 1; /* enable support for EISA and ISA controllers */ static int probe_eisa_isa = 0; +/* 64 bit DMA mode, support for drives > 2 TB, if force_dma32 = 0 */ +static int force_dma32 = 0; #ifdef MODULE -#if LINUX_VERSION_CODE >= 0x02011A /* parameters for modprobe/insmod */ MODULE_PARM(irq, "i"); MODULE_PARM(disable, "i"); @@ -745,41 +690,42 @@ MODULE_PARM(virt_ctr, "i"); MODULE_PARM(shared_access, "i"); MODULE_PARM(probe_eisa_isa, "i"); +MODULE_PARM(force_dma32, "i"); MODULE_AUTHOR("Achim Leubner"); -#endif -#if LINUX_VERSION_CODE >= 0x02040B +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,11) MODULE_LICENSE("GPL"); #endif #endif -#ifdef GDTH_IOCTL_CHRDEV /* ioctl interface */ static struct file_operations gdth_fops = { - .ioctl = gdth_ioctl, - .open = gdth_open, - .release = gdth_close, -}; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + .ioctl = gdth_ioctl, + .open = gdth_open, + .release = gdth_close, +#else + ioctl:gdth_ioctl, + open:gdth_open, + release:gdth_close, #endif +}; /* /proc support */ -#if LINUX_VERSION_CODE >= 0x010300 #include <linux/stat.h> -#if LINUX_VERSION_CODE < 0x020322 +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) struct proc_dir_entry proc_scsi_gdth = { PROC_SCSI_GDTH, 4, "gdth", S_IFDIR | S_IRUGO | S_IXUGO, 2 }; #endif + #include "gdth_proc.h" #include "gdth_proc.c" -#endif -#if LINUX_VERSION_CODE >= 0x020100 /* notifier block to get a notify on system shutdown/halt/reboot */ static struct notifier_block gdth_notifier = { gdth_halt, NULL, 0 }; -#endif static void gdth_delay(int milliseconds) @@ -787,17 +733,11 @@ if (milliseconds == 0) { udelay(1); } else { -#if LINUX_VERSION_CODE >= 0x020168 mdelay(milliseconds); -#else - int i; - for (i = 0; i < milliseconds; ++i) - udelay(1000); -#endif } } -static void gdth_eval_mapping(ulong32 size, int *cyls, int *heads, int *secs) +static void gdth_eval_mapping(ulong32 size, ulong32 *cyls, int *heads, int *secs) { *cyls = size /HEADS/SECS; if (*cyls <= MAXCYLS) { @@ -842,9 +782,9 @@ ulong32 id; TRACE(("gdth_search_isa() bios adr. %x\n",bios_adr)); - if ((addr = gdth_mmap(bios_adr+BIOS_ID_OFFS, sizeof(ulong32))) != NULL) { + if ((addr = ioremap(bios_adr+BIOS_ID_OFFS, sizeof(ulong32))) != NULL) { id = gdth_readl(addr); - gdth_munmap(addr); + iounmap(addr); if (id == GDT2_ID) /* GDT2000 */ return 1; } @@ -866,6 +806,8 @@ gdth_search_dev(pcistr, &cnt, PCI_VENDOR_ID_VORTEX, device); gdth_search_dev(pcistr, &cnt, PCI_VENDOR_ID_VORTEX, PCI_DEVICE_ID_VORTEX_GDTNEWRX); + gdth_search_dev(pcistr, &cnt, PCI_VENDOR_ID_VORTEX, + PCI_DEVICE_ID_VORTEX_GDTNEWRX2); gdth_search_dev(pcistr, &cnt, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SRC); gdth_search_dev(pcistr, &cnt, PCI_VENDOR_ID_INTEL, @@ -873,11 +815,11 @@ return cnt; } -#if LINUX_VERSION_CODE >= 0x20363 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) /* Vortex only makes RAID controllers. * We do not really want to specify all 550 ids here, so wildcard match. */ -static struct pci_device_id gdthtable[] = { +static struct pci_device_id gdthtable[] __devinitdata = { {PCI_VENDOR_ID_VORTEX,PCI_ANY_ID,PCI_ANY_ID, PCI_ANY_ID}, {PCI_VENDOR_ID_INTEL,PCI_DEVICE_ID_INTEL_SRC,PCI_ANY_ID,PCI_ANY_ID}, {PCI_VENDOR_ID_INTEL,PCI_DEVICE_ID_INTEL_SRC_XSCALE,PCI_ANY_ID,PCI_ANY_ID}, @@ -890,17 +832,12 @@ ushort vendor, ushort device)) { ulong base0, base1, base2; -#if LINUX_VERSION_CODE >= 0x2015C struct pci_dev *pdev; -#else - int error; - ushort idx; -#endif TRACE(("gdth_search_dev() cnt %d vendor %x device %x\n", *cnt, vendor, device)); -#if LINUX_VERSION_CODE >= 0x20363 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) pdev = NULL; while ((pdev = pci_find_device(vendor, device, pdev)) != NULL) { @@ -938,7 +875,7 @@ pcistr[*cnt].irq, pcistr[*cnt].dpmem)); (*cnt)++; } -#elif LINUX_VERSION_CODE >= 0x2015C +#else pdev = NULL; while ((pdev = pci_find_device(vendor, device, pdev)) != NULL) { @@ -979,66 +916,6 @@ pcistr[*cnt].irq, pcistr[*cnt].dpmem)); (*cnt)++; } -#else - idx = 0; - while (!pcibios_find_device(vendor, device, idx++, - &pcistr[*cnt].bus,&pcistr[*cnt].device_fn)) { - if (*cnt >= MAXHA) - return; - /* GDT PCI ctr. found, now read resources from config space */ -#if LINUX_VERSION_CODE >= 0x010300 -#define GDTH_BASEP (int *) -#else -#define GDTH_BASEP -#endif - if ((error = pcibios_read_config_dword(pcistr[*cnt].bus, - pcistr[*cnt].device_fn, - PCI_BASE_ADDRESS_0, - GDTH_BASEP&base0)) || - (error = pcibios_read_config_dword(pcistr[*cnt].bus, - pcistr[*cnt].device_fn, - PCI_BASE_ADDRESS_1, - GDTH_BASEP&base1)) || - (error = pcibios_read_config_dword(pcistr[*cnt].bus, - pcistr[*cnt].device_fn, - PCI_BASE_ADDRESS_2, - GDTH_BASEP&base2)) || - (error = pcibios_read_config_word(pcistr[*cnt].bus, - pcistr[*cnt].device_fn, - PCI_SUBSYSTEM_ID, - &pcistr[*cnt].subdevice_id)) || - (error = pcibios_read_config_byte(pcistr[*cnt].bus, - pcistr[*cnt].device_fn, - PCI_INTERRUPT_LINE, - &pcistr[*cnt].irq))) { - printk("GDT-PCI: error %d reading configuration space", error); - continue; - } - pcistr[*cnt].vendor_id = vendor; - pcistr[*cnt].device_id = device; - if (device <= PCI_DEVICE_ID_VORTEX_GDT6000B || /* GDT6000/B */ - device >= PCI_DEVICE_ID_VORTEX_GDT6x17RP) { /* MPR */ - if ((base0 & PCI_BASE_ADDRESS_SPACE) != - PCI_BASE_ADDRESS_SPACE_MEMORY) - continue; - pcistr[*cnt].dpmem = base0 & PCI_BASE_ADDRESS_MEM_MASK; - } else { /* GDT6110, GDT6120, .. */ - if ((base0 & PCI_BASE_ADDRESS_SPACE) != - PCI_BASE_ADDRESS_SPACE_MEMORY || - (base2 & PCI_BASE_ADDRESS_SPACE) != - PCI_BASE_ADDRESS_SPACE_MEMORY || - (base1 & PCI_BASE_ADDRESS_SPACE) != - PCI_BASE_ADDRESS_SPACE_IO) - continue; - pcistr[*cnt].dpmem = base2 & PCI_BASE_ADDRESS_MEM_MASK; - pcistr[*cnt].io_mm = base0 & PCI_BASE_ADDRESS_MEM_MASK; - pcistr[*cnt].io = base1 & PCI_BASE_ADDRESS_IO_MASK; - } - TRACE2(("Controller found at %d/%d, irq %d, dpmem 0x%lx\n", - pcistr[*cnt].bus, PCI_SLOT(pcistr[*cnt].device_fn), - pcistr[*cnt].irq, pcistr[*cnt].dpmem)); - (*cnt)++; - } #endif } @@ -1168,6 +1045,8 @@ ha->type = GDT_EISA; ha->stype = id; } + + ha->dma64_support = 0; return 1; } @@ -1181,7 +1060,7 @@ TRACE(("gdth_init_isa() bios adr. %x\n",bios_adr)); - ha->brd = gdth_mmap(bios_adr, sizeof(gdt2_dpram_str)); + ha->brd = ioremap(bios_adr, sizeof(gdt2_dpram_str)); if (ha->brd == NULL) { printk("GDT-ISA: Initialization error (DPMEM remap error)\n"); return 0; @@ -1191,8 +1070,8 @@ /* reset interface area */ memset_io((char *)&dp2_ptr->u,0,sizeof(dp2_ptr->u)); if (gdth_readl(&dp2_ptr->u) != 0) { - printk("GDT-PCI: Initialization error (DPMEM write error)\n"); - gdth_munmap(ha->brd); + printk("GDT-ISA: Initialization error (DPMEM write error)\n"); + iounmap(ha->brd); return 0; } @@ -1227,7 +1106,7 @@ while (gdth_readb(&dp2_ptr->u.ic.S_Status) != 0xff) { if (--retries == 0) { printk("GDT-ISA: Initialization error (DEINIT failed)\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } gdth_delay(1); @@ -1237,7 +1116,7 @@ gdth_writeb(0xff, &dp2_ptr->io.irqdel); if (prot_ver != PROTOCOL_VERSION) { printk("GDT-ISA: Illegal protocol version\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } @@ -1259,13 +1138,15 @@ while (gdth_readb(&dp2_ptr->u.ic.S_Status) != 0xfe) { if (--retries == 0) { printk("GDT-ISA: Initialization error\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } gdth_delay(1); } gdth_writeb(0, &dp2_ptr->u.ic.Status); gdth_writeb(0xff, &dp2_ptr->io.irqdel); + + ha->dma64_support = 0; return 1; } @@ -1279,9 +1160,6 @@ unchar prot_ver; ushort command; int i, found = FALSE; -#if LINUX_VERSION_CODE < 0x2015C - int rom_addr; -#endif TRACE(("gdth_init_pci()\n")); @@ -1293,13 +1171,13 @@ ha->stype = (ulong32)pcistr->device_id; ha->subdevice_id = pcistr->subdevice_id; ha->irq = pcistr->irq; -#if LINUX_VERSION_CODE >= 0x20400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) ha->pdev = pcistr->pdev; #endif if (ha->stype <= PCI_DEVICE_ID_VORTEX_GDT6000B) { /* GDT6000/B */ TRACE2(("init_pci() dpmem %lx irq %d\n",pcistr->dpmem,ha->irq)); - ha->brd = gdth_mmap(pcistr->dpmem, sizeof(gdt6_dpram_str)); + ha->brd = ioremap(pcistr->dpmem, sizeof(gdt6_dpram_str)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); return 0; @@ -1312,8 +1190,8 @@ pcistr->dpmem); found = FALSE; for (i = 0xC8000; i < 0xE8000; i += 0x4000) { - gdth_munmap(ha->brd); - ha->brd = gdth_mmap(i, sizeof(ushort)); + iounmap(ha->brd); + ha->brd = ioremap(i, sizeof(ushort)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); return 0; @@ -1322,15 +1200,10 @@ TRACE2(("init_pci_old() address 0x%x busy\n", i)); continue; } - gdth_munmap(ha->brd); -#if LINUX_VERSION_CODE >= 0x2015C + iounmap(ha->brd); pci_write_config_dword(pcistr->pdev, PCI_BASE_ADDRESS_0, i); -#else - pcibios_write_config_dword(pcistr->bus, pcistr->device_fn, - PCI_BASE_ADDRESS_0, i); -#endif - ha->brd = gdth_mmap(i, sizeof(gdt6_dpram_str)); + ha->brd = ioremap(i, sizeof(gdt6_dpram_str)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); return 0; @@ -1345,14 +1218,14 @@ } if (!found) { printk("GDT-PCI: No free address found!\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } } memset_io((char *)&dp6_ptr->u,0,sizeof(dp6_ptr->u)); if (gdth_readl(&dp6_ptr->u) != 0) { printk("GDT-PCI: Initialization error (DPMEM write error)\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } @@ -1370,7 +1243,7 @@ while (gdth_readb(&dp6_ptr->u.ic.S_Status) != 0xff) { if (--retries == 0) { printk("GDT-PCI: Initialization error (DEINIT failed)\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } gdth_delay(1); @@ -1380,7 +1253,7 @@ gdth_writeb(0xff, &dp6_ptr->io.irqdel); if (prot_ver != PROTOCOL_VERSION) { printk("GDT-PCI: Illegal protocol version\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } @@ -1390,7 +1263,7 @@ /* special command to controller BIOS */ gdth_writel(0x00, &dp6_ptr->u.ic.S_Info[0]); gdth_writel(0x00, &dp6_ptr->u.ic.S_Info[1]); - gdth_writel(0x01, &dp6_ptr->u.ic.S_Info[2]); + gdth_writel(0x00, &dp6_ptr->u.ic.S_Info[2]); gdth_writel(0x00, &dp6_ptr->u.ic.S_Info[3]); gdth_writeb(0xfe, &dp6_ptr->u.ic.S_Cmd_Indx); gdth_writeb(0, &dp6_ptr->io.event); @@ -1399,7 +1272,7 @@ while (gdth_readb(&dp6_ptr->u.ic.S_Status) != 0xfe) { if (--retries == 0) { printk("GDT-PCI: Initialization error\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } gdth_delay(1); @@ -1407,14 +1280,16 @@ gdth_writeb(0, &dp6_ptr->u.ic.S_Status); gdth_writeb(0xff, &dp6_ptr->io.irqdel); + ha->dma64_support = 0; + } else if (ha->stype <= PCI_DEVICE_ID_VORTEX_GDT6555) { /* GDT6110, ... */ ha->plx = (gdt6c_plx_regs *)pcistr->io; TRACE2(("init_pci_new() dpmem %lx irq %d\n", pcistr->dpmem,ha->irq)); - ha->brd = gdth_mmap(pcistr->dpmem, sizeof(gdt6c_dpram_str)); + ha->brd = ioremap(pcistr->dpmem, sizeof(gdt6c_dpram_str)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } /* check and reset interface area */ @@ -1425,8 +1300,8 @@ pcistr->dpmem); found = FALSE; for (i = 0xC8000; i < 0xE8000; i += 0x4000) { - gdth_munmap(ha->brd); - ha->brd = gdth_mmap(i, sizeof(ushort)); + iounmap(ha->brd); + ha->brd = ioremap(i, sizeof(ushort)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); return 0; @@ -1435,15 +1310,10 @@ TRACE2(("init_pci_plx() address 0x%x busy\n", i)); continue; } - gdth_munmap(ha->brd); -#if LINUX_VERSION_CODE >= 0x2015C + iounmap(ha->brd); pci_write_config_dword(pcistr->pdev, PCI_BASE_ADDRESS_2, i); -#else - pcibios_write_config_dword(pcistr->bus, pcistr->device_fn, - PCI_BASE_ADDRESS_2, i); -#endif - ha->brd = gdth_mmap(i, sizeof(gdt6c_dpram_str)); + ha->brd = ioremap(i, sizeof(gdt6c_dpram_str)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); return 0; @@ -1458,14 +1328,14 @@ } if (!found) { printk("GDT-PCI: No free address found!\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } } memset_io((char *)&dp6c_ptr->u,0,sizeof(dp6c_ptr->u)); if (gdth_readl(&dp6c_ptr->u) != 0) { printk("GDT-PCI: Initialization error (DPMEM write error)\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } @@ -1486,7 +1356,7 @@ while (gdth_readb(&dp6c_ptr->u.ic.S_Status) != 0xff) { if (--retries == 0) { printk("GDT-PCI: Initialization error (DEINIT failed)\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } gdth_delay(1); @@ -1495,7 +1365,7 @@ gdth_writeb(0, &dp6c_ptr->u.ic.Status); if (prot_ver != PROTOCOL_VERSION) { printk("GDT-PCI: Illegal protocol version\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } @@ -1505,7 +1375,7 @@ /* special command to controller BIOS */ gdth_writel(0x00, &dp6c_ptr->u.ic.S_Info[0]); gdth_writel(0x00, &dp6c_ptr->u.ic.S_Info[1]); - gdth_writel(0x01, &dp6c_ptr->u.ic.S_Info[2]); + gdth_writel(0x00, &dp6c_ptr->u.ic.S_Info[2]); gdth_writel(0x00, &dp6c_ptr->u.ic.S_Info[3]); gdth_writeb(0xfe, &dp6c_ptr->u.ic.S_Cmd_Indx); @@ -1516,23 +1386,25 @@ while (gdth_readb(&dp6c_ptr->u.ic.S_Status) != 0xfe) { if (--retries == 0) { printk("GDT-PCI: Initialization error\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } gdth_delay(1); } gdth_writeb(0, &dp6c_ptr->u.ic.S_Status); + ha->dma64_support = 0; + } else { /* MPR */ TRACE2(("init_pci_mpr() dpmem %lx irq %d\n",pcistr->dpmem,ha->irq)); - ha->brd = gdth_mmap(pcistr->dpmem, sizeof(gdt6m_dpram_str)); + ha->brd = ioremap(pcistr->dpmem, sizeof(gdt6m_dpram_str)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); return 0; } /* manipulate config. space to enable DPMEM, start RP controller */ -#if LINUX_VERSION_CODE >= 0x20363 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) pci_read_config_word(pcistr->pdev, PCI_COMMAND, &command); command |= 6; pci_write_config_word(pcistr->pdev, PCI_COMMAND, command); @@ -1543,7 +1415,7 @@ gdth_delay(1); pci_write_config_dword(pcistr->pdev, PCI_ROM_ADDRESS, pci_resource_start(pcistr->pdev, 8)); -#elif LINUX_VERSION_CODE >= 0x2015C +#else pci_read_config_word(pcistr->pdev, PCI_COMMAND, &command); command |= 6; pci_write_config_word(pcistr->pdev, PCI_COMMAND, command); @@ -1554,22 +1426,6 @@ gdth_delay(1); pci_write_config_dword(pcistr->pdev, PCI_ROM_ADDRESS, pcistr->pdev->rom_address); -#else - pcibios_read_config_word(pcistr->bus, pcistr->device_fn, - PCI_COMMAND, &command); - command |= 6; - pcibios_write_config_word(pcistr->bus, pcistr->device_fn, - PCI_COMMAND, command); - pcibios_read_config_dword(pcistr->bus, pcistr->device_fn, - PCI_ROM_ADDRESS, &rom_addr); - if (rom_addr == 1UL) - rom_addr = 0UL; - i = 0xFEFF0001UL; - pcibios_write_config_dword(pcistr->bus, pcistr->device_fn, - PCI_ROM_ADDRESS, i); - gdth_delay(1); - pcibios_write_config_dword(pcistr->bus, pcistr->device_fn, - PCI_ROM_ADDRESS, rom_addr); #endif /* Ensure that it is safe to access the non HW portions of DPMEM. @@ -1585,8 +1441,8 @@ pcistr->dpmem); found = FALSE; for (i = 0xC8000; i < 0xE8000; i += 0x4000) { - gdth_munmap(ha->brd); - ha->brd = gdth_mmap(i, sizeof(ushort)); + iounmap(ha->brd); + ha->brd = ioremap(i, sizeof(ushort)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); return 0; @@ -1595,15 +1451,10 @@ TRACE2(("init_pci_mpr() address 0x%x busy\n", i)); continue; } - gdth_munmap(ha->brd); -#if LINUX_VERSION_CODE >= 0x2015C + iounmap(ha->brd); pci_write_config_dword(pcistr->pdev, PCI_BASE_ADDRESS_0, i); -#else - pcibios_write_config_dword(pcistr->bus, pcistr->device_fn, - PCI_BASE_ADDRESS_0, i); -#endif - ha->brd = gdth_mmap(i, sizeof(gdt6m_dpram_str)); + ha->brd = ioremap(i, sizeof(gdt6m_dpram_str)); if (ha->brd == NULL) { printk("GDT-PCI: Initialization error (DPMEM remap error)\n"); return 0; @@ -1618,7 +1469,7 @@ } if (!found) { printk("GDT-PCI: No free address found!\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } } @@ -1639,7 +1490,7 @@ while (gdth_readb(&dp6m_ptr->u.ic.S_Status) != 0xff) { if (--retries == 0) { printk("GDT-PCI: Initialization error (DEINIT failed)\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } gdth_delay(1); @@ -1648,7 +1499,7 @@ gdth_writeb(0, &dp6m_ptr->u.ic.S_Status); if (prot_ver != PROTOCOL_VERSION) { printk("GDT-PCI: Illegal protocol version\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } @@ -1658,7 +1509,7 @@ /* special command to controller BIOS */ gdth_writel(0x00, &dp6m_ptr->u.ic.S_Info[0]); gdth_writel(0x00, &dp6m_ptr->u.ic.S_Info[1]); - gdth_writel(0x01, &dp6m_ptr->u.ic.S_Info[2]); + gdth_writel(0x00, &dp6m_ptr->u.ic.S_Info[2]); gdth_writel(0x00, &dp6m_ptr->u.ic.S_Info[3]); gdth_writeb(0xfe, &dp6m_ptr->u.ic.S_Cmd_Indx); gdth_writeb(1, &dp6m_ptr->i960r.ldoor_reg); @@ -1667,12 +1518,32 @@ while (gdth_readb(&dp6m_ptr->u.ic.S_Status) != 0xfe) { if (--retries == 0) { printk("GDT-PCI: Initialization error\n"); - gdth_munmap(ha->brd); + iounmap(ha->brd); return 0; } gdth_delay(1); } gdth_writeb(0, &dp6m_ptr->u.ic.S_Status); + + /* read FW version to detect 64-bit DMA support */ + gdth_writeb(0xfd, &dp6m_ptr->u.ic.S_Cmd_Indx); + gdth_writeb(1, &dp6m_ptr->i960r.ldoor_reg); + retries = INIT_RETRIES; + gdth_delay(20); + while (gdth_readb(&dp6m_ptr->u.ic.S_Status) != 0xfd) { + if (--retries == 0) { + printk("GDT-PCI: Initialization error (DEINIT failed)\n"); + iounmap(ha->brd); + return 0; + } + gdth_delay(1); + } + prot_ver = (unchar)(gdth_readl(&dp6m_ptr->u.ic.S_Info[0]) >> 16); + gdth_writeb(0, &dp6m_ptr->u.ic.S_Status); + if (prot_ver < 0x2b) /* FW < x.43: no 64-bit DMA support */ + ha->dma64_support = 0; + else + ha->dma64_support = 1; } return 1; @@ -1950,7 +1821,7 @@ static int gdth_internal_cmd(int hanum,unchar service,ushort opcode,ulong32 p1, - ulong32 p2,ulong32 p3) + ulong64 p2,ulong64 p3) { register gdth_ha_str *ha; register gdth_cmd_str *cmd_ptr; @@ -1976,23 +1847,35 @@ if (service == CACHESERVICE) { if (opcode == GDT_IOCTL) { cmd_ptr->u.ioctl.subfunc = p1; - cmd_ptr->u.ioctl.channel = p2; + cmd_ptr->u.ioctl.channel = (ulong32)p2; cmd_ptr->u.ioctl.param_size = (ushort)p3; cmd_ptr->u.ioctl.p_param = ha->scratch_phys; } else { - cmd_ptr->u.cache.DeviceNo = (ushort)p1; - cmd_ptr->u.cache.BlockNo = p2; + if (ha->cache_feat & GDT_64BIT) { + cmd_ptr->u.cache64.DeviceNo = (ushort)p1; + cmd_ptr->u.cache64.BlockNo = p2; + } else { + cmd_ptr->u.cache.DeviceNo = (ushort)p1; + cmd_ptr->u.cache.BlockNo = (ulong32)p2; + } } } else if (service == SCSIRAWSERVICE) { - cmd_ptr->u.raw.direction = p1; - cmd_ptr->u.raw.bus = (unchar)p2; - cmd_ptr->u.raw.target = (unchar)p3; - cmd_ptr->u.raw.lun = (unchar)(p3 >> 8); + if (ha->raw_feat & GDT_64BIT) { + cmd_ptr->u.raw64.direction = p1; + cmd_ptr->u.raw64.bus = (unchar)p2; + cmd_ptr->u.raw64.target = (unchar)p3; + cmd_ptr->u.raw64.lun = (unchar)(p3 >> 8); + } else { + cmd_ptr->u.raw.direction = p1; + cmd_ptr->u.raw.bus = (unchar)p2; + cmd_ptr->u.raw.target = (unchar)p3; + cmd_ptr->u.raw.lun = (unchar)(p3 >> 8); + } } else if (service == SCREENSERVICE) { if (opcode == GDT_REALTIME) { *(ulong32 *)&cmd_ptr->u.screen.su.data[0] = p1; - *(ulong32 *)&cmd_ptr->u.screen.su.data[4] = p2; - *(ulong32 *)&cmd_ptr->u.screen.su.data[8] = p3; + *(ulong32 *)&cmd_ptr->u.screen.su.data[4] = (ulong32)p2; + *(ulong32 *)&cmd_ptr->u.screen.su.data[8] = (ulong32)p3; } } ha->cmd_len = sizeof(gdth_cmd_str); @@ -2020,6 +1903,7 @@ { register gdth_ha_str *ha; ushort cdev_cnt, i; + int ok; ulong32 bus_no, drv_cnt, drv_no, j; gdth_getch_str *chn; gdth_drlist_str *drl; @@ -2028,6 +1912,9 @@ gdth_arcdl_str *alst; gdth_alist_str *alst2; gdth_oem_str_ioctl *oemstr; +#ifdef INT_COAL + gdth_perf_modes *pmod; +#endif #ifdef GDTH_RTC unchar rtc[12]; @@ -2036,11 +1923,20 @@ TRACE(("gdth_search_drives() hanum %d\n",hanum)); ha = HADATA(gdth_ctr_tab[hanum]); + ok = 0; /* initialize controller services, at first: screen service */ - if (!gdth_internal_cmd(hanum,SCREENSERVICE,GDT_INIT,0,0,0)) { - printk("GDT: Initialization error screen service (code %d)\n", - ha->status); + ha->screen_feat = 0; + if (!force_dma32) { + ok = gdth_internal_cmd(hanum,SCREENSERVICE,GDT_X_INIT_SCR,0,0,0); + if (ok) + ha->screen_feat = GDT_64BIT; + } + if (force_dma32 || (!ok && ha->status == (ushort)S_NOFUNC)) + ok = gdth_internal_cmd(hanum,SCREENSERVICE,GDT_INIT,0,0,0); + if (!ok) { + printk("GDT-HA %d: Initialization error screen service (code %d)\n", + hanum, ha->status); return 0; } TRACE2(("gdth_search_drives(): SCREENSERVICE initialized\n")); @@ -2060,7 +1956,7 @@ for (j = 0; j < 12; ++j) rtc[j] = CMOS_READ(j); } while (rtc[0] != CMOS_READ(0)); - spin_unlock_irqrestore(&rtc_lock, flags); + spin_lock_irqrestore(&rtc_lock, flags); TRACE2(("gdth_search_drives(): RTC: %x/%x/%x\n",*(ulong32 *)&rtc[0], *(ulong32 *)&rtc[4], *(ulong32 *)&rtc[8])); /* 3. send to controller firmware */ @@ -2072,15 +1968,52 @@ gdth_internal_cmd(hanum,CACHESERVICE,GDT_UNFREEZE_IO,0,0,0); /* initialize cache service */ - if (!gdth_internal_cmd(hanum,CACHESERVICE,GDT_INIT,LINUX_OS,0,0)) { - printk("GDT: Initialization error cache service (code %d)\n", - ha->status); + ha->cache_feat = 0; + if (!force_dma32) { + ok = gdth_internal_cmd(hanum,CACHESERVICE,GDT_X_INIT_HOST,LINUX_OS,0,0); + if (ok) + ha->cache_feat = GDT_64BIT; + } + if (force_dma32 || (!ok && ha->status == (ushort)S_NOFUNC)) + ok = gdth_internal_cmd(hanum,CACHESERVICE,GDT_INIT,LINUX_OS,0,0); + if (!ok) { + printk("GDT-HA %d: Initialization error cache service (code %d)\n", + hanum, ha->status); return 0; } TRACE2(("gdth_search_drives(): CACHESERVICE initialized\n")); cdev_cnt = (ushort)ha->info; ha->fw_vers = ha->service; +#ifdef INT_COAL + if (ha->type == GDT_PCIMPR) { + /* set perf. modes */ + pmod = (gdth_perf_modes *)ha->pscratch; + pmod->version = 1; + pmod->st_mode = 1; /* enable one status buffer */ + *((ulong64 *)&pmod->st_buff_addr1) = ha->coal_stat_phys; + pmod->st_buff_indx1 = COALINDEX; + pmod->st_buff_addr2 = 0; + pmod->st_buff_u_addr2 = 0; + pmod->st_buff_indx2 = 0; + pmod->st_buff_size = sizeof(gdth_coal_status) * MAXOFFSETS; + pmod->cmd_mode = 0; // disable all cmd buffers + pmod->cmd_buff_addr1 = 0; + pmod->cmd_buff_u_addr1 = 0; + pmod->cmd_buff_indx1 = 0; + pmod->cmd_buff_addr2 = 0; + pmod->cmd_buff_u_addr2 = 0; + pmod->cmd_buff_indx2 = 0; + pmod->cmd_buff_size = 0; + pmod->reserved1 = 0; + pmod->reserved2 = 0; + if (gdth_internal_cmd(hanum,CACHESERVICE,GDT_IOCTL,SET_PERF_MODES, + INVALID_CHANNEL,sizeof(gdth_perf_modes))) { + printk("GDT-HA %d: Interrupt coalescing activated\n", hanum); + } + } +#endif + /* detect number of buses - try new IOCTL */ iocr = (gdth_raw_iochan_str *)ha->pscratch; iocr->hdr.version = 0xffffffff; @@ -2108,8 +2041,8 @@ IO_CHANNEL | INVALID_CHANNEL, sizeof(gdth_getch_str))) { if (bus_no == 0) { - printk("GDT: Error detecting channel count (0x%x)\n", - ha->status); + printk("GDT-HA %d: Error detecting channel count (0x%x)\n", + hanum, ha->status); return 0; } break; @@ -2126,8 +2059,8 @@ /* read cache configuration */ if (!gdth_internal_cmd(hanum,CACHESERVICE,GDT_IOCTL,CACHE_INFO, INVALID_CHANNEL,sizeof(gdth_cinfo_str))) { - printk("GDT: Initialization error cache service (code %d)\n", - ha->status); + printk("GDT-HA %d: Initialization error cache service (code %d)\n", + hanum, ha->status); return 0; } ha->cpar = ((gdth_cinfo_str *)ha->pscratch)->cpar; @@ -2246,9 +2179,17 @@ } /* initialize raw service */ - if (!gdth_internal_cmd(hanum,SCSIRAWSERVICE,GDT_INIT,0,0,0)) { - printk("GDT: Initialization error raw service (code %d)\n", - ha->status); + ha->raw_feat = 0; + if (!force_dma32) { + ok = gdth_internal_cmd(hanum,SCSIRAWSERVICE,GDT_X_INIT_RAW,0,0,0); + if (ok) + ha->raw_feat = GDT_64BIT; + } + if (force_dma32 || (!ok && ha->status == (ushort)S_NOFUNC)) + ok = gdth_internal_cmd(hanum,SCSIRAWSERVICE,GDT_INIT,0,0,0); + if (!ok) { + printk("GDT-HA %d: Initialization error raw service (code %d)\n", + hanum, ha->status); return 0; } TRACE2(("gdth_search_drives(): RAWSERVICE initialized\n")); @@ -2260,7 +2201,7 @@ if (gdth_internal_cmd(hanum,SCSIRAWSERVICE,GDT_GET_FEAT,0,0,0)) { TRACE2(("gdth_search_dr(): get feat RAWSERVICE %d\n", ha->info)); - ha->raw_feat = (ushort)ha->info; + ha->raw_feat |= (ushort)ha->info; } } @@ -2271,7 +2212,7 @@ if (gdth_internal_cmd(hanum,CACHESERVICE,GDT_GET_FEAT,0,0,0)) { TRACE2(("gdth_search_dr(): get feat CACHESERV. %d\n", ha->info)); - ha->cache_feat = (ushort)ha->info; + ha->cache_feat |= (ushort)ha->info; } } @@ -2291,8 +2232,8 @@ if (!gdth_internal_cmd(hanum,SCSIRAWSERVICE,GDT_RESERVE,0, reserve_list[i+1], reserve_list[i+2] | (reserve_list[i+3] << 8))) { - printk("GDT: Error raw service (RESERVE, code %d)\n", - ha->status); + printk("GDT-HA %d: Error raw service (RESERVE, code %d)\n", + hanum, ha->status); } } } @@ -2305,17 +2246,32 @@ CACHE_READ_OEM_STRING_RECORD,INVALID_CHANNEL, sizeof(gdth_oem_str_ioctl))) { TRACE2(("gdth_search_drives(): CACHE_READ_OEM_STRING_RECORD OK\n")); - printk("GDT CTR%d Vendor: %s\n",hanum,oemstr->text.oem_company_name); + printk("GDT-HA %d: Vendor: %s Name: %s\n", + hanum,oemstr->text.oem_company_name,ha->binfo.type_string); /* Save the Host Drive inquiry data */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) strlcpy(ha->oem_name,oemstr->text.scsi_host_drive_inquiry_vendor_id, - sizeof(ha->oem_name)); + sizeof(ha->oem_name)); +#else + strncpy(ha->oem_name,oemstr->text.scsi_host_drive_inquiry_vendor_id,7); + ha->oem_name[7] = '\0'; +#endif } else { /* Old method, based on PCI ID */ TRACE2(("gdth_search_drives(): CACHE_READ_OEM_STRING_RECORD failed\n")); + printk("GDT-HA %d: Name: %s\n", + hanum,ha->binfo.type_string); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) if (ha->oem_id == OEM_ID_INTEL) strlcpy(ha->oem_name,"Intel ", sizeof(ha->oem_name)); else strlcpy(ha->oem_name,"ICP ", sizeof(ha->oem_name)); +#else + if (ha->oem_id == OEM_ID_INTEL) + strcpy(ha->oem_name,"Intel "); + else + strcpy(ha->oem_name,"ICP "); +#endif } /* scanning for host drives */ @@ -2329,7 +2285,8 @@ static int gdth_analyse_hdrive(int hanum,ushort hdrive) { register gdth_ha_str *ha; - int drv_cyls, drv_hds, drv_secs; + ulong32 drv_cyls; + int drv_hds, drv_secs; TRACE(("gdth_analyse_hdrive() hanum %d drive %d\n",hanum,hdrive)); if (hdrive >= MAX_HDRIVES) @@ -2340,7 +2297,7 @@ return 0; ha->hdr[hdrive].present = TRUE; ha->hdr[hdrive].size = ha->info; - + /* evaluate mapping (sectors per head, heads per cylinder) */ ha->hdr[hdrive].size &= ~SECS32; if (ha->info2 == 0) { @@ -2348,15 +2305,22 @@ } else { drv_hds = ha->info2 & 0xff; drv_secs = (ha->info2 >> 8) & 0xff; - drv_cyls = ha->hdr[hdrive].size /drv_hds/drv_secs; + drv_cyls = (ulong32)ha->hdr[hdrive].size / drv_hds / drv_secs; } ha->hdr[hdrive].heads = (unchar)drv_hds; ha->hdr[hdrive].secs = (unchar)drv_secs; /* round size */ ha->hdr[hdrive].size = drv_cyls * drv_hds * drv_secs; + + if (ha->cache_feat & GDT_64BIT) { + if (gdth_internal_cmd(hanum,CACHESERVICE,GDT_X_INFO,hdrive,0,0) + && ha->info2 != 0) { + ha->hdr[hdrive].size = ((ulong64)ha->info2 << 32) | ha->info; + } + } TRACE2(("gdth_search_dr() cdr. %d size %d hds %d scs %d\n", hdrive,ha->hdr[hdrive].size,drv_hds,drv_secs)); - + /* get informations about device */ if (gdth_internal_cmd(hanum,CACHESERVICE,GDT_DEVTYPE,hdrive,0,0)) { TRACE2(("gdth_search_dr() cache drive %d devtype %d\n", @@ -2398,14 +2362,13 @@ GDTH_LOCK_HA(ha, flags); scp->SCp.this_residual = (int)priority; -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; t = scp->device->id; #else b = virt_ctr ? NUMDATA(scp->host)->busnum : scp->channel; t = scp->target; #endif -#if LINUX_VERSION_CODE >= 0x010300 if (priority >= DEFAULT_PRI) { if ((b != ha->virt_bus && ha->raw[BUS_L2P(ha,b)].lock) || (b == ha->virt_bus && t < MAX_HDRIVES && ha->hdr[t].lock)) { @@ -2413,7 +2376,6 @@ scp->SCp.buffers_residual = gdth_update_timeout(hanum, scp, 0); } } -#endif if (ha->req_first==NULL) { ha->req_first = scp; /* queue was empty */ @@ -2465,7 +2427,7 @@ for (nscp = pscp = ha->req_first; nscp; nscp = (Scsi_Cmnd *)nscp->SCp.ptr) { if (nscp != pscp && nscp != (Scsi_Cmnd *)pscp->SCp.ptr) pscp = (Scsi_Cmnd *)pscp->SCp.ptr; -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) b = virt_ctr ? NUMDATA(nscp->device->host)->busnum : nscp->device->channel; t = nscp->device->id; l = nscp->device->lun; @@ -2493,10 +2455,7 @@ firsttime = FALSE; } -#if LINUX_VERSION_CODE >= 0x010300 - if (nscp->done != gdth_scsi_done || nscp->cmnd[0] != 0xff) -#endif - { + if (nscp->done != gdth_scsi_done || nscp->cmnd[0] != 0xff) { if (nscp->SCp.phase == -1) { nscp->SCp.phase = CACHESERVICE; /* default: cache svc. */ if (nscp->cmnd[0] == TEST_UNIT_READY) { @@ -2565,16 +2524,11 @@ GDTH_LOCK_HA(ha,flags); } } - } else - -#if LINUX_VERSION_CODE >= 0x010300 - if (nscp->done == gdth_scsi_done && nscp->cmnd[0] == 0xff) { + } else if (nscp->done == gdth_scsi_done && nscp->cmnd[0] == 0xff) { if (!(cmd_index=gdth_special_cmd(hanum,nscp))) this_cmd = FALSE; next_cmd = FALSE; - } else -#endif - if (b != ha->virt_bus) { + } else if (b != ha->virt_bus) { if (ha->raw[BUS_L2P(ha,b)].io_cnt[t] >= GDTH_MAX_RAW || !(cmd_index=gdth_fill_raw_cmd(hanum,nscp,BUS_L2P(ha,b)))) this_cmd = FALSE; @@ -2603,6 +2557,9 @@ case VERIFY: case START_STOP: case MODE_SENSE: +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + case SERVICE_ACTION_IN: +#endif TRACE(("cache cmd %x/%x/%x/%x/%x/%x\n",nscp->cmnd[0], nscp->cmnd[1],nscp->cmnd[2],nscp->cmnd[3], nscp->cmnd[4],nscp->cmnd[5])); @@ -2674,6 +2631,10 @@ case WRITE_6: case READ_10: case WRITE_10: +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + case READ_16: + case WRITE_16: +#endif if (ha->hdr[t].media_changed) { /* return UNIT_ATTENTION */ TRACE2(("cmd 0x%x target %d: UNIT_ATTENTION\n", @@ -2701,8 +2662,8 @@ TRACE2(("cache cmd %x/%x/%x/%x/%x/%x unknown\n",nscp->cmnd[0], nscp->cmnd[1],nscp->cmnd[2],nscp->cmnd[3], nscp->cmnd[4],nscp->cmnd[5])); - printk("GDT: Unknown SCSI command 0x%x to cache service !\n", - nscp->cmnd[0]); + printk("GDT-HA %d: Unknown SCSI command 0x%x to cache service !\n", + hanum, nscp->cmnd[0]); nscp->result = DID_ABORT << 16; if (!nscp->SCp.have_data_in) nscp->SCp.have_data_in++; @@ -2737,11 +2698,11 @@ if (gdth_polling && ha->cmd_cnt > 0) { if (!gdth_wait(hanum,cmd_index,POLL_TIMEOUT)) - printk("GDT: Controller %d: Command %d timed out !\n", + printk("GDT-HA %d: Command %d timed out !\n", hanum,cmd_index); } } - + static void gdth_copy_internal_data(int hanum,Scsi_Cmnd *scp, char *buffer,ushort count) { @@ -2757,7 +2718,7 @@ if (scp->use_sg) { sl = (struct scatterlist *)scp->request_buffer; -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) sgcnt = pci_map_sg(ha->pdev,sl,scp->use_sg,PCI_DMA_FROMDEVICE); for (i=0,cpsum=0; i<sgcnt; ++i,++sl) { cpnow = (ushort)sg_dma_len(sl); @@ -2766,7 +2727,12 @@ if (cpsum+cpnow > cpcount) cpnow = cpcount - cpsum; cpsum += cpnow; - address = (char *)phys_to_virt(sg_dma_address(sl)); + if (!sl->page) { + printk("GDT-HA %d: invalid sc/gt element in gdth_copy_internal_data()\n", + hanum); + return; + } + address = (char *)(page_address(sl->page) + sl->offset); memcpy(address,buffer,cpnow); if (cpsum == cpcount) break; @@ -2806,7 +2772,7 @@ gdth_modep_data mpd; ha = HADATA(gdth_ctr_tab[hanum]); -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) t = scp->device->id; #else t = scp->target; @@ -2814,6 +2780,9 @@ TRACE(("gdth_internal_cache_cmd() cmd 0x%x hdrive %d\n", scp->cmnd[0],t)); + scp->result = DID_OK << 16; + scp->sense_buffer[0] = 0; + switch (scp->cmnd[0]) { case TEST_UNIT_READY: case VERIFY: @@ -2864,19 +2833,35 @@ case READ_CAPACITY: TRACE2(("Read capacity hdrive %d\n",t)); - rdc.last_block_no = ntohl(ha->hdr[t].size-1); - rdc.block_length = ntohl(SECTOR_SIZE); + if (ha->hdr[t].size > (ulong64)0xffffffff) + rdc.last_block_no = 0xffffffff; + else + rdc.last_block_no = cpu_to_be32(ha->hdr[t].size-1); + rdc.block_length = cpu_to_be32(SECTOR_SIZE); gdth_copy_internal_data(hanum,scp,(char*)&rdc,sizeof(gdth_rdcap_data)); break; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + case SERVICE_ACTION_IN: + if ((scp->cmnd[1] & 0x1f) == SAI_READ_CAPACITY_16 && + (ha->cache_feat & GDT_64BIT)) { + gdth_rdcap16_data rdc16; + + TRACE2(("Read capacity (16) hdrive %d\n",t)); + rdc16.last_block_no = cpu_to_be64(ha->hdr[t].size-1); + rdc16.block_length = cpu_to_be32(SECTOR_SIZE); + gdth_copy_internal_data(hanum,scp,(char*)&rdc16,sizeof(gdth_rdcap16_data)); + } else { + scp->result = DID_ABORT << 16; + } + break; +#endif + default: TRACE2(("Internal cache cmd 0x%x unknown\n",scp->cmnd[0])); break; } - scp->result = DID_OK << 16; - scp->sense_buffer[0] = 0; - if (!scp->SCp.have_data_in) scp->SCp.have_data_in++; else @@ -2890,9 +2875,14 @@ register gdth_ha_str *ha; register gdth_cmd_str *cmdp; struct scatterlist *sl; - ushort i, cnt; - ulong32 no, phys_addr; - int cmd_index, read_write, sgcnt; + ulong32 cnt, blockcnt; + ulong64 no, blockno; + dma_addr_t phys_addr; + int i, cmd_index, read_write, sgcnt, mode64; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) + struct page *page; + ulong offset; +#endif ha = HADATA(gdth_ctr_tab[hanum]); cmdp = ha->pccb; @@ -2902,6 +2892,11 @@ if (ha->type==GDT_EISA && ha->cmd_cnt>0) return 0; + mode64 = (ha->cache_feat & GDT_64BIT) ? TRUE : FALSE; + /* test for READ_16, WRITE_16 if !mode64 ? --- + not required, should not occur due to error return on + READ_CAPACITY_16 */ + cmdp->Service = CACHESERVICE; cmdp->RequestBuffer = scp; /* search free command index */ @@ -2929,7 +2924,11 @@ else cmdp->OpCode = GDT_FLUSH; } else if (scp->cmnd[0] == WRITE_6 || scp->cmnd[0] == WRITE_10 || - scp->cmnd[0] == WRITE_12) { + scp->cmnd[0] == WRITE_12 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + || scp->cmnd[0] == WRITE_16 +#endif + ) { read_write = 1; if (gdth_write_through || ((ha->hdr[hdrive].rw_attribs & 1) && (ha->cache_feat & GDT_WR_THROUGH))) @@ -2940,86 +2939,157 @@ read_write = 2; cmdp->OpCode = GDT_READ; } - - cmdp->BoardNode = LOCALBOARD; - cmdp->u.cache.DeviceNo = hdrive; - cmdp->u.cache.BlockNo = 1; - cmdp->u.cache.sg_canz = 0; + + cmdp->BoardNode = LOCALBOARD; + if (mode64) { + cmdp->u.cache64.DeviceNo = hdrive; + cmdp->u.cache64.BlockNo = 1; + cmdp->u.cache64.sg_canz = 0; + } else { + cmdp->u.cache.DeviceNo = hdrive; + cmdp->u.cache.BlockNo = 1; + cmdp->u.cache.sg_canz = 0; + } if (read_write) { - if (scp->cmd_len != 6) { + if (scp->cmd_len == 16) { + memcpy(&no, &scp->cmnd[2], sizeof(ulong64)); + blockno = be64_to_cpu(no); + memcpy(&cnt, &scp->cmnd[10], sizeof(ulong32)); + blockcnt = be32_to_cpu(cnt); + } else if (scp->cmd_len == 10) { memcpy(&no, &scp->cmnd[2], sizeof(ulong32)); - cmdp->u.cache.BlockNo = ntohl(no); + blockno = be32_to_cpu(no); memcpy(&cnt, &scp->cmnd[7], sizeof(ushort)); - cmdp->u.cache.BlockCnt = (ulong32)ntohs(cnt); + blockcnt = be16_to_cpu(cnt); } else { memcpy(&no, &scp->cmnd[0], sizeof(ulong32)); - cmdp->u.cache.BlockNo = ntohl(no) & 0x001fffffUL; - cmdp->u.cache.BlockCnt= scp->cmnd[4]==0 ? 0x100 : scp->cmnd[4]; + blockno = be32_to_cpu(no) & 0x001fffffUL; + blockcnt= scp->cmnd[4]==0 ? 0x100 : scp->cmnd[4]; + } + if (mode64) { + cmdp->u.cache64.BlockNo = blockno; + cmdp->u.cache64.BlockCnt = blockcnt; + } else { + cmdp->u.cache.BlockNo = (ulong32)blockno; + cmdp->u.cache.BlockCnt = blockcnt; } if (scp->use_sg) { - cmdp->u.cache.DestAddr= 0xffffffff; sl = (struct scatterlist *)scp->request_buffer; sgcnt = scp->use_sg; -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) scp->SCp.Status = GDTH_MAP_SG; scp->SCp.Message = (read_write == 1 ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE); sgcnt = pci_map_sg(ha->pdev,sl,scp->use_sg,scp->SCp.Message); - for (i=0; i<sgcnt; ++i,++sl) { - cmdp->u.cache.sg_lst[i].sg_ptr = sg_dma_address(sl); - cmdp->u.cache.sg_lst[i].sg_len = sg_dma_len(sl); + if (mode64) { + cmdp->u.cache64.DestAddr= (ulong64)-1; + cmdp->u.cache64.sg_canz = sgcnt; + for (i=0; i<sgcnt; ++i,++sl) { + cmdp->u.cache64.sg_lst[i].sg_ptr = sg_dma_address(sl); +#ifdef GDTH_DMA_STATISTICS + if (cmdp->u.cache64.sg_lst[i].sg_ptr > (ulong64)0xffffffff) + ha->dma64_cnt++; + else + ha->dma32_cnt++; +#endif + cmdp->u.cache64.sg_lst[i].sg_len = sg_dma_len(sl); + } + } else { + cmdp->u.cache.DestAddr= 0xffffffff; + cmdp->u.cache.sg_canz = sgcnt; + for (i=0; i<sgcnt; ++i,++sl) { + cmdp->u.cache.sg_lst[i].sg_ptr = sg_dma_address(sl); +#ifdef GDTH_DMA_STATISTICS + ha->dma32_cnt++; +#endif + cmdp->u.cache.sg_lst[i].sg_len = sg_dma_len(sl); + } } #else - for (i=0; i<sgcnt; ++i,++sl) { - cmdp->u.cache.sg_lst[i].sg_ptr = virt_to_bus(sl->address); - cmdp->u.cache.sg_lst[i].sg_len = (ulong32)sl->length; + if (mode64) { + cmdp->u.cache64.DestAddr= (ulong64)-1; + cmdp->u.cache64.sg_canz = sgcnt; + for (i=0; i<sgcnt; ++i,++sl) { + cmdp->u.cache64.sg_lst[i].sg_ptr = virt_to_bus(sl->address); + cmdp->u.cache64.sg_lst[i].sg_len = (ulong32)sl->length; + } + } else { + cmdp->u.cache.DestAddr= 0xffffffff; + cmdp->u.cache.sg_canz = sgcnt; + for (i=0; i<sgcnt; ++i,++sl) { + cmdp->u.cache.sg_lst[i].sg_ptr = virt_to_bus(sl->address); + cmdp->u.cache.sg_lst[i].sg_len = (ulong32)sl->length; + } } #endif - cmdp->u.cache.sg_canz = (ulong32)i; #ifdef GDTH_STATISTICS - if (max_sg < (ulong32)i) { - max_sg = (ulong32)i; - TRACE3(("GDT: max_sg = %d\n",i)); + if (max_sg < (ulong32)sgcnt) { + max_sg = (ulong32)sgcnt; + TRACE3(("GDT: max_sg = %d\n",max_sg)); } #endif - if (i<GDTH_MAXSG) - cmdp->u.cache.sg_lst[i].sg_len = 0; + } else { -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) scp->SCp.Status = GDTH_MAP_SINGLE; scp->SCp.Message = (read_write == 1 ? - PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE); - phys_addr = pci_map_single(ha->pdev,scp->request_buffer, - scp->request_bufflen,scp->SCp.Message); + PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE); + page = virt_to_page(scp->request_buffer); + offset = (ulong)scp->request_buffer & ~PAGE_MASK; + phys_addr = pci_map_page(ha->pdev,page,offset, + scp->request_bufflen,scp->SCp.Message); scp->SCp.dma_handle = phys_addr; #else phys_addr = virt_to_bus(scp->request_buffer); #endif - if (ha->cache_feat & SCATTER_GATHER) { - cmdp->u.cache.DestAddr = 0xffffffff; - cmdp->u.cache.sg_canz = 1; - cmdp->u.cache.sg_lst[0].sg_ptr = phys_addr; - cmdp->u.cache.sg_lst[0].sg_len = scp->request_bufflen; - cmdp->u.cache.sg_lst[1].sg_len = 0; + if (mode64) { + if (ha->cache_feat & SCATTER_GATHER) { + cmdp->u.cache64.DestAddr = (ulong64)-1; + cmdp->u.cache64.sg_canz = 1; + cmdp->u.cache64.sg_lst[0].sg_ptr = phys_addr; + cmdp->u.cache64.sg_lst[0].sg_len = scp->request_bufflen; + cmdp->u.cache64.sg_lst[1].sg_len = 0; + } else { + cmdp->u.cache64.DestAddr = phys_addr; + cmdp->u.cache64.sg_canz= 0; + } } else { - cmdp->u.cache.DestAddr = phys_addr; - cmdp->u.cache.sg_canz= 0; + if (ha->cache_feat & SCATTER_GATHER) { + cmdp->u.cache.DestAddr = 0xffffffff; + cmdp->u.cache.sg_canz = 1; + cmdp->u.cache.sg_lst[0].sg_ptr = phys_addr; + cmdp->u.cache.sg_lst[0].sg_len = scp->request_bufflen; + cmdp->u.cache.sg_lst[1].sg_len = 0; + } else { + cmdp->u.cache.DestAddr = phys_addr; + cmdp->u.cache.sg_canz= 0; + } } } } - TRACE(("cache cmd: addr. %x sganz %x sgptr0 %x sglen0 %x\n", - cmdp->u.cache.DestAddr,cmdp->u.cache.sg_canz, - cmdp->u.cache.sg_lst[0].sg_ptr, - cmdp->u.cache.sg_lst[0].sg_len)); - TRACE(("cache cmd: cmd %d blockno. %d, blockcnt %d\n", - cmdp->OpCode,cmdp->u.cache.BlockNo,cmdp->u.cache.BlockCnt)); - /* evaluate command size, check space */ - ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.cache.sg_lst) + - (ushort)cmdp->u.cache.sg_canz * sizeof(gdth_sg_str); + if (mode64) { + TRACE(("cache cmd: addr. %x sganz %x sgptr0 %x sglen0 %x\n", + cmdp->u.cache64.DestAddr,cmdp->u.cache64.sg_canz, + cmdp->u.cache64.sg_lst[0].sg_ptr, + cmdp->u.cache64.sg_lst[0].sg_len)); + TRACE(("cache cmd: cmd %d blockno. %d, blockcnt %d\n", + cmdp->OpCode,cmdp->u.cache64.BlockNo,cmdp->u.cache64.BlockCnt)); + ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.cache64.sg_lst) + + (ushort)cmdp->u.cache64.sg_canz * sizeof(gdth_sg64_str); + } else { + TRACE(("cache cmd: addr. %x sganz %x sgptr0 %x sglen0 %x\n", + cmdp->u.cache.DestAddr,cmdp->u.cache.sg_canz, + cmdp->u.cache.sg_lst[0].sg_ptr, + cmdp->u.cache.sg_lst[0].sg_len)); + TRACE(("cache cmd: cmd %d blockno. %d, blockcnt %d\n", + cmdp->OpCode,cmdp->u.cache.BlockNo,cmdp->u.cache.BlockCnt)); + ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.cache.sg_lst) + + (ushort)cmdp->u.cache.sg_canz * sizeof(gdth_sg_str); + } if (ha->cmd_len & 3) ha->cmd_len += (4 - (ha->cmd_len & 3)); @@ -3043,12 +3113,16 @@ register gdth_cmd_str *cmdp; struct scatterlist *sl; ushort i; - ulong32 phys_addr, sense_paddr; - int cmd_index, sgcnt; + dma_addr_t phys_addr, sense_paddr; + int cmd_index, sgcnt, mode64; unchar t,l; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) + struct page *page; + ulong offset; +#endif ha = HADATA(gdth_ctr_tab[hanum]); -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) t = scp->device->id; l = scp->device->lun; #else @@ -3062,6 +3136,8 @@ if (ha->type==GDT_EISA && ha->cmd_cnt>0) return 0; + mode64 = (ha->raw_feat & GDT_64BIT) ? TRUE : FALSE; + cmdp->Service = SCSIRAWSERVICE; cmdp->RequestBuffer = scp; /* search free command index */ @@ -3077,95 +3153,176 @@ if (scp->SCp.sent_command != -1) { cmdp->OpCode = scp->SCp.sent_command; /* special raw cmd. */ cmdp->BoardNode = LOCALBOARD; - cmdp->u.raw.direction = (scp->SCp.phase >> 8); - TRACE2(("special raw cmd 0x%x param 0x%x\n", - cmdp->OpCode, cmdp->u.raw.direction)); + if (mode64) { + cmdp->u.raw64.direction = (scp->SCp.phase >> 8); + TRACE2(("special raw cmd 0x%x param 0x%x\n", + cmdp->OpCode, cmdp->u.raw64.direction)); + /* evaluate command size */ + ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.raw64.sg_lst); + } else { + cmdp->u.raw.direction = (scp->SCp.phase >> 8); + TRACE2(("special raw cmd 0x%x param 0x%x\n", + cmdp->OpCode, cmdp->u.raw.direction)); + /* evaluate command size */ + ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.raw.sg_lst); + } - /* evaluate command size */ - ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.raw.sg_lst); } else { -#if LINUX_VERSION_CODE >= 0x020400 - sense_paddr = pci_map_single(ha->pdev,scp->sense_buffer, - 16,PCI_DMA_FROMDEVICE); - scp->SCp.buffer = (struct scatterlist *)sense_paddr; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) + page = virt_to_page(scp->sense_buffer); + offset = (ulong)scp->sense_buffer & ~PAGE_MASK; + sense_paddr = pci_map_page(ha->pdev,page,offset, + 16,PCI_DMA_FROMDEVICE); + scp->SCp.buffer = (struct scatterlist *)((ulong32)sense_paddr); + /* high part, if 64bit */ + scp->host_scribble = (char *)(ulong32)((ulong64)sense_paddr >> 32); #else sense_paddr = virt_to_bus(scp->sense_buffer); #endif cmdp->OpCode = GDT_WRITE; /* always */ cmdp->BoardNode = LOCALBOARD; - cmdp->u.raw.reserved = 0; - cmdp->u.raw.mdisc_time = 0; - cmdp->u.raw.mcon_time = 0; - cmdp->u.raw.clen = scp->cmd_len; - cmdp->u.raw.target = t; - cmdp->u.raw.lun = l; - cmdp->u.raw.bus = b; - cmdp->u.raw.priority = 0; - cmdp->u.raw.link_p = 0; - cmdp->u.raw.sdlen = scp->request_bufflen; - cmdp->u.raw.sense_len = 16; - cmdp->u.raw.sense_data = sense_paddr; - cmdp->u.raw.direction = - gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN; - memcpy(cmdp->u.raw.cmd,scp->cmnd,12); + if (mode64) { + cmdp->u.raw64.reserved = 0; + cmdp->u.raw64.mdisc_time = 0; + cmdp->u.raw64.mcon_time = 0; + cmdp->u.raw64.clen = scp->cmd_len; + cmdp->u.raw64.target = t; + cmdp->u.raw64.lun = l; + cmdp->u.raw64.bus = b; + cmdp->u.raw64.priority = 0; + cmdp->u.raw64.sdlen = scp->request_bufflen; + cmdp->u.raw64.sense_len = 16; + cmdp->u.raw64.sense_data = sense_paddr; + cmdp->u.raw64.direction = + gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN; + memcpy(cmdp->u.raw64.cmd,scp->cmnd,16); + } else { + cmdp->u.raw.reserved = 0; + cmdp->u.raw.mdisc_time = 0; + cmdp->u.raw.mcon_time = 0; + cmdp->u.raw.clen = scp->cmd_len; + cmdp->u.raw.target = t; + cmdp->u.raw.lun = l; + cmdp->u.raw.bus = b; + cmdp->u.raw.priority = 0; + cmdp->u.raw.link_p = 0; + cmdp->u.raw.sdlen = scp->request_bufflen; + cmdp->u.raw.sense_len = 16; + cmdp->u.raw.sense_data = sense_paddr; + cmdp->u.raw.direction = + gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN; + memcpy(cmdp->u.raw.cmd,scp->cmnd,12); + } if (scp->use_sg) { - cmdp->u.raw.sdata = 0xffffffff; sl = (struct scatterlist *)scp->request_buffer; sgcnt = scp->use_sg; -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) scp->SCp.Status = GDTH_MAP_SG; scp->SCp.Message = PCI_DMA_BIDIRECTIONAL; sgcnt = pci_map_sg(ha->pdev,sl,scp->use_sg,scp->SCp.Message); - for (i=0; i<sgcnt; ++i,++sl) { - cmdp->u.raw.sg_lst[i].sg_ptr = sg_dma_address(sl); - cmdp->u.raw.sg_lst[i].sg_len = sg_dma_len(sl); + if (mode64) { + cmdp->u.raw64.sdata = (ulong64)-1; + cmdp->u.raw64.sg_ranz = sgcnt; + for (i=0; i<sgcnt; ++i,++sl) { + cmdp->u.raw64.sg_lst[i].sg_ptr = sg_dma_address(sl); +#ifdef GDTH_DMA_STATISTICS + if (cmdp->u.raw64.sg_lst[i].sg_ptr > (ulong64)0xffffffff) + ha->dma64_cnt++; + else + ha->dma32_cnt++; +#endif + cmdp->u.raw64.sg_lst[i].sg_len = sg_dma_len(sl); + } + } else { + cmdp->u.raw.sdata = 0xffffffff; + cmdp->u.raw.sg_ranz = sgcnt; + for (i=0; i<sgcnt; ++i,++sl) { + cmdp->u.raw.sg_lst[i].sg_ptr = sg_dma_address(sl); +#ifdef GDTH_DMA_STATISTICS + ha->dma32_cnt++; +#endif + cmdp->u.raw.sg_lst[i].sg_len = sg_dma_len(sl); + } } #else - for (i=0; i<sgcnt; ++i,++sl) { - cmdp->u.raw.sg_lst[i].sg_ptr = virt_to_bus(sl->address); - cmdp->u.raw.sg_lst[i].sg_len = (ulong32)sl->length; + if (mode64) { + cmdp->u.raw64.sdata = (ulong64)-1; + cmdp->u.raw64.sg_ranz = sgcnt; + for (i=0; i<sgcnt; ++i,++sl) { + cmdp->u.raw64.sg_lst[i].sg_ptr = virt_to_bus(sl->address); + cmdp->u.raw64.sg_lst[i].sg_len = (ulong32)sl->length; + } + } else { + cmdp->u.raw.sdata = 0xffffffff; + cmdp->u.raw.sg_ranz = sgcnt; + for (i=0; i<sgcnt; ++i,++sl) { + cmdp->u.raw.sg_lst[i].sg_ptr = virt_to_bus(sl->address); + cmdp->u.raw.sg_lst[i].sg_len = (ulong32)sl->length; + } } #endif - cmdp->u.raw.sg_ranz = (ulong32)i; #ifdef GDTH_STATISTICS - if (max_sg < (ulong32)i) { - max_sg = (ulong32)i; - TRACE3(("GDT: max_sg = %d\n",i)); + if (max_sg < sgcnt) { + max_sg = sgcnt; + TRACE3(("GDT: max_sg = %d\n",sgcnt)); } #endif - if (i<GDTH_MAXSG) - cmdp->u.raw.sg_lst[i].sg_len = 0; + } else { -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) scp->SCp.Status = GDTH_MAP_SINGLE; scp->SCp.Message = PCI_DMA_BIDIRECTIONAL; - phys_addr = pci_map_single(ha->pdev,scp->request_buffer, - scp->request_bufflen,scp->SCp.Message); + page = virt_to_page(scp->request_buffer); + offset = (ulong)scp->request_buffer & ~PAGE_MASK; + phys_addr = pci_map_page(ha->pdev,page,offset, + scp->request_bufflen,scp->SCp.Message); scp->SCp.dma_handle = phys_addr; #else phys_addr = virt_to_bus(scp->request_buffer); #endif - if (ha->raw_feat & SCATTER_GATHER) { - cmdp->u.raw.sdata = 0xffffffff; - cmdp->u.raw.sg_ranz= 1; - cmdp->u.raw.sg_lst[0].sg_ptr = phys_addr; - cmdp->u.raw.sg_lst[0].sg_len = scp->request_bufflen; - cmdp->u.raw.sg_lst[1].sg_len = 0; + if (mode64) { + if (ha->raw_feat & SCATTER_GATHER) { + cmdp->u.raw64.sdata = (ulong64)-1; + cmdp->u.raw64.sg_ranz= 1; + cmdp->u.raw64.sg_lst[0].sg_ptr = phys_addr; + cmdp->u.raw64.sg_lst[0].sg_len = scp->request_bufflen; + cmdp->u.raw64.sg_lst[1].sg_len = 0; + } else { + cmdp->u.raw64.sdata = phys_addr; + cmdp->u.raw64.sg_ranz= 0; + } } else { - cmdp->u.raw.sdata = phys_addr; - cmdp->u.raw.sg_ranz= 0; + if (ha->raw_feat & SCATTER_GATHER) { + cmdp->u.raw.sdata = 0xffffffff; + cmdp->u.raw.sg_ranz= 1; + cmdp->u.raw.sg_lst[0].sg_ptr = phys_addr; + cmdp->u.raw.sg_lst[0].sg_len = scp->request_bufflen; + cmdp->u.raw.sg_lst[1].sg_len = 0; + } else { + cmdp->u.raw.sdata = phys_addr; + cmdp->u.raw.sg_ranz= 0; + } } } - TRACE(("raw cmd: addr. %x sganz %x sgptr0 %x sglen0 %x\n", - cmdp->u.raw.sdata,cmdp->u.raw.sg_ranz, - cmdp->u.raw.sg_lst[0].sg_ptr, - cmdp->u.raw.sg_lst[0].sg_len)); - - /* evaluate command size */ - ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.raw.sg_lst) + - (ushort)cmdp->u.raw.sg_ranz * sizeof(gdth_sg_str); + if (mode64) { + TRACE(("raw cmd: addr. %x sganz %x sgptr0 %x sglen0 %x\n", + cmdp->u.raw64.sdata,cmdp->u.raw64.sg_ranz, + cmdp->u.raw64.sg_lst[0].sg_ptr, + cmdp->u.raw64.sg_lst[0].sg_len)); + /* evaluate command size */ + ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.raw64.sg_lst) + + (ushort)cmdp->u.raw64.sg_ranz * sizeof(gdth_sg64_str); + } else { + TRACE(("raw cmd: addr. %x sganz %x sgptr0 %x sglen0 %x\n", + cmdp->u.raw.sdata,cmdp->u.raw.sg_ranz, + cmdp->u.raw.sg_lst[0].sg_ptr, + cmdp->u.raw.sg_lst[0].sg_len)); + /* evaluate command size */ + ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.raw.sg_lst) + + (ushort)cmdp->u.raw.sg_ranz * sizeof(gdth_sg_str); + } } /* check space */ if (ha->cmd_len & 3) @@ -3215,15 +3372,23 @@ if (cmdp->OpCode == GDT_IOCTL) { TRACE2(("IOCTL\n")); ha->cmd_len = - GDTOFFSOF(gdth_cmd_str,u.ioctl.p_param) + sizeof(ulong32); + GDTOFFSOF(gdth_cmd_str,u.ioctl.p_param) + sizeof(ulong64); } else if (cmdp->Service == CACHESERVICE) { TRACE2(("cache command %d\n",cmdp->OpCode)); - ha->cmd_len = - GDTOFFSOF(gdth_cmd_str,u.cache.sg_lst) + sizeof(gdth_sg_str); + if (ha->cache_feat & GDT_64BIT) + ha->cmd_len = + GDTOFFSOF(gdth_cmd_str,u.cache64.sg_lst) + sizeof(gdth_sg64_str); + else + ha->cmd_len = + GDTOFFSOF(gdth_cmd_str,u.cache.sg_lst) + sizeof(gdth_sg_str); } else if (cmdp->Service == SCSIRAWSERVICE) { - TRACE2(("raw command %d/%d\n",cmdp->OpCode,cmdp->u.raw.cmd[0])); - ha->cmd_len = - GDTOFFSOF(gdth_cmd_str,u.raw.sg_lst) + sizeof(gdth_sg_str); + TRACE2(("raw command %d\n",cmdp->OpCode)); + if (ha->raw_feat & GDT_64BIT) + ha->cmd_len = + GDTOFFSOF(gdth_cmd_str,u.raw64.sg_lst) + sizeof(gdth_sg64_str); + else + ha->cmd_len = + GDTOFFSOF(gdth_cmd_str,u.raw.sg_lst) + sizeof(gdth_sg_str); } if (ha->cmd_len & 3) @@ -3366,10 +3531,14 @@ /* SCSI interface functions */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) static irqreturn_t gdth_interrupt(int irq,void *dev_id,struct pt_regs *regs) +#else +static void gdth_interrupt(int irq,void *dev_id,struct pt_regs *regs) +#endif { register gdth_ha_str *ha; - gdt6m_dpram_str *dp6m_ptr; + gdt6m_dpram_str *dp6m_ptr = NULL; gdt6_dpram_str *dp6_ptr; gdt2_dpram_str *dp2_ptr; Scsi_Cmnd *scp; @@ -3377,13 +3546,23 @@ unchar IStatus; ushort Service; ulong flags = 0; +#ifdef INT_COAL + int coalesced = FALSE; + int next = FALSE; + gdth_coal_status *pcs = NULL; + int act_int_coal = 0; +#endif TRACE(("gdth_interrupt() IRQ %d\n",irq)); /* if polling and not from gdth_wait() -> return */ if (gdth_polling) { if (!gdth_from_wait) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) return IRQ_HANDLED; +#else + return; +#endif } } @@ -3396,174 +3575,261 @@ /* spurious interrupt */ if (!gdth_polling) GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); - return IRQ_HANDLED; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + return IRQ_HANDLED; +#else + return; +#endif } + ha = HADATA(gdth_ctr_tab[hanum]); #ifdef GDTH_STATISTICS ++act_ints; #endif - - ha = HADATA(gdth_ctr_tab[hanum]); - if (ha->type == GDT_EISA) { - if (IStatus & 0x80) { /* error flag */ - IStatus &= ~0x80; - ha->status = inw(ha->bmic + MAILBOXREG+8); - TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); - } else /* no error */ - ha->status = S_OK; - ha->info = inl(ha->bmic + MAILBOXREG+12); - ha->service = inw(ha->bmic + MAILBOXREG+10); - ha->info2 = inl(ha->bmic + MAILBOXREG+4); - outb(0xff, ha->bmic + EDOORREG); /* acknowledge interrupt */ - outb(0x00, ha->bmic + SEMA1REG); /* reset status semaphore */ - } else if (ha->type == GDT_ISA) { - dp2_ptr = (gdt2_dpram_str *)ha->brd; - if (IStatus & 0x80) { /* error flag */ - IStatus &= ~0x80; - ha->status = gdth_readw(&dp2_ptr->u.ic.Status); - TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); - } else /* no error */ - ha->status = S_OK; - ha->info = gdth_readl(&dp2_ptr->u.ic.Info[0]); - ha->service = gdth_readw(&dp2_ptr->u.ic.Service); - ha->info2 = gdth_readl(&dp2_ptr->u.ic.Info[1]); - - gdth_writeb(0xff, &dp2_ptr->io.irqdel); /* acknowledge interrupt */ - gdth_writeb(0, &dp2_ptr->u.ic.Cmd_Index); /* reset command index */ - gdth_writeb(0, &dp2_ptr->io.Sema1); /* reset status semaphore */ - } else if (ha->type == GDT_PCI) { - dp6_ptr = (gdt6_dpram_str *)ha->brd; - if (IStatus & 0x80) { /* error flag */ - IStatus &= ~0x80; - ha->status = gdth_readw(&dp6_ptr->u.ic.Status); - TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); - } else /* no error */ - ha->status = S_OK; - ha->info = gdth_readl(&dp6_ptr->u.ic.Info[0]); - ha->service = gdth_readw(&dp6_ptr->u.ic.Service); - ha->info2 = gdth_readl(&dp6_ptr->u.ic.Info[1]); - - gdth_writeb(0xff, &dp6_ptr->io.irqdel); /* acknowledge interrupt */ - gdth_writeb(0, &dp6_ptr->u.ic.Cmd_Index); /* reset command index */ - gdth_writeb(0, &dp6_ptr->io.Sema1); /* reset status semaphore */ - } else if (ha->type == GDT_PCINEW) { - if (IStatus & 0x80) { /* error flag */ - IStatus &= ~0x80; - ha->status = inw(PTR2USHORT(&ha->plx->status)); - TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); - } else - ha->status = S_OK; - ha->info = inl(PTR2USHORT(&ha->plx->info[0])); - ha->service = inw(PTR2USHORT(&ha->plx->service)); - ha->info2 = inl(PTR2USHORT(&ha->plx->info[1])); - - outb(0xff, PTR2USHORT(&ha->plx->edoor_reg)); - outb(0x00, PTR2USHORT(&ha->plx->sema1_reg)); - } else if (ha->type == GDT_PCIMPR) { - dp6m_ptr = (gdt6m_dpram_str *)ha->brd; - if (IStatus & 0x80) { /* error flag */ - IStatus &= ~0x80; - ha->status = gdth_readw(&dp6m_ptr->i960r.status); - TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); - } else /* no error */ - ha->status = S_OK; - ha->info = gdth_readl(&dp6m_ptr->i960r.info[0]); - ha->service = gdth_readw(&dp6m_ptr->i960r.service); - ha->info2 = gdth_readl(&dp6m_ptr->i960r.info[1]); +#ifdef INT_COAL + /* See if the fw is returning coalesced status */ + if (IStatus == COALINDEX) { + /* Coalesced status. Setup the initial status + buffer pointer and flags */ + pcs = ha->coal_stat; + coalesced = TRUE; + next = TRUE; + } - /* event string */ - if (IStatus == ASYNCINDEX) { - if (ha->service != SCREENSERVICE && - (ha->fw_vers & 0xff) >= 0x1a) { - ha->dvr.severity = - gdth_readb(&((gdt6m_dpram_str *)ha->brd)->i960r.severity); - for (i = 0; i < 256; ++i) { - ha->dvr.event_string[i] = gdth_readb - (&((gdt6m_dpram_str *)ha->brd)->i960r.evt_str[i]); - if (ha->dvr.event_string[i] == 0) - break; + do { + if (coalesced) { + /* For coalesced requests all status + information is found in the status buffer */ + IStatus = (unchar)(pcs->status & 0xff); + } +#endif + + if (ha->type == GDT_EISA) { + if (IStatus & 0x80) { /* error flag */ + IStatus &= ~0x80; + ha->status = inw(ha->bmic + MAILBOXREG+8); + TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); + } else /* no error */ + ha->status = S_OK; + ha->info = inl(ha->bmic + MAILBOXREG+12); + ha->service = inw(ha->bmic + MAILBOXREG+10); + ha->info2 = inl(ha->bmic + MAILBOXREG+4); + + outb(0xff, ha->bmic + EDOORREG); /* acknowledge interrupt */ + outb(0x00, ha->bmic + SEMA1REG); /* reset status semaphore */ + } else if (ha->type == GDT_ISA) { + dp2_ptr = (gdt2_dpram_str *)ha->brd; + if (IStatus & 0x80) { /* error flag */ + IStatus &= ~0x80; + ha->status = gdth_readw(&dp2_ptr->u.ic.Status); + TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); + } else /* no error */ + ha->status = S_OK; + ha->info = gdth_readl(&dp2_ptr->u.ic.Info[0]); + ha->service = gdth_readw(&dp2_ptr->u.ic.Service); + ha->info2 = gdth_readl(&dp2_ptr->u.ic.Info[1]); + + gdth_writeb(0xff, &dp2_ptr->io.irqdel); /* acknowledge interrupt */ + gdth_writeb(0, &dp2_ptr->u.ic.Cmd_Index);/* reset command index */ + gdth_writeb(0, &dp2_ptr->io.Sema1); /* reset status semaphore */ + } else if (ha->type == GDT_PCI) { + dp6_ptr = (gdt6_dpram_str *)ha->brd; + if (IStatus & 0x80) { /* error flag */ + IStatus &= ~0x80; + ha->status = gdth_readw(&dp6_ptr->u.ic.Status); + TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); + } else /* no error */ + ha->status = S_OK; + ha->info = gdth_readl(&dp6_ptr->u.ic.Info[0]); + ha->service = gdth_readw(&dp6_ptr->u.ic.Service); + ha->info2 = gdth_readl(&dp6_ptr->u.ic.Info[1]); + + gdth_writeb(0xff, &dp6_ptr->io.irqdel); /* acknowledge interrupt */ + gdth_writeb(0, &dp6_ptr->u.ic.Cmd_Index);/* reset command index */ + gdth_writeb(0, &dp6_ptr->io.Sema1); /* reset status semaphore */ + } else if (ha->type == GDT_PCINEW) { + if (IStatus & 0x80) { /* error flag */ + IStatus &= ~0x80; + ha->status = inw(PTR2USHORT(&ha->plx->status)); + TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); + } else + ha->status = S_OK; + ha->info = inl(PTR2USHORT(&ha->plx->info[0])); + ha->service = inw(PTR2USHORT(&ha->plx->service)); + ha->info2 = inl(PTR2USHORT(&ha->plx->info[1])); + + outb(0xff, PTR2USHORT(&ha->plx->edoor_reg)); + outb(0x00, PTR2USHORT(&ha->plx->sema1_reg)); + } else if (ha->type == GDT_PCIMPR) { + dp6m_ptr = (gdt6m_dpram_str *)ha->brd; + if (IStatus & 0x80) { /* error flag */ + IStatus &= ~0x80; +#ifdef INT_COAL + if (coalesced) + ha->status = pcs->ext_status && 0xffff; + else +#endif + ha->status = gdth_readw(&dp6m_ptr->i960r.status); + TRACE2(("gdth_interrupt() error %d/%d\n",IStatus,ha->status)); + } else /* no error */ + ha->status = S_OK; +#ifdef INT_COAL + /* get information */ + if (coalesced) { + ha->info = pcs->info0; + ha->info2 = pcs->info1; + ha->service = (pcs->ext_status >> 16) && 0xffff; + } else +#endif + { + ha->info = gdth_readl(&dp6m_ptr->i960r.info[0]); + ha->service = gdth_readw(&dp6m_ptr->i960r.service); + ha->info2 = gdth_readl(&dp6m_ptr->i960r.info[1]); + } + /* event string */ + if (IStatus == ASYNCINDEX) { + if (ha->service != SCREENSERVICE && + (ha->fw_vers & 0xff) >= 0x1a) { + ha->dvr.severity = gdth_readb + (&((gdt6m_dpram_str *)ha->brd)->i960r.severity); + for (i = 0; i < 256; ++i) { + ha->dvr.event_string[i] = gdth_readb + (&((gdt6m_dpram_str *)ha->brd)->i960r.evt_str[i]); + if (ha->dvr.event_string[i] == 0) + break; + } } } +#ifdef INT_COAL + /* Make sure that non coalesced interrupts get cleared + before being handled by gdth_async_event/gdth_sync_event */ + if (!coalesced) +#endif + { + gdth_writeb(0xff, &dp6m_ptr->i960r.edoor_reg); + gdth_writeb(0, &dp6m_ptr->i960r.sema1_reg); + } + } else { + TRACE2(("gdth_interrupt() unknown controller type\n")); + if (!gdth_polling) + GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + return IRQ_HANDLED; +#else + return; +#endif } - gdth_writeb(0xff, &dp6m_ptr->i960r.edoor_reg); - gdth_writeb(0, &dp6m_ptr->i960r.sema1_reg); - } else { - TRACE2(("gdth_interrupt() unknown controller type\n")); - if (!gdth_polling) - GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); - return IRQ_HANDLED; - } - TRACE(("gdth_interrupt() index %d stat %d info %d\n", - IStatus,ha->status,ha->info)); + TRACE(("gdth_interrupt() index %d stat %d info %d\n", + IStatus,ha->status,ha->info)); - if (gdth_from_wait) { - wait_hanum = hanum; - wait_index = (int)IStatus; - } + if (gdth_from_wait) { + wait_hanum = hanum; + wait_index = (int)IStatus; + } - if (IStatus == ASYNCINDEX) { - TRACE2(("gdth_interrupt() async. event\n")); - gdth_async_event(hanum); - if (!gdth_polling) - GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); - gdth_next(hanum); - return IRQ_HANDLED; - } + if (IStatus == ASYNCINDEX) { + TRACE2(("gdth_interrupt() async. event\n")); + gdth_async_event(hanum); + if (!gdth_polling) + GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); + gdth_next(hanum); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + return IRQ_HANDLED; +#else + return; +#endif + } - if (IStatus == SPEZINDEX) { - TRACE2(("Service unknown or not initialized !\n")); - ha->dvr.size = sizeof(ha->dvr.eu.driver); - ha->dvr.eu.driver.ionode = hanum; - gdth_store_event(ha, ES_DRIVER, 4, &ha->dvr); - if (!gdth_polling) - GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); - return IRQ_HANDLED; - } - scp = ha->cmd_tab[IStatus-2].cmnd; - Service = ha->cmd_tab[IStatus-2].service; - ha->cmd_tab[IStatus-2].cmnd = UNUSED_CMND; - if (scp == UNUSED_CMND) { - TRACE2(("gdth_interrupt() index to unused command (%d)\n",IStatus)); - ha->dvr.size = sizeof(ha->dvr.eu.driver); - ha->dvr.eu.driver.ionode = hanum; - ha->dvr.eu.driver.index = IStatus; - gdth_store_event(ha, ES_DRIVER, 1, &ha->dvr); - if (!gdth_polling) - GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); - return IRQ_HANDLED; - } - if (scp == INTERNAL_CMND) { - TRACE(("gdth_interrupt() answer to internal command\n")); + if (IStatus == SPEZINDEX) { + TRACE2(("Service unknown or not initialized !\n")); + ha->dvr.size = sizeof(ha->dvr.eu.driver); + ha->dvr.eu.driver.ionode = hanum; + gdth_store_event(ha, ES_DRIVER, 4, &ha->dvr); + if (!gdth_polling) + GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + return IRQ_HANDLED; +#else + return; +#endif + } + scp = ha->cmd_tab[IStatus-2].cmnd; + Service = ha->cmd_tab[IStatus-2].service; + ha->cmd_tab[IStatus-2].cmnd = UNUSED_CMND; + if (scp == UNUSED_CMND) { + TRACE2(("gdth_interrupt() index to unused command (%d)\n",IStatus)); + ha->dvr.size = sizeof(ha->dvr.eu.driver); + ha->dvr.eu.driver.ionode = hanum; + ha->dvr.eu.driver.index = IStatus; + gdth_store_event(ha, ES_DRIVER, 1, &ha->dvr); + if (!gdth_polling) + GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + return IRQ_HANDLED; +#else + return; +#endif + } + if (scp == INTERNAL_CMND) { + TRACE(("gdth_interrupt() answer to internal command\n")); + if (!gdth_polling) + GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + return IRQ_HANDLED; +#else + return; +#endif + } + + TRACE(("gdth_interrupt() sync. status\n")); + rval = gdth_sync_event(hanum,Service,IStatus,scp); if (!gdth_polling) GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); - return IRQ_HANDLED; - } - - TRACE(("gdth_interrupt() sync. status\n")); - rval = gdth_sync_event(hanum,Service,IStatus,scp); - if (!gdth_polling) - GDTH_UNLOCK_HA((gdth_ha_str *)dev_id,flags); - if (rval == 2) { - gdth_putq(hanum,scp,scp->SCp.this_residual); - } else if (rval == 1) { -#if LINUX_VERSION_CODE >= 0x02053C - GDTH_LOCK_SCSI_DONE(scp->device->host, flags); - scp->scsi_done(scp); - GDTH_UNLOCK_SCSI_DONE(scp->device->host, flags); -#elif LINUX_VERSION_CODE >= 0x020503 - GDTH_LOCK_SCSI_DONE(scp->host, flags); - scp->scsi_done(scp); - GDTH_UNLOCK_SCSI_DONE(scp->host, flags); -#else - GDTH_LOCK_SCSI_DONE(flags); - scp->scsi_done(scp); - GDTH_UNLOCK_SCSI_DONE(flags); + if (rval == 2) { + gdth_putq(hanum,scp,scp->SCp.this_residual); + } else if (rval == 1) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + GDTH_LOCK_SCSI_DONE(scp->device->host, flags); + scp->scsi_done(scp); + GDTH_UNLOCK_SCSI_DONE(scp->device->host, flags); +#else + GDTH_LOCK_SCSI_DONE(flags); + scp->scsi_done(scp); + GDTH_UNLOCK_SCSI_DONE(flags); #endif + } + +#ifdef INT_COAL + if (coalesced) { + /* go to the next status in the status buffer */ + ++pcs; +#ifdef GDTH_STATISTICS + ++act_int_coal; + if (act_int_coal > max_int_coal) { + max_int_coal = act_int_coal; + printk("GDT: max_int_coal = %d\n",(ushort)max_int_coal); + } +#endif + /* see if there is another status */ + if (pcs->status == 0) + /* Stop the coalesce loop */ + next = FALSE; + } + } while (next); + + /* coalescing only for new GDT_PCIMPR controllers available */ + if (ha->type == GDT_PCIMPR && coalesced) { + gdth_writeb(0xff, &dp6m_ptr->i960r.edoor_reg); + gdth_writeb(0, &dp6m_ptr->i960r.sema1_reg); } +#endif + gdth_next(hanum); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) return IRQ_HANDLED; +#endif } static int gdth_sync_event(int hanum,int service,unchar index,Scsi_Cmnd *scp) @@ -3579,10 +3845,11 @@ service,ha->status)); if (service == SCREENSERVICE) { - msg = (gdth_msg_str *)ha->pscratch; - ha->scratch_busy = FALSE; + msg = ha->pmsg; TRACE(("len: %d, answer: %d, ext: %d, alen: %d\n", msg->msg_len,msg->msg_answer,msg->msg_ext,msg->msg_alen)); + if (msg->msg_len > MSGLEN+1) + msg->msg_len = MSGLEN+1; if (msg->msg_len) if (!(msg->msg_answer && msg->msg_ext)) { msg->msg_text[msg->msg_len] = '\0'; @@ -3600,11 +3867,10 @@ cmdp->BoardNode = LOCALBOARD; cmdp->u.screen.reserved = 0; cmdp->u.screen.su.msg.msg_handle= msg->msg_handle; - cmdp->u.screen.su.msg.msg_addr = ha->scratch_phys; - ha->scratch_busy = TRUE; + cmdp->u.screen.su.msg.msg_addr = ha->msg_phys; ha->cmd_offs_dpmem = 0; ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.screen.su.msg.msg_addr) - + sizeof(ulong32); + + sizeof(ulong64); ha->cmd_cnt = 0; gdth_copy_command(hanum); gdth_release_event(hanum); @@ -3635,11 +3901,10 @@ cmdp->BoardNode = LOCALBOARD; cmdp->u.screen.reserved = 0; cmdp->u.screen.su.msg.msg_handle= msg->msg_handle; - cmdp->u.screen.su.msg.msg_addr = ha->scratch_phys; - ha->scratch_busy = TRUE; + cmdp->u.screen.su.msg.msg_addr = ha->msg_phys; ha->cmd_offs_dpmem = 0; ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.screen.su.msg.msg_addr) - + sizeof(ulong32); + + sizeof(ulong64); ha->cmd_cnt = 0; gdth_copy_command(hanum); gdth_release_event(hanum); @@ -3648,7 +3913,7 @@ printk("\n"); } else { -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; t = scp->device->id; #else @@ -3666,16 +3931,20 @@ /* retry */ return 2; } -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13) if (scp->SCp.Status == GDTH_MAP_SG) pci_unmap_sg(ha->pdev,scp->request_buffer, scp->use_sg,scp->SCp.Message); else if (scp->SCp.Status == GDTH_MAP_SINGLE) - pci_unmap_single(ha->pdev,scp->SCp.dma_handle, - scp->request_bufflen,scp->SCp.Message); - if (scp->SCp.buffer) - pci_unmap_single(ha->pdev,(dma_addr_t)scp->SCp.buffer, - 16,PCI_DMA_FROMDEVICE); + pci_unmap_page(ha->pdev,scp->SCp.dma_handle, + scp->request_bufflen,scp->SCp.Message); + if (scp->SCp.buffer) { + dma_addr_t addr; + addr = (dma_addr_t)(ulong32)scp->SCp.buffer; + if (scp->host_scribble) + addr += (dma_addr_t)((ulong64)(ulong32)scp->host_scribble << 32); + pci_unmap_page(ha->pdev,addr,16,PCI_DMA_FROMDEVICE); + } #endif if (ha->status == S_OK) { scp->SCp.Status = S_OK; @@ -3754,10 +4023,7 @@ scp->sense_buffer[2] = NOT_READY; scp->result = (DID_OK << 16) | (CHECK_CONDITION << 1); } -#if LINUX_VERSION_CODE >= 0x010300 - if (scp->done != gdth_scsi_done) -#endif - { + if (scp->done != gdth_scsi_done) { ha->dvr.size = sizeof(ha->dvr.eu.sync); ha->dvr.eu.sync.ionode = hanum; ha->dvr.eu.sync.service = service; @@ -3946,13 +4212,11 @@ static int gdth_async_event(int hanum) { gdth_ha_str *ha; - gdth_msg_str *msg; gdth_cmd_str *cmdp; int cmd_index; ha = HADATA(gdth_ctr_tab[hanum]); cmdp= ha->pccb; - msg = (gdth_msg_str *)ha->pscratch; TRACE2(("gdth_async_event() ha %d serv %d\n", hanum,ha->service)); @@ -3968,11 +4232,10 @@ cmdp->BoardNode = LOCALBOARD; cmdp->u.screen.reserved = 0; cmdp->u.screen.su.msg.msg_handle= MSG_INV_HANDLE; - cmdp->u.screen.su.msg.msg_addr = ha->scratch_phys; - ha->scratch_busy = TRUE; + cmdp->u.screen.su.msg.msg_addr = ha->msg_phys; ha->cmd_offs_dpmem = 0; ha->cmd_len = GDTOFFSOF(gdth_cmd_str,u.screen.su.msg.msg_addr) - + sizeof(ulong32); + + sizeof(ulong64); ha->cmd_cnt = 0; gdth_copy_command(hanum); if (ha->type == GDT_EISA) @@ -4192,10 +4455,11 @@ GDTH_INITFUNC(int, gdth_detect(Scsi_Host_Template *shtp)) { struct Scsi_Host *shp; + gdth_pci_str pcistr[MAXHA]; gdth_ha_str *ha; ulong32 isa_bios; ushort eisa_slot; - int i,hanum,cnt,ctr; + int i,hanum,cnt,ctr,err; unchar b; @@ -4218,11 +4482,11 @@ TRACE(("gdth_detect()\n")); if (disable) { - printk("GDT: Controller driver disabled from command line !\n"); + printk("GDT-HA: Controller driver disabled from command line !\n"); return 0; } - printk("GDT: Storage RAID Controller Driver. Version: %s \n",GDTH_VERSION_STR); + printk("GDT-HA: Storage RAID Controller Driver. Version: %s \n",GDTH_VERSION_STR); /* initializations */ gdth_polling = TRUE; b = 0; gdth_clear_events(); @@ -4232,6 +4496,7 @@ /* scanning for controllers, at first: ISA controller */ for (isa_bios=0xc8000UL; isa_bios<=0xd8000UL; isa_bios+=0x8000UL) { dma_addr_t scratch_dma_handle; + scratch_dma_handle = 0; if (gdth_ctr_count >= MAXHA) break; @@ -4252,23 +4517,14 @@ printk("Configuring GDT-ISA HA at BIOS 0x%05X IRQ %u DRQ %u\n", isa_bios,ha->irq,ha->drq); -#if LINUX_VERSION_CODE >= 0x010346 - if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth",ha)) -#else - if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth")) -#endif - { + if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth",ha)) { printk("GDT-ISA: Unable to allocate IRQ\n"); scsi_unregister(shp); continue; } if (request_dma(ha->drq,"gdth")) { printk("GDT-ISA: Unable to allocate DMA channel\n"); -#if LINUX_VERSION_CODE >= 0x010346 free_irq(ha->irq,ha); -#else - free_irq(ha->irq); -#endif scsi_unregister(shp); continue; } @@ -4286,15 +4542,34 @@ ha->pccb = CMDDATA(shp); ha->ccb_phys = 0L; -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) ha->pdev = NULL; ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, &scratch_dma_handle); - ha->scratch_phys = (ulong32)scratch_dma_handle; + ha->scratch_phys = scratch_dma_handle; + ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str), + &scratch_dma_handle); + ha->msg_phys = scratch_dma_handle; +#ifdef INT_COAL + ha->coal_stat = (gdth_coal_status *) + pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) * + MAXOFFSETS, &scratch_dma_handle); + ha->coal_stat_phys = scratch_dma_handle; +#endif #else ha->pscratch = scsi_init_malloc(GDTH_SCRATCH, GFP_ATOMIC | GFP_DMA); if (ha->pscratch) ha->scratch_phys = virt_to_bus(ha->pscratch); + ha->pmsg = scsi_init_malloc(sizeof(gdth_msg_str), GFP_ATOMIC | GFP_DMA); + if (ha->pmsg) + ha->msg_phys = virt_to_bus(ha->pmsg); +#ifdef INT_COAL + ha->coal_stat = + scsi_init_malloc(sizeof(gdth_coal_status) * MAXOFFSETS, + GFP_ATOMIC | GFP_DMA); + if (ha->coal_stat) + ha->coal_stat_phys = virt_to_bus(ha->coal_stat); +#endif #endif ha->scratch_busy = FALSE; ha->req_first = NULL; @@ -4305,23 +4580,36 @@ ha->cmd_tab[i].cmnd = UNUSED_CMND; ha->scan_mode = rescan ? 0x10 : 0; - if (ha->pscratch == NULL || !gdth_search_drives(hanum)) { + if (ha->pscratch == NULL || ha->pmsg == NULL || + !gdth_search_drives(hanum)) { printk("GDT-ISA: Error during device scan\n"); --gdth_ctr_count; --gdth_ctr_vcount; - if (ha->pscratch != NULL) { -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +#ifdef INT_COAL + if (ha->coal_stat) + pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) * + MAXOFFSETS, ha->coal_stat, + ha->coal_stat_phys); +#endif + if (ha->pscratch) pci_free_consistent(ha->pdev, GDTH_SCRATCH, ha->pscratch, ha->scratch_phys); -#else + if (ha->pmsg) + pci_free_consistent(ha->pdev, sizeof(gdth_msg_str), + ha->pmsg, ha->msg_phys); +#else +#ifdef INT_COAL + if (ha->coal_stat) + scsi_init_free((void *)ha->coal_stat, + sizeof(gdth_coal_status) * MAXOFFSETS); +#endif + if (ha->pscratch) scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH); + if (ha->pmsg) + scsi_init_free((void *)ha->pmsg, sizeof(gdth_msg_str)); #endif - } -#if LINUX_VERSION_CODE >= 0x010346 free_irq(ha->irq,ha); -#else - free_irq(ha->irq); -#endif scsi_unregister(shp); continue; } @@ -4329,13 +4617,18 @@ hdr_channel = ha->bus_cnt; ha->virt_bus = hdr_channel; -#if LINUX_VERSION_CODE >= 0x020000 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && \ + LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) + shp->highmem_io = 0; +#endif + if (ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT) + shp->max_cmd_len = 16; +#endif shp->max_id = ha->tid_cnt; shp->max_lun = MAXLUN; shp->max_channel = virt_ctr ? 0 : ha->bus_cnt; - if (virt_ctr) -#endif - { + if (virt_ctr) { virt_ctr = 1; /* register addit. SCSI channels as virtual controllers */ for (b = 1; b < ha->bus_cnt + 1; ++b) { @@ -4358,6 +4651,7 @@ /* scanning for EISA controllers */ for (eisa_slot=0x1000; eisa_slot<=0x8000; eisa_slot+=0x1000) { dma_addr_t scratch_dma_handle; + scratch_dma_handle = 0; if (gdth_ctr_count >= MAXHA) break; @@ -4373,14 +4667,9 @@ } /* controller found and initialized */ printk("Configuring GDT-EISA HA at Slot %d IRQ %u\n", - eisa_slot>>12,ha->irq); + eisa_slot>>12,ha->irq); -#if LINUX_VERSION_CODE >= 0x010346 - if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth",ha)) -#else - if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth")) -#endif - { + if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth",ha)) { printk("GDT-EISA: Unable to allocate IRQ\n"); scsi_unregister(shp); continue; @@ -4399,11 +4688,20 @@ ha->pccb = CMDDATA(shp); ha->ccb_phys = 0L; -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) ha->pdev = NULL; ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, &scratch_dma_handle); - ha->scratch_phys = (ulong32) scratch_dma_handle; + ha->scratch_phys = scratch_dma_handle; + ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str), + &scratch_dma_handle); + ha->msg_phys = scratch_dma_handle; +#ifdef INT_COAL + ha->coal_stat = (gdth_coal_status *) + pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) * + MAXOFFSETS, &scratch_dma_handle); + ha->coal_stat_phys = scratch_dma_handle; +#endif ha->ccb_phys = pci_map_single(ha->pdev,ha->pccb, sizeof(gdth_cmd_str),PCI_DMA_BIDIRECTIONAL); @@ -4411,6 +4709,16 @@ ha->pscratch = scsi_init_malloc(GDTH_SCRATCH, GFP_ATOMIC | GFP_DMA); if (ha->pscratch) ha->scratch_phys = virt_to_bus(ha->pscratch); + ha->pmsg = scsi_init_malloc(sizeof(gdth_msg_str), GFP_ATOMIC | GFP_DMA); + if (ha->pmsg) + ha->msg_phys = virt_to_bus(ha->pmsg); +#ifdef INT_COAL + ha->coal_stat = + scsi_init_malloc(sizeof(gdth_coal_status) * MAXOFFSETS, + GFP_ATOMIC | GFP_DMA); + if (ha->coal_stat) + ha->coal_stat_phys = virt_to_bus(ha->coal_stat); +#endif ha->ccb_phys = virt_to_bus(ha->pccb); #endif ha->scratch_busy = FALSE; @@ -4419,28 +4727,42 @@ if (max_ids > 0 && max_ids < ha->tid_cnt) ha->tid_cnt = max_ids; for (i=0; i<GDTH_MAXCMDS; ++i) - ha->cmd_tab[i].cmnd = UNUSED_CMND; + ha->cmd_tab[i].cmnd = UNUSED_CMND; ha->scan_mode = rescan ? 0x10 : 0; - if (ha->pscratch == NULL || !gdth_search_drives(hanum)) { + if (ha->pscratch == NULL || ha->pmsg == NULL || + !gdth_search_drives(hanum)) { printk("GDT-EISA: Error during device scan\n"); --gdth_ctr_count; --gdth_ctr_vcount; - if (ha->pscratch != NULL) { -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +#ifdef INT_COAL + if (ha->coal_stat) + pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) * + MAXOFFSETS, ha->coal_stat, + ha->coal_stat_phys); +#endif + if (ha->pscratch) pci_free_consistent(ha->pdev, GDTH_SCRATCH, ha->pscratch, ha->scratch_phys); + if (ha->pmsg) + pci_free_consistent(ha->pdev, sizeof(gdth_msg_str), + ha->pmsg, ha->msg_phys); + if (ha->ccb_phys) pci_unmap_single(ha->pdev,ha->ccb_phys, - sizeof(gdth_cmd_str),PCI_DMA_BIDIRECTIONAL); + sizeof(gdth_cmd_str),PCI_DMA_BIDIRECTIONAL); #else +#ifdef INT_COAL + if (ha->coal_stat) + scsi_init_free((void *)ha->coal_stat, + sizeof(gdth_coal_status) * MAXOFFSETS); +#endif + if (ha->pscratch) scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH); + if (ha->pmsg) + scsi_init_free((void *)ha->pmsg, sizeof(gdth_msg_str)); #endif - } -#if LINUX_VERSION_CODE >= 0x010346 free_irq(ha->irq,ha); -#else - free_irq(ha->irq); -#endif scsi_unregister(shp); continue; } @@ -4448,13 +4770,18 @@ hdr_channel = ha->bus_cnt; ha->virt_bus = hdr_channel; -#if LINUX_VERSION_CODE >= 0x020000 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && \ + LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) + shp->highmem_io = 0; +#endif + if (ha->cache_feat & ha->raw_feat & ha->screen_feat & GDT_64BIT) + shp->max_cmd_len = 16; +#endif shp->max_id = ha->tid_cnt; shp->max_lun = MAXLUN; shp->max_channel = virt_ctr ? 0 : ha->bus_cnt; - if (virt_ctr) -#endif - { + if (virt_ctr) { virt_ctr = 1; /* register addit. SCSI channels as virtual controllers */ for (b = 1; b < ha->bus_cnt + 1; ++b) { @@ -4475,124 +4802,173 @@ } /* scanning for PCI controllers */ -#if LINUX_VERSION_CODE < 0x2015C - if (pcibios_present()) -#endif - { - gdth_pci_str pcistr[MAXHA]; + cnt = gdth_search_pci(pcistr); + printk("GDT-HA: Found %d PCI Storage RAID Controllers\n",cnt); + gdth_sort_pci(pcistr,cnt); + for (ctr = 0; ctr < cnt; ++ctr) { + dma_addr_t scratch_dma_handle; + scratch_dma_handle = 0; - cnt = gdth_search_pci(pcistr); - printk("GDT: Found %d PCI Storage RAID Controllers\n",cnt); - gdth_sort_pci(pcistr,cnt); - for (ctr = 0; ctr < cnt; ++ctr) { - dma_addr_t scratch_dma_handle; + if (gdth_ctr_count >= MAXHA) + break; + shp = scsi_register(shtp,sizeof(gdth_ext_str)); + if (shp == NULL) + continue; + + ha = HADATA(shp); + if (!gdth_init_pci(&pcistr[ctr],ha)) { + scsi_unregister(shp); + continue; + } + /* controller found and initialized */ + printk("Configuring GDT-PCI HA at %d/%d IRQ %u\n", + pcistr[ctr].bus,PCI_SLOT(pcistr[ctr].device_fn),ha->irq); - if (gdth_ctr_count >= MAXHA) - break; - shp = scsi_register(shtp,sizeof(gdth_ext_str)); - if (shp == NULL) - continue; - - ha = HADATA(shp); - if (!gdth_init_pci(&pcistr[ctr],ha)) { - scsi_unregister(shp); - continue; - } - /* controller found and initialized */ - printk("GDT CTR%d: Configuring GDT-PCI HA at %d/%d IRQ %u\n", - ctr,pcistr[ctr].bus,PCI_SLOT(pcistr[ctr].device_fn),ha->irq); - -#if LINUX_VERSION_CODE >= 0x010346 - if (request_irq(ha->irq, gdth_interrupt, - SA_INTERRUPT|SA_SHIRQ, "gdth", ha)) -#else - if (request_irq(ha->irq, gdth_interrupt, - SA_INTERRUPT|SA_SHIRQ, "gdth")) -#endif - { - printk("GDT-PCI: Unable to allocate IRQ\n"); - scsi_unregister(shp); - continue; - } - shp->unchecked_isa_dma = 0; - shp->irq = ha->irq; - shp->dma_channel = 0xff; - hanum = gdth_ctr_count; - gdth_ctr_tab[gdth_ctr_count++] = shp; - gdth_ctr_vtab[gdth_ctr_vcount++] = shp; - - NUMDATA(shp)->hanum = (ushort)hanum; - NUMDATA(shp)->busnum= 0; - - ha->pccb = CMDDATA(shp); - ha->ccb_phys = 0L; -#if LINUX_VERSION_CODE >= 0x020400 - ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, - &scratch_dma_handle); - ha->scratch_phys = (ulong32)scratch_dma_handle; -#else - ha->pscratch = scsi_init_malloc(GDTH_SCRATCH, GFP_ATOMIC | GFP_DMA); - if (ha->pscratch) - ha->scratch_phys = virt_to_bus(ha->pscratch); -#endif - ha->scratch_busy = FALSE; - ha->req_first = NULL; - ha->tid_cnt = pcistr[ctr].device_id >= 0x200 ? MAXID : MAX_HDRIVES; - if (max_ids > 0 && max_ids < ha->tid_cnt) - ha->tid_cnt = max_ids; - for (i=0; i<GDTH_MAXCMDS; ++i) - ha->cmd_tab[i].cmnd = UNUSED_CMND; - ha->scan_mode = rescan ? 0x10 : 0; - - if (ha->pscratch == NULL || !gdth_search_drives(hanum)) { - printk("GDT-PCI: Error during device scan\n"); - --gdth_ctr_count; - --gdth_ctr_vcount; - if (ha->pscratch != NULL) { -#if LINUX_VERSION_CODE >= 0x020400 - pci_free_consistent(ha->pdev, GDTH_SCRATCH, - ha->pscratch, ha->scratch_phys); -#else - scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH); + if (request_irq(ha->irq, gdth_interrupt, + SA_INTERRUPT|SA_SHIRQ, "gdth", ha)) + { + printk("GDT-PCI: Unable to allocate IRQ\n"); + scsi_unregister(shp); + continue; + } + shp->unchecked_isa_dma = 0; + shp->irq = ha->irq; + shp->dma_channel = 0xff; + hanum = gdth_ctr_count; + gdth_ctr_tab[gdth_ctr_count++] = shp; + gdth_ctr_vtab[gdth_ctr_vcount++] = shp; + + NUMDATA(shp)->hanum = (ushort)hanum; + NUMDATA(shp)->busnum= 0; + + ha->pccb = CMDDATA(shp); + ha->ccb_phys = 0L; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + ha->pscratch = pci_alloc_consistent(ha->pdev, GDTH_SCRATCH, + &scratch_dma_handle); + ha->scratch_phys = scratch_dma_handle; + ha->pmsg = pci_alloc_consistent(ha->pdev, sizeof(gdth_msg_str), + &scratch_dma_handle); + ha->msg_phys = scratch_dma_handle; +#ifdef INT_COAL + ha->coal_stat = (gdth_coal_status *) + pci_alloc_consistent(ha->pdev, sizeof(gdth_coal_status) * + MAXOFFSETS, &scratch_dma_handle); + ha->coal_stat_phys = scratch_dma_handle; +#endif +#else + ha->pscratch = scsi_init_malloc(GDTH_SCRATCH, GFP_ATOMIC | GFP_DMA); + if (ha->pscratch) + ha->scratch_phys = virt_to_bus(ha->pscratch); + ha->pmsg = scsi_init_malloc(sizeof(gdth_msg_str), GFP_ATOMIC | GFP_DMA); + if (ha->pmsg) + ha->msg_phys = virt_to_bus(ha->pmsg); +#ifdef INT_COAL + ha->coal_stat = + scsi_init_malloc(sizeof(gdth_coal_status) * MAXOFFSETS, + GFP_ATOMIC | GFP_DMA); + if (ha->coal_stat) + ha->coal_stat_phys = virt_to_bus(ha->coal_stat); #endif - } -#if LINUX_VERSION_CODE >= 0x010346 - free_irq(ha->irq,ha); -#else - free_irq(ha->irq); #endif - scsi_unregister(shp); - continue; - } + ha->scratch_busy = FALSE; + ha->req_first = NULL; + ha->tid_cnt = pcistr[ctr].device_id >= 0x200 ? MAXID : MAX_HDRIVES; + if (max_ids > 0 && max_ids < ha->tid_cnt) + ha->tid_cnt = max_ids; + for (i=0; i<GDTH_MAXCMDS; ++i) + ha->cmd_tab[i].cmnd = UNUSED_CMND; + ha->scan_mode = rescan ? 0x10 : 0; + + err = FALSE; + if (ha->pscratch == NULL || ha->pmsg == NULL || + !gdth_search_drives(hanum)) { + err = TRUE; + } else { if (hdr_channel < 0 || hdr_channel > ha->bus_cnt) hdr_channel = ha->bus_cnt; ha->virt_bus = hdr_channel; -#if LINUX_VERSION_CODE >= 0x020000 - shp->max_id = ha->tid_cnt; - shp->max_lun = MAXLUN; - shp->max_channel = virt_ctr ? 0 : ha->bus_cnt; - if (virt_ctr) -#endif - { - virt_ctr = 1; - /* register addit. SCSI channels as virtual controllers */ - for (b = 1; b < ha->bus_cnt + 1; ++b) { - shp = scsi_register(shtp,sizeof(gdth_num_str)); - shp->unchecked_isa_dma = 0; - shp->irq = ha->irq; - shp->dma_channel = 0xff; - gdth_ctr_vtab[gdth_ctr_vcount++] = shp; - NUMDATA(shp)->hanum = (ushort)hanum; - NUMDATA(shp)->busnum = b; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + scsi_set_device(shp, &pcistr[ctr].pdev->dev); +#else + scsi_set_pci_device(shp, pcistr[ctr].pdev); +#endif + if (!(ha->cache_feat & ha->raw_feat & ha->screen_feat &GDT_64BIT)|| + /* 64-bit DMA only supported from FW >= x.43 */ + (!ha->dma64_support)) { + if (pci_set_dma_mask(pcistr[ctr].pdev, 0xffffffff)) { + printk(KERN_WARNING "GDT-PCI %d: Unable to set 32-bit DMA\n", hanum); + err = TRUE; + } + } else { + shp->max_cmd_len = 16; + if (!pci_set_dma_mask(pcistr[ctr].pdev, 0xffffffffffffffffULL)) { + printk("GDT-PCI %d: 64-bit DMA enabled\n", hanum); + } else if (pci_set_dma_mask(pcistr[ctr].pdev, 0xffffffff)) { + printk(KERN_WARNING "GDT-PCI %d: Unable to set 64/32-bit DMA\n", hanum); + err = TRUE; } - } + } +#endif + } - GDTH_INIT_LOCK_HA(ha); - gdth_enable_int(hanum); + if (err) { + printk("GDT-PCI %d: Error during device scan\n", hanum); + --gdth_ctr_count; + --gdth_ctr_vcount; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +#ifdef INT_COAL + if (ha->coal_stat) + pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) * + MAXOFFSETS, ha->coal_stat, + ha->coal_stat_phys); +#endif + if (ha->pscratch) + pci_free_consistent(ha->pdev, GDTH_SCRATCH, + ha->pscratch, ha->scratch_phys); + if (ha->pmsg) + pci_free_consistent(ha->pdev, sizeof(gdth_msg_str), + ha->pmsg, ha->msg_phys); +#else +#ifdef INT_COAL + if (ha->coal_stat) + scsi_init_free((void *)ha->coal_stat, + sizeof(gdth_coal_status) * MAXOFFSETS); +#endif + if (ha->pscratch) + scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH); + if (ha->pmsg) + scsi_init_free((void *)ha->pmsg, sizeof(gdth_msg_str)); +#endif + free_irq(ha->irq,ha); + scsi_unregister(shp); + continue; } - } + shp->max_id = ha->tid_cnt; + shp->max_lun = MAXLUN; + shp->max_channel = virt_ctr ? 0 : ha->bus_cnt; + if (virt_ctr) { + virt_ctr = 1; + /* register addit. SCSI channels as virtual controllers */ + for (b = 1; b < ha->bus_cnt + 1; ++b) { + shp = scsi_register(shtp,sizeof(gdth_num_str)); + shp->unchecked_isa_dma = 0; + shp->irq = ha->irq; + shp->dma_channel = 0xff; + gdth_ctr_vtab[gdth_ctr_vcount++] = shp; + NUMDATA(shp)->hanum = (ushort)hanum; + NUMDATA(shp)->busnum = b; + } + } + + + GDTH_INIT_LOCK_HA(ha); + gdth_enable_int(hanum); + } + TRACE2(("gdth_detect() %d controller detected\n",gdth_ctr_count)); if (gdth_ctr_count > 0) { #ifdef GDTH_STATISTICS @@ -4603,12 +4979,8 @@ gdth_timer.function = gdth_timeout; add_timer(&gdth_timer); #endif -#ifdef GDTH_IOCTL_CHRDEV major = register_chrdev(0,"gdth",&gdth_fops); -#endif -#if LINUX_VERSION_CODE >= 0x020100 register_reboot_notifier(&gdth_notifier); -#endif } gdth_polling = FALSE; return gdth_ctr_vcount; @@ -4624,30 +4996,47 @@ if (NUMDATA(shp)->busnum == 0) { hanum = NUMDATA(shp)->hanum; ha = HADATA(gdth_ctr_tab[hanum]); -#if LINUX_VERSION_CODE >= 0x010300 - gdth_flush(hanum); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + if (ha->sdev) { + scsi_free_host_dev(ha->sdev); + ha->sdev = NULL; + } #endif + gdth_flush(hanum); if (shp->irq) { -#if LINUX_VERSION_CODE >= 0x010346 free_irq(shp->irq,ha); -#else - free_irq(shp->irq); -#endif } #ifndef __ia64__ if (shp->dma_channel != 0xff) { free_dma(shp->dma_channel); } #endif -#if LINUX_VERSION_CODE >= 0x020400 - pci_free_consistent(ha->pdev, GDTH_SCRATCH, - ha->pscratch, ha->scratch_phys); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +#ifdef INT_COAL + if (ha->coal_stat) + pci_free_consistent(ha->pdev, sizeof(gdth_coal_status) * + MAXOFFSETS, ha->coal_stat, ha->coal_stat_phys); +#endif + if (ha->pscratch) + pci_free_consistent(ha->pdev, GDTH_SCRATCH, + ha->pscratch, ha->scratch_phys); + if (ha->pmsg) + pci_free_consistent(ha->pdev, sizeof(gdth_msg_str), + ha->pmsg, ha->msg_phys); if (ha->ccb_phys) pci_unmap_single(ha->pdev,ha->ccb_phys, sizeof(gdth_cmd_str),PCI_DMA_BIDIRECTIONAL); #else - scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH); +#ifdef INT_COAL + if (ha->coal_stat) + scsi_init_free((void *)ha->coal_stat, + sizeof(gdth_coal_status) * MAXOFFSETS); +#endif + if (ha->pscratch) + scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH); + if (ha->pmsg) + scsi_init_free((void *)ha->pmsg, sizeof(gdth_msg_str)); #endif gdth_ctr_released++; TRACE2(("gdth_release(): HA %d of %d\n", @@ -4657,12 +5046,8 @@ #ifdef GDTH_STATISTICS del_timer(&gdth_timer); #endif -#ifdef GDTH_IOCTL_CHRDEV unregister_chrdev(major,"gdth"); -#endif -#if LINUX_VERSION_CODE >= 0x020100 unregister_reboot_notifier(&gdth_notifier); -#endif } } @@ -4715,6 +5100,7 @@ return ((const char *)ha->binfo.type_string); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) /* old error handling */ int gdth_abort(Scsi_Cmnd *scp) { @@ -4722,17 +5108,13 @@ return SCSI_ABORT_SNOOZE; } -#if LINUX_VERSION_CODE >= 0x010346 int gdth_reset(Scsi_Cmnd *scp, unsigned int reset_flags) -#else -int gdth_reset(Scsi_Cmnd *scp) -#endif { TRACE2(("gdth_reset()\n")); return SCSI_RESET_PUNT; } +#endif -#if LINUX_VERSION_CODE >= 0x02015F /* new error handling */ int gdth_eh_abort(Scsi_Cmnd *scp) { @@ -4755,7 +5137,7 @@ unchar b; TRACE2(("gdth_eh_bus_reset()\n")); -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) hanum = NUMDATA(scp->device->host)->hanum; b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; #else @@ -4768,7 +5150,7 @@ GDTH_LOCK_HA(ha, flags); for (i = 0; i < GDTH_MAXCMDS; ++i) { cmnd = ha->cmd_tab[i].cmnd; -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) if (!SPECIAL_SCP(cmnd) && cmnd->device->channel == b) #else if (!SPECIAL_SCP(cmnd) && cmnd->channel == b) @@ -4813,15 +5195,12 @@ TRACE2(("gdth_eh_host_reset()\n")); return FAILED; } -#endif -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) int gdth_bios_param(struct scsi_device *sdev,struct block_device *bdev,sector_t cap,int *ip) -#elif LINUX_VERSION_CODE >= 0x010300 -int gdth_bios_param(Disk *disk,kdev_t dev,int *ip) #else -int gdth_bios_param(Disk *disk,int dev,int *ip) +int gdth_bios_param(Disk *disk,kdev_t dev,int *ip) #endif { unchar b, t; @@ -4830,7 +5209,7 @@ struct scsi_device *sd; unsigned capacity; -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) sd = sdev; capacity = cap; #else @@ -4872,7 +5251,7 @@ scp->SCp.sent_command = -1; scp->SCp.Status = GDTH_MAP_NONE; scp->SCp.buffer = (struct scatterlist *)NULL; -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) hanum = NUMDATA(scp->device->host)->hanum; #else hanum = NUMDATA(scp->host)->hanum; @@ -4882,19 +5261,28 @@ #endif priority = DEFAULT_PRI; -#if LINUX_VERSION_CODE >= 0x010300 if (scp->done == gdth_scsi_done) priority = scp->SCp.this_residual; -#endif gdth_update_timeout(hanum, scp, scp->timeout_per_command * 6); gdth_putq( hanum, scp, priority ); gdth_next( hanum ); return 0; } -#ifdef GDTH_IOCTL_CHRDEV + static int gdth_open(struct inode *inode, struct file *filep) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_ha_str *ha; + int i; + + for (i = 0; i < gdth_ctr_count; i++) { + ha = HADATA(gdth_ctr_tab[i]); + if (!ha->sdev) + ha->sdev = scsi_get_host_dev(gdth_ctr_tab[i]); + } +#endif + TRACE(("gdth_open()\n")); return 0; } @@ -4907,537 +5295,578 @@ static int ioc_event(unsigned long arg) { - gdth_ioctl_event evt; - gdth_ha_str *ha; - ulong flags; - - if (copy_from_user(&evt, (char *)arg, sizeof(gdth_ioctl_event)) || - evt.ionode >= gdth_ctr_count) - return -EFAULT; - ha = HADATA(gdth_ctr_tab[evt.ionode]); + gdth_ioctl_event evt; + gdth_ha_str *ha; + ulong flags; - if (evt.erase == 0xff) { - if (evt.event.event_source == ES_TEST) - evt.event.event_data.size=sizeof(evt.event.event_data.eu.test); - else if (evt.event.event_source == ES_DRIVER) - evt.event.event_data.size=sizeof(evt.event.event_data.eu.driver); - else if (evt.event.event_source == ES_SYNC) - evt.event.event_data.size=sizeof(evt.event.event_data.eu.sync); - else - evt.event.event_data.size=sizeof(evt.event.event_data.eu.async); - GDTH_LOCK_HA(ha, flags); - gdth_store_event(ha, evt.event.event_source, evt.event.event_idx, - &evt.event.event_data); - GDTH_UNLOCK_HA(ha, flags); - } else if (evt.erase == 0xfe) { - gdth_clear_events(); - } else if (evt.erase == 0) { - evt.handle = gdth_read_event(ha, evt.handle, &evt.event); - } else { - gdth_readapp_event(ha, evt.erase, &evt.event); - } - if (copy_to_user((char *)arg, &evt, sizeof(gdth_ioctl_event))) - return -EFAULT; - return 0; + if (copy_from_user(&evt, (char *)arg, sizeof(gdth_ioctl_event)) || + evt.ionode >= gdth_ctr_count) + return -EFAULT; + ha = HADATA(gdth_ctr_tab[evt.ionode]); + + if (evt.erase == 0xff) { + if (evt.event.event_source == ES_TEST) + evt.event.event_data.size=sizeof(evt.event.event_data.eu.test); + else if (evt.event.event_source == ES_DRIVER) + evt.event.event_data.size=sizeof(evt.event.event_data.eu.driver); + else if (evt.event.event_source == ES_SYNC) + evt.event.event_data.size=sizeof(evt.event.event_data.eu.sync); + else + evt.event.event_data.size=sizeof(evt.event.event_data.eu.async); + GDTH_LOCK_HA(ha, flags); + gdth_store_event(ha, evt.event.event_source, evt.event.event_idx, + &evt.event.event_data); + GDTH_UNLOCK_HA(ha, flags); + } else if (evt.erase == 0xfe) { + gdth_clear_events(); + } else if (evt.erase == 0) { + evt.handle = gdth_read_event(ha, evt.handle, &evt.event); + } else { + gdth_readapp_event(ha, evt.erase, &evt.event); + } + if (copy_to_user((char *)arg, &evt, sizeof(gdth_ioctl_event))) + return -EFAULT; + return 0; } static int ioc_lockdrv(unsigned long arg) { - gdth_ioctl_lockdrv ldrv; - unchar i, j; - ulong flags; - gdth_ha_str *ha; + gdth_ioctl_lockdrv ldrv; + unchar i, j; + ulong flags; + gdth_ha_str *ha; - if (copy_from_user(&ldrv, (char *)arg, sizeof(gdth_ioctl_lockdrv)) || - ldrv.ionode >= gdth_ctr_count) - return -EFAULT; - ha = HADATA(gdth_ctr_tab[ldrv.ionode]); + if (copy_from_user(&ldrv, (char *)arg, sizeof(gdth_ioctl_lockdrv)) || + ldrv.ionode >= gdth_ctr_count) + return -EFAULT; + ha = HADATA(gdth_ctr_tab[ldrv.ionode]); - for (i = 0; i < ldrv.drive_cnt && i < MAX_HDRIVES; ++i) { - j = ldrv.drives[i]; - if (j >= MAX_HDRIVES || !ha->hdr[j].present) - continue; - if (ldrv.lock) { - GDTH_LOCK_HA(ha, flags); - ha->hdr[j].lock = 1; - GDTH_UNLOCK_HA(ha, flags); - gdth_wait_completion(ldrv.ionode, ha->bus_cnt, j); - gdth_stop_timeout(ldrv.ionode, ha->bus_cnt, j); - } else { - GDTH_LOCK_HA(ha, flags); - ha->hdr[j].lock = 0; - GDTH_UNLOCK_HA(ha, flags); - gdth_start_timeout(ldrv.ionode, ha->bus_cnt, j); - gdth_next(ldrv.ionode); - } - } - return 0; + for (i = 0; i < ldrv.drive_cnt && i < MAX_HDRIVES; ++i) { + j = ldrv.drives[i]; + if (j >= MAX_HDRIVES || !ha->hdr[j].present) + continue; + if (ldrv.lock) { + GDTH_LOCK_HA(ha, flags); + ha->hdr[j].lock = 1; + GDTH_UNLOCK_HA(ha, flags); + gdth_wait_completion(ldrv.ionode, ha->bus_cnt, j); + gdth_stop_timeout(ldrv.ionode, ha->bus_cnt, j); + } else { + GDTH_LOCK_HA(ha, flags); + ha->hdr[j].lock = 0; + GDTH_UNLOCK_HA(ha, flags); + gdth_start_timeout(ldrv.ionode, ha->bus_cnt, j); + gdth_next(ldrv.ionode); + } + } + return 0; } static int ioc_resetdrv(unsigned long arg, char *cmnd) { - gdth_ioctl_reset res; - gdth_cmd_str cmd; - int hanum; - gdth_ha_str *ha; -#if LINUX_VERSION_CODE >= 0x020503 - Scsi_Request *srp; - Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 - Scsi_Cmnd *scp; - Scsi_Device *sdev; -#else - Scsi_Cmnd scp; - Scsi_Device sdev; + gdth_ioctl_reset res; + gdth_cmd_str cmd; + int hanum; + gdth_ha_str *ha; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + Scsi_Request *srp; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + Scsi_Cmnd *scp; +#else + Scsi_Cmnd scp; #endif - if (copy_from_user(&res, (char *)arg, sizeof(gdth_ioctl_reset)) || - res.ionode >= gdth_ctr_count || res.number >= MAX_HDRIVES) - return -EFAULT; - hanum = res.ionode; - ha = HADATA(gdth_ctr_tab[hanum]); + if (copy_from_user(&res, (char *)arg, sizeof(gdth_ioctl_reset)) || + res.ionode >= gdth_ctr_count || res.number >= MAX_HDRIVES) + return -EFAULT; + hanum = res.ionode; + ha = HADATA(gdth_ctr_tab[hanum]); - if (!ha->hdr[res.number].present) - return 0; - cmd.Service = CACHESERVICE; - cmd.OpCode = GDT_CLUST_RESET; + if (!ha->hdr[res.number].present) + return 0; + memset(&cmd, 0, sizeof(gdth_cmd_str)); + cmd.Service = CACHESERVICE; + cmd.OpCode = GDT_CLUST_RESET; + if (ha->cache_feat & GDT_64BIT) + cmd.u.cache64.DeviceNo = res.number; + else cmd.u.cache.DeviceNo = res.number; -#if LINUX_VERSION_CODE >= 0x020503 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - srp = scsi_allocate_request(sdev, GFP_KERNEL); - if (!srp) - return -ENOMEM; - srp->sr_cmd_len = 12; - srp->sr_use_sg = 0; - gdth_do_req(srp, &cmd, cmnd, 30); - res.status = (ushort)srp->sr_command->SCp.Status; - scsi_release_request(srp); - scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - scp = scsi_allocate_device(sdev, 1, FALSE); - if (!scp) - return -ENOMEM; - scp->cmd_len = 12; - scp->use_sg = 0; - gdth_do_cmd(scp, &cmd, cmnd, 30); - res.status = (ushort)scp->SCp.Status; - scsi_release_command(scp); - scsi_free_host_dev(sdev); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + srp = scsi_allocate_request(ha->sdev, GFP_KERNEL); + if (!srp) + return -ENOMEM; + srp->sr_cmd_len = 12; + srp->sr_use_sg = 0; + gdth_do_req(srp, &cmd, cmnd, 30); + res.status = (ushort)srp->sr_command->SCp.Status; + scsi_release_request(srp); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + scp = scsi_allocate_device(ha->sdev, 1, FALSE); + if (!scp) + return -ENOMEM; + scp->cmd_len = 12; + scp->use_sg = 0; + gdth_do_cmd(scp, &cmd, cmnd, 30); + res.status = (ushort)scp->SCp.Status; + scsi_release_command(scp); #else - memset(&sdev,0,sizeof(Scsi_Device)); - memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = scp.host = gdth_ctr_tab[hanum]; - sdev.id = scp.target = sdev.host->this_id; - scp.device = &sdev; - gdth_do_cmd(&scp, &cmd, cmnd, 30); - res.status = (ushort)scp.SCp.Status; + memset(&ha->sdev,0,sizeof(Scsi_Device)); + memset(&scp, 0,sizeof(Scsi_Cmnd)); + ha->sdev.host = scp.host = gdth_ctr_tab[hanum]; + ha->sdev.id = scp.target = ha->sdev.host->this_id; + scp.device = &ha->sdev; + gdth_do_cmd(&scp, &cmd, cmnd, 30); + res.status = (ushort)scp.SCp.Status; #endif - if (copy_to_user((char *)arg, &res, sizeof(gdth_ioctl_reset))) - return -EFAULT; - return 0; + if (copy_to_user((char *)arg, &res, sizeof(gdth_ioctl_reset))) + return -EFAULT; + return 0; } static int ioc_general(unsigned long arg, char *cmnd) { - gdth_ioctl_general gen; - char *buf = NULL; - ulong32 paddr; - int hanum; - gdth_ha_str *ha; -#if LINUX_VERSION_CODE >= 0x020503 - Scsi_Request *srp; - Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 - Scsi_Cmnd *scp; - Scsi_Device *sdev; + gdth_ioctl_general gen; + char *buf = NULL; + ulong64 paddr; + int hanum; + gdth_ha_str *ha; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + Scsi_Request *srp; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + Scsi_Cmnd *scp; #else - Scsi_Cmnd scp; - Scsi_Device sdev; + Scsi_Cmnd scp; #endif - if (copy_from_user(&gen, (char *)arg, sizeof(gdth_ioctl_general)) || - gen.ionode >= gdth_ctr_count) + if (copy_from_user(&gen, (char *)arg, sizeof(gdth_ioctl_general)) || + gen.ionode >= gdth_ctr_count) + return -EFAULT; + hanum = gen.ionode; + ha = HADATA(gdth_ctr_tab[hanum]); + if (gen.data_len + gen.sense_len != 0) { + if (!(buf = gdth_ioctl_alloc(hanum, gen.data_len + gen.sense_len, + FALSE, &paddr))) return -EFAULT; - hanum = gen.ionode; - ha = HADATA(gdth_ctr_tab[hanum]); - if (gen.data_len + gen.sense_len != 0) { - if (!(buf = gdth_ioctl_alloc(hanum, gen.data_len + gen.sense_len, - FALSE, &paddr))) - return -EFAULT; - if (copy_from_user(buf, (char *)arg + sizeof(gdth_ioctl_general), - gen.data_len + gen.sense_len)) { - gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); - return -EFAULT; - } + if (copy_from_user(buf, (char *)arg + sizeof(gdth_ioctl_general), + gen.data_len + gen.sense_len)) { + gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); + return -EFAULT; + } - if (gen.command.OpCode == GDT_IOCTL) { - gen.command.u.ioctl.p_param = paddr; - } else if (gen.command.Service == CACHESERVICE) { + if (gen.command.OpCode == GDT_IOCTL) { + gen.command.u.ioctl.p_param = paddr; + } else if (gen.command.Service == CACHESERVICE) { + if (ha->cache_feat & GDT_64BIT) { + /* copy elements from 32-bit IOCTL structure */ + gen.command.u.cache64.BlockCnt = gen.command.u.cache.BlockCnt; + gen.command.u.cache64.BlockNo = gen.command.u.cache.BlockNo; + gen.command.u.cache64.DeviceNo = gen.command.u.cache.DeviceNo; + /* addresses */ + if (ha->cache_feat & SCATTER_GATHER) { + gen.command.u.cache64.DestAddr = (ulong64)-1; + gen.command.u.cache64.sg_canz = 1; + gen.command.u.cache64.sg_lst[0].sg_ptr = paddr; + gen.command.u.cache64.sg_lst[0].sg_len = gen.data_len; + gen.command.u.cache64.sg_lst[1].sg_len = 0; + } else { + gen.command.u.cache64.DestAddr = paddr; + gen.command.u.cache64.sg_canz = 0; + } + } else { if (ha->cache_feat & SCATTER_GATHER) { gen.command.u.cache.DestAddr = 0xffffffff; gen.command.u.cache.sg_canz = 1; - gen.command.u.cache.sg_lst[0].sg_ptr = paddr; + gen.command.u.cache.sg_lst[0].sg_ptr = (ulong32)paddr; gen.command.u.cache.sg_lst[0].sg_len = gen.data_len; gen.command.u.cache.sg_lst[1].sg_len = 0; } else { gen.command.u.cache.DestAddr = paddr; gen.command.u.cache.sg_canz = 0; } - } else if (gen.command.Service == SCSIRAWSERVICE) { + } + } else if (gen.command.Service == SCSIRAWSERVICE) { + if (ha->raw_feat & GDT_64BIT) { + /* copy elements from 32-bit IOCTL structure */ + char cmd[16]; + gen.command.u.raw64.sense_len = gen.command.u.raw.sense_len; + gen.command.u.raw64.bus = gen.command.u.raw.bus; + gen.command.u.raw64.lun = gen.command.u.raw.lun; + gen.command.u.raw64.target = gen.command.u.raw.target; + memcpy(cmd, gen.command.u.raw.cmd, 16); + memcpy(gen.command.u.raw64.cmd, cmd, 16); + gen.command.u.raw64.clen = gen.command.u.raw.clen; + gen.command.u.raw64.sdlen = gen.command.u.raw.sdlen; + gen.command.u.raw64.direction = gen.command.u.raw.direction; + /* addresses */ + if (ha->raw_feat & SCATTER_GATHER) { + gen.command.u.raw64.sdata = (ulong64)-1; + gen.command.u.raw64.sg_ranz = 1; + gen.command.u.raw64.sg_lst[0].sg_ptr = paddr; + gen.command.u.raw64.sg_lst[0].sg_len = gen.data_len; + gen.command.u.raw64.sg_lst[1].sg_len = 0; + } else { + gen.command.u.raw64.sdata = paddr; + gen.command.u.raw64.sg_ranz = 0; + } + gen.command.u.raw64.sense_data = paddr + gen.data_len; + } else { if (ha->raw_feat & SCATTER_GATHER) { gen.command.u.raw.sdata = 0xffffffff; gen.command.u.raw.sg_ranz = 1; - gen.command.u.raw.sg_lst[0].sg_ptr = paddr; + gen.command.u.raw.sg_lst[0].sg_ptr = (ulong32)paddr; gen.command.u.raw.sg_lst[0].sg_len = gen.data_len; gen.command.u.raw.sg_lst[1].sg_len = 0; } else { gen.command.u.raw.sdata = paddr; gen.command.u.raw.sg_ranz = 0; } - gen.command.u.raw.sense_data = paddr + gen.data_len; - - } else { - gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); - return -EFAULT; + gen.command.u.raw.sense_data = (ulong32)paddr + gen.data_len; } + } else { + gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); + return -EFAULT; } + } -#if LINUX_VERSION_CODE >= 0x020503 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - srp = scsi_allocate_request(sdev, GFP_KERNEL); - if (!srp) - return -ENOMEM; - srp->sr_cmd_len = 12; - srp->sr_use_sg = 0; - gdth_do_req(srp, &gen.command, cmnd, gen.timeout); - gen.status = srp->sr_command->SCp.Status; - gen.info = srp->sr_command->SCp.Message; - scsi_release_request(srp); - scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - scp = scsi_allocate_device(sdev, 1, FALSE); - if (!scp) - return -ENOMEM; - scp->cmd_len = 12; - scp->use_sg = 0; - gdth_do_cmd(scp, &gen.command, cmnd, gen.timeout); - gen.status = scp->SCp.Status; - gen.info = scp->SCp.Message; - scsi_release_command(scp); - scsi_free_host_dev(sdev); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + srp = scsi_allocate_request(ha->sdev, GFP_KERNEL); + if (!srp) + return -ENOMEM; + srp->sr_cmd_len = 12; + srp->sr_use_sg = 0; + gdth_do_req(srp, &gen.command, cmnd, gen.timeout); + gen.status = srp->sr_command->SCp.Status; + gen.info = srp->sr_command->SCp.Message; + scsi_release_request(srp); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + scp = scsi_allocate_device(ha->sdev, 1, FALSE); + if (!scp) + return -ENOMEM; + scp->cmd_len = 12; + scp->use_sg = 0; + gdth_do_cmd(scp, &gen.command, cmnd, gen.timeout); + gen.status = scp->SCp.Status; + gen.info = scp->SCp.Message; + scsi_release_command(scp); #else - memset(&sdev,0,sizeof(Scsi_Device)); - memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = scp.host = gdth_ctr_tab[hanum]; - sdev.id = scp.target = sdev.host->this_id; - scp.device = &sdev; - gdth_do_cmd(&scp, &gen.command, cmnd, gen.timeout); - gen.status = scp.SCp.Status; - gen.info = scp.SCp.Message; + memset(&ha->sdev,0,sizeof(Scsi_Device)); + memset(&scp, 0,sizeof(Scsi_Cmnd)); + ha->sdev.host = scp.host = gdth_ctr_tab[hanum]; + ha->sdev.id = scp.target = ha->sdev.host->this_id; + scp.device = &ha->sdev; + gdth_do_cmd(&scp, &gen.command, cmnd, gen.timeout); + gen.status = scp.SCp.Status; + gen.info = scp.SCp.Message; #endif - if (copy_to_user((char *)arg + sizeof(gdth_ioctl_general), buf, - gen.data_len + gen.sense_len)) { - gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); - return -EFAULT; - } - if (copy_to_user((char *)arg, &gen, - sizeof(gdth_ioctl_general) - sizeof(gdth_cmd_str))) { - gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); - return -EFAULT; - } + if (copy_to_user((char *)arg + sizeof(gdth_ioctl_general), buf, + gen.data_len + gen.sense_len)) { gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); - return 0; + return -EFAULT; + } + if (copy_to_user((char *)arg, &gen, + sizeof(gdth_ioctl_general) - sizeof(gdth_cmd_str))) { + gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); + return -EFAULT; + } + gdth_ioctl_free(hanum, gen.data_len+gen.sense_len, buf, paddr); + return 0; } static int ioc_hdrlist(unsigned long arg, char *cmnd) { - gdth_ioctl_rescan rsc; - gdth_cmd_str cmd; - gdth_ha_str *ha; - unchar i; - int hanum; -#if LINUX_VERSION_CODE >= 0x020503 - Scsi_Request *srp; - Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 - Scsi_Cmnd *scp; - Scsi_Device *sdev; + gdth_ioctl_rescan rsc; + gdth_cmd_str cmd; + gdth_ha_str *ha; + unchar i; + int hanum; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + Scsi_Request *srp; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + Scsi_Cmnd *scp; #else - Scsi_Cmnd scp; - Scsi_Device sdev; + Scsi_Cmnd scp; #endif - if (copy_from_user(&rsc, (char *)arg, sizeof(gdth_ioctl_rescan)) || - rsc.ionode >= gdth_ctr_count) - return -EFAULT; - hanum = rsc.ionode; - ha = HADATA(gdth_ctr_tab[hanum]); + if (copy_from_user(&rsc, (char *)arg, sizeof(gdth_ioctl_rescan)) || + rsc.ionode >= gdth_ctr_count) + return -EFAULT; + hanum = rsc.ionode; + ha = HADATA(gdth_ctr_tab[hanum]); + memset(&cmd, 0, sizeof(gdth_cmd_str)); -#if LINUX_VERSION_CODE >= 0x020503 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - srp = scsi_allocate_request(sdev, GFP_KERNEL); - if (!srp) - return -ENOMEM; - srp->sr_cmd_len = 12; - srp->sr_use_sg = 0; -#elif LINUX_VERSION_CODE >= 0x020322 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - scp = scsi_allocate_device(sdev, 1, FALSE); - if (!scp) - return -ENOMEM; - scp->cmd_len = 12; - scp->use_sg = 0; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + srp = scsi_allocate_request(ha->sdev, GFP_KERNEL); + if (!srp) + return -ENOMEM; + srp->sr_cmd_len = 12; + srp->sr_use_sg = 0; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + scp = scsi_allocate_device(ha->sdev, 1, FALSE); + if (!scp) + return -ENOMEM; + scp->cmd_len = 12; + scp->use_sg = 0; #else - memset(&sdev,0,sizeof(Scsi_Device)); - memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = scp.host = gdth_ctr_tab[hanum]; - sdev.id = scp.target = sdev.host->this_id; - scp.device = &sdev; + memset(&ha->sdev,0,sizeof(Scsi_Device)); + memset(&scp, 0,sizeof(Scsi_Cmnd)); + ha->sdev.host = scp.host = gdth_ctr_tab[hanum]; + ha->sdev.id = scp.target = ha->sdev.host->this_id; + scp.device = &ha->sdev; #endif - for (i = 0; i < MAX_HDRIVES; ++i) { - if (!ha->hdr[i].present) { - rsc.hdr_list[i].bus = 0xff; - continue; - } - rsc.hdr_list[i].bus = ha->virt_bus; - rsc.hdr_list[i].target = i; - rsc.hdr_list[i].lun = 0; - rsc.hdr_list[i].cluster_type = ha->hdr[i].cluster_type; - if (ha->hdr[i].cluster_type & CLUSTER_DRIVE) { - cmd.Service = CACHESERVICE; - cmd.OpCode = GDT_CLUST_INFO; + for (i = 0; i < MAX_HDRIVES; ++i) { + if (!ha->hdr[i].present) { + rsc.hdr_list[i].bus = 0xff; + continue; + } + rsc.hdr_list[i].bus = ha->virt_bus; + rsc.hdr_list[i].target = i; + rsc.hdr_list[i].lun = 0; + rsc.hdr_list[i].cluster_type = ha->hdr[i].cluster_type; + if (ha->hdr[i].cluster_type & CLUSTER_DRIVE) { + cmd.Service = CACHESERVICE; + cmd.OpCode = GDT_CLUST_INFO; + if (ha->cache_feat & GDT_64BIT) + cmd.u.cache64.DeviceNo = i; + else cmd.u.cache.DeviceNo = i; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(srp, &cmd, cmnd, 30); - if (srp->sr_command->SCp.Status == S_OK) - rsc.hdr_list[i].cluster_type = srp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &cmd, cmnd, 30); - if (scp->SCp.Status == S_OK) - rsc.hdr_list[i].cluster_type = scp->SCp.Message; -#else - gdth_do_cmd(&scp, &cmd, cmnd, 30); - if (scp.SCp.Status == S_OK) - rsc.hdr_list[i].cluster_type = scp.SCp.Message; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(srp, &cmd, cmnd, 30); + if (srp->sr_command->SCp.Status == S_OK) + rsc.hdr_list[i].cluster_type = srp->sr_command->SCp.Message; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &cmd, cmnd, 30); + if (scp->SCp.Status == S_OK) + rsc.hdr_list[i].cluster_type = scp->SCp.Message; +#else + gdth_do_cmd(&scp, &cmd, cmnd, 30); + if (scp.SCp.Status == S_OK) + rsc.hdr_list[i].cluster_type = scp.SCp.Message; #endif - } - } -#if LINUX_VERSION_CODE >= 0x020503 - scsi_release_request(srp); - scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 - scsi_release_command(scp); - scsi_free_host_dev(sdev); + } + } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + scsi_release_request(srp); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + scsi_release_command(scp); #endif - if (copy_to_user((char *)arg, &rsc, sizeof(gdth_ioctl_rescan))) - return -EFAULT; - return 0; + if (copy_to_user((char *)arg, &rsc, sizeof(gdth_ioctl_rescan))) + return -EFAULT; + return 0; } static int ioc_rescan(unsigned long arg, char *cmnd) { - gdth_ioctl_rescan rsc; - gdth_cmd_str cmd; - ushort i, status, hdr_cnt; - ulong32 info; - int hanum, cyls, hds, secs; - ulong flags; - gdth_ha_str *ha; -#if LINUX_VERSION_CODE >= 0x020503 - Scsi_Request *srp; - Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 - Scsi_Cmnd *scp; - Scsi_Device *sdev; + gdth_ioctl_rescan rsc; + gdth_cmd_str cmd; + ushort i, status, hdr_cnt; + ulong32 info; + int hanum, cyls, hds, secs; + ulong flags; + gdth_ha_str *ha; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + Scsi_Request *srp; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + Scsi_Cmnd *scp; #else - Scsi_Cmnd scp; - Scsi_Device sdev; + Scsi_Cmnd scp; #endif - if (copy_from_user(&rsc, (char *)arg, sizeof(gdth_ioctl_rescan)) || - rsc.ionode >= gdth_ctr_count) - return -EFAULT; - hanum = rsc.ionode; - ha = HADATA(gdth_ctr_tab[hanum]); + if (copy_from_user(&rsc, (char *)arg, sizeof(gdth_ioctl_rescan)) || + rsc.ionode >= gdth_ctr_count) + return -EFAULT; + hanum = rsc.ionode; + ha = HADATA(gdth_ctr_tab[hanum]); + memset(&cmd, 0, sizeof(gdth_cmd_str)); -#if LINUX_VERSION_CODE >= 0x020503 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - srp = scsi_allocate_request(sdev, GFP_KERNEL); - if (!srp) - return -ENOMEM; - srp->sr_cmd_len = 12; - srp->sr_use_sg = 0; -#elif LINUX_VERSION_CODE >= 0x020322 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - scp = scsi_allocate_device(sdev, 1, FALSE); - if (!scp) - return -ENOMEM; - scp->cmd_len = 12; - scp->use_sg = 0; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + srp = scsi_allocate_request(ha->sdev, GFP_KERNEL); + if (!srp) + return -ENOMEM; + srp->sr_cmd_len = 12; + srp->sr_use_sg = 0; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + scp = scsi_allocate_device(ha->sdev, 1, FALSE); + if (!scp) + return -ENOMEM; + scp->cmd_len = 12; + scp->use_sg = 0; #else - memset(&sdev,0,sizeof(Scsi_Device)); - memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = scp.host = gdth_ctr_tab[hanum]; - sdev.id = scp.target = sdev.host->this_id; - scp.device = &sdev; + memset(&ha->sdev,0,sizeof(Scsi_Device)); + memset(&scp, 0,sizeof(Scsi_Cmnd)); + ha->sdev.host = scp.host = gdth_ctr_tab[hanum]; + ha->sdev.id = scp.target = ha->sdev.host->this_id; + scp.device = &ha->sdev; #endif - if (rsc.flag == 0) { - /* old method: re-init. cache service */ - cmd.Service = CACHESERVICE; + if (rsc.flag == 0) { + /* old method: re-init. cache service */ + cmd.Service = CACHESERVICE; + if (ha->cache_feat & GDT_64BIT) { + cmd.OpCode = GDT_X_INIT_HOST; + cmd.u.cache64.DeviceNo = LINUX_OS; + } else { cmd.OpCode = GDT_INIT; cmd.u.cache.DeviceNo = LINUX_OS; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(srp, &cmd, cmnd, 30); - status = (ushort)srp->sr_command->SCp.Status; - info = (ulong32)srp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &cmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; + } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(srp, &cmd, cmnd, 30); + status = (ushort)srp->sr_command->SCp.Status; + info = (ulong32)srp->sr_command->SCp.Message; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &cmd, cmnd, 30); + status = (ushort)scp->SCp.Status; + info = (ulong32)scp->SCp.Message; #else - gdth_do_cmd(&scp, &cmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; + gdth_do_cmd(&scp, &cmd, cmnd, 30); + status = (ushort)scp.SCp.Status; + info = (ulong32)scp.SCp.Message; #endif - i = 0; - hdr_cnt = (status == S_OK ? (ushort)info : 0); - } else { - i = rsc.hdr_no; - hdr_cnt = i + 1; - } - for (; i < hdr_cnt && i < MAX_HDRIVES; ++i) { - cmd.Service = CACHESERVICE; - cmd.OpCode = GDT_INFO; + i = 0; + hdr_cnt = (status == S_OK ? (ushort)info : 0); + } else { + i = rsc.hdr_no; + hdr_cnt = i + 1; + } + for (; i < hdr_cnt && i < MAX_HDRIVES; ++i) { + cmd.Service = CACHESERVICE; + cmd.OpCode = GDT_INFO; + if (ha->cache_feat & GDT_64BIT) + cmd.u.cache64.DeviceNo = i; + else cmd.u.cache.DeviceNo = i; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(srp, &cmd, cmnd, 30); - status = (ushort)srp->sr_command->SCp.Status; - info = (ulong32)srp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &cmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(srp, &cmd, cmnd, 30); + status = (ushort)srp->sr_command->SCp.Status; + info = (ulong32)srp->sr_command->SCp.Message; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &cmd, cmnd, 30); + status = (ushort)scp->SCp.Status; + info = (ulong32)scp->SCp.Message; #else - gdth_do_cmd(&scp, &cmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; + gdth_do_cmd(&scp, &cmd, cmnd, 30); + status = (ushort)scp.SCp.Status; + info = (ulong32)scp.SCp.Message; #endif - GDTH_LOCK_HA(ha, flags); - rsc.hdr_list[i].bus = ha->virt_bus; - rsc.hdr_list[i].target = i; - rsc.hdr_list[i].lun = 0; - if (status != S_OK) { - ha->hdr[i].present = FALSE; - } else { - ha->hdr[i].present = TRUE; - ha->hdr[i].size = info; - /* evaluate mapping */ - ha->hdr[i].size &= ~SECS32; - gdth_eval_mapping(ha->hdr[i].size,&cyls,&hds,&secs); - ha->hdr[i].heads = hds; - ha->hdr[i].secs = secs; - /* round size */ - ha->hdr[i].size = cyls * hds * secs; - } - GDTH_UNLOCK_HA(ha, flags); - if (status != S_OK) - continue; + GDTH_LOCK_HA(ha, flags); + rsc.hdr_list[i].bus = ha->virt_bus; + rsc.hdr_list[i].target = i; + rsc.hdr_list[i].lun = 0; + if (status != S_OK) { + ha->hdr[i].present = FALSE; + } else { + ha->hdr[i].present = TRUE; + ha->hdr[i].size = info; + /* evaluate mapping */ + ha->hdr[i].size &= ~SECS32; + gdth_eval_mapping(ha->hdr[i].size,&cyls,&hds,&secs); + ha->hdr[i].heads = hds; + ha->hdr[i].secs = secs; + /* round size */ + ha->hdr[i].size = cyls * hds * secs; + } + GDTH_UNLOCK_HA(ha, flags); + if (status != S_OK) + continue; + + /* extended info, if GDT_64BIT, for drives > 2 TB */ + /* but we need ha->info2, not yet stored in scp->SCp */ - /* devtype, cluster info, R/W attribs */ - cmd.Service = CACHESERVICE; - cmd.OpCode = GDT_DEVTYPE; + /* devtype, cluster info, R/W attribs */ + cmd.Service = CACHESERVICE; + cmd.OpCode = GDT_DEVTYPE; + if (ha->cache_feat & GDT_64BIT) + cmd.u.cache64.DeviceNo = i; + else cmd.u.cache.DeviceNo = i; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(srp, &cmd, cmnd, 30); - status = (ushort)srp->sr_command->SCp.Status; - info = (ulong32)srp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &cmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(srp, &cmd, cmnd, 30); + status = (ushort)srp->sr_command->SCp.Status; + info = (ulong32)srp->sr_command->SCp.Message; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &cmd, cmnd, 30); + status = (ushort)scp->SCp.Status; + info = (ulong32)scp->SCp.Message; #else - gdth_do_cmd(&scp, &cmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; + gdth_do_cmd(&scp, &cmd, cmnd, 30); + status = (ushort)scp.SCp.Status; + info = (ulong32)scp.SCp.Message; #endif - GDTH_LOCK_HA(ha, flags); - ha->hdr[i].devtype = (status == S_OK ? (ushort)info : 0); - GDTH_UNLOCK_HA(ha, flags); + GDTH_LOCK_HA(ha, flags); + ha->hdr[i].devtype = (status == S_OK ? (ushort)info : 0); + GDTH_UNLOCK_HA(ha, flags); - cmd.Service = CACHESERVICE; - cmd.OpCode = GDT_CLUST_INFO; + cmd.Service = CACHESERVICE; + cmd.OpCode = GDT_CLUST_INFO; + if (ha->cache_feat & GDT_64BIT) + cmd.u.cache64.DeviceNo = i; + else cmd.u.cache.DeviceNo = i; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(srp, &cmd, cmnd, 30); - status = (ushort)srp->sr_command->SCp.Status; - info = (ulong32)srp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &cmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(srp, &cmd, cmnd, 30); + status = (ushort)srp->sr_command->SCp.Status; + info = (ulong32)srp->sr_command->SCp.Message; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &cmd, cmnd, 30); + status = (ushort)scp->SCp.Status; + info = (ulong32)scp->SCp.Message; #else - gdth_do_cmd(&scp, &cmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; + gdth_do_cmd(&scp, &cmd, cmnd, 30); + status = (ushort)scp.SCp.Status; + info = (ulong32)scp.SCp.Message; #endif - GDTH_LOCK_HA(ha, flags); - ha->hdr[i].cluster_type = - ((status == S_OK && !shared_access) ? (ushort)info : 0); - GDTH_UNLOCK_HA(ha, flags); - rsc.hdr_list[i].cluster_type = ha->hdr[i].cluster_type; + GDTH_LOCK_HA(ha, flags); + ha->hdr[i].cluster_type = + ((status == S_OK && !shared_access) ? (ushort)info : 0); + GDTH_UNLOCK_HA(ha, flags); + rsc.hdr_list[i].cluster_type = ha->hdr[i].cluster_type; - cmd.Service = CACHESERVICE; - cmd.OpCode = GDT_RW_ATTRIBS; + cmd.Service = CACHESERVICE; + cmd.OpCode = GDT_RW_ATTRIBS; + if (ha->cache_feat & GDT_64BIT) + cmd.u.cache64.DeviceNo = i; + else cmd.u.cache.DeviceNo = i; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(srp, &cmd, cmnd, 30); - status = (ushort)srp->sr_command->SCp.Status; - info = (ulong32)srp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &cmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(srp, &cmd, cmnd, 30); + status = (ushort)srp->sr_command->SCp.Status; + info = (ulong32)srp->sr_command->SCp.Message; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &cmd, cmnd, 30); + status = (ushort)scp->SCp.Status; + info = (ulong32)scp->SCp.Message; #else - gdth_do_cmd(&scp, &cmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; + gdth_do_cmd(&scp, &cmd, cmnd, 30); + status = (ushort)scp.SCp.Status; + info = (ulong32)scp.SCp.Message; #endif - GDTH_LOCK_HA(ha, flags); - ha->hdr[i].rw_attribs = (status == S_OK ? (ushort)info : 0); - GDTH_UNLOCK_HA(ha, flags); - } -#if LINUX_VERSION_CODE >= 0x020503 - scsi_release_request(srp); - scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 - scsi_release_command(scp); - scsi_free_host_dev(sdev); + GDTH_LOCK_HA(ha, flags); + ha->hdr[i].rw_attribs = (status == S_OK ? (ushort)info : 0); + GDTH_UNLOCK_HA(ha, flags); + } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + scsi_release_request(srp); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + scsi_release_command(scp); #endif - if (copy_to_user((char *)arg, &rsc, sizeof(gdth_ioctl_rescan))) - return -EFAULT; - return 0; + if (copy_to_user((char *)arg, &rsc, sizeof(gdth_ioctl_rescan))) + return -EFAULT; + return 0; } static int gdth_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg) { gdth_ha_str *ha; -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) Scsi_Cmnd *scp; - Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) Scsi_Cmnd *scp; - Scsi_Device *sdev; #else Scsi_Cmnd scp; - Scsi_Device sdev; #endif ulong flags; char cmnd[MAX_COMMAND_SIZE]; @@ -5451,7 +5880,7 @@ { int cnt = gdth_ctr_count; if (put_user(cnt, (int *)arg)) - return -EFAULT; + return -EFAULT; break; } @@ -5459,7 +5888,7 @@ { int ver = (GDTH_VERSION<<8) | GDTH_SUBVERSION; if (put_user(ver, (int *)arg)) - return -EFAULT; + return -EFAULT; break; } @@ -5471,7 +5900,7 @@ osv.subversion = (unchar)(LINUX_VERSION_CODE >> 8); osv.revision = (ushort)(LINUX_VERSION_CODE & 0xff); if (copy_to_user((char *)arg, &osv, sizeof(gdth_ioctl_osvers))) - return -EFAULT; + return -EFAULT; break; } @@ -5507,13 +5936,13 @@ } case GDTIOCTL_GENERAL: - return ioc_general(arg, cmnd); + return ioc_general(arg, cmnd); case GDTIOCTL_EVENT: - return ioc_event(arg); + return ioc_event(arg); case GDTIOCTL_LOCKDRV: - return ioc_lockdrv(arg); + return ioc_lockdrv(arg); case GDTIOCTL_LOCKCHN: { @@ -5549,10 +5978,10 @@ } case GDTIOCTL_RESCAN: - return ioc_rescan(arg, cmnd); + return ioc_rescan(arg, cmnd); case GDTIOCTL_HDRLIST: - return ioc_hdrlist(arg, cmnd); + return ioc_hdrlist(arg, cmnd); case GDTIOCTL_RESET_BUS: { @@ -5563,11 +5992,11 @@ res.ionode >= gdth_ctr_count) return -EFAULT; hanum = res.ionode; + ha = HADATA(gdth_ctr_tab[hanum]); - /* Because we need a Scsi_Cmnd struct., we make a scsi_allocate device also for kernels >=2.5.x */ -#if LINUX_VERSION_CODE >= 0x02053C - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - scp = scsi_get_command(sdev, GFP_KERNEL); + /* Because we need a Scsi_Cmnd struct., we make a scsi_allocate device also for kernels >=2.6.x */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + scp = scsi_get_command(ha->sdev, GFP_KERNEL); if (!scp) return -ENOMEM; scp->cmd_len = 12; @@ -5576,14 +6005,8 @@ rval = gdth_eh_bus_reset(scp); res.status = (rval == SUCCESS ? S_OK : S_GENERR); scsi_put_command(scp); - scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); -#if LINUX_VERSION_CODE >= 0x020503 - scp = scsi_allocate_device(sdev, 1); -#else - scp = scsi_allocate_device(sdev, 1, FALSE); -#endif +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + scp = scsi_allocate_device(ha->sdev, 1, FALSE); if (!scp) return -ENOMEM; scp->cmd_len = 12; @@ -5592,18 +6015,15 @@ rval = gdth_eh_bus_reset(scp); res.status = (rval == SUCCESS ? S_OK : S_GENERR); scsi_release_command(scp); - scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x02015F - memset(&sdev,0,sizeof(Scsi_Device)); +#else + memset(&ha->sdev,0,sizeof(Scsi_Device)); memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = scp.host = gdth_ctr_tab[hanum]; - sdev.id = scp.target = sdev.host->this_id; - scp.device = &sdev; + ha->sdev.host = scp.host = gdth_ctr_tab[hanum]; + ha->sdev.id = scp.target = ha->sdev.host->this_id; + scp.device = &ha->sdev; scp.channel = virt_ctr ? 0 : res.number; rval = gdth_eh_bus_reset(&scp); res.status = (rval == SUCCESS ? S_OK : S_GENERR); -#else - res.status = S_OK; #endif if (copy_to_user((char *)arg, &res, sizeof(gdth_ioctl_reset))) return -EFAULT; @@ -5611,26 +6031,25 @@ } case GDTIOCTL_RESET_DRV: - return ioc_resetdrv(arg, cmnd); + return ioc_resetdrv(arg, cmnd); default: break; } return 0; } -#endif -#if LINUX_VERSION_CODE >= 0x010300 + /* flush routine */ static void gdth_flush(int hanum) { int i; gdth_ha_str *ha; gdth_cmd_str gdtcmd; -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) Scsi_Request *srp; Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) Scsi_Cmnd *scp; Scsi_Device *sdev; #else @@ -5643,14 +6062,14 @@ TRACE2(("gdth_flush() hanum %d\n",hanum)); ha = HADATA(gdth_ctr_tab[hanum]); -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); srp = scsi_allocate_request(sdev, GFP_KERNEL); if (!srp) return; srp->sr_cmd_len = 12; srp->sr_use_sg = 0; -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); scp = scsi_allocate_device(sdev, 1, FALSE); if (!scp) @@ -5670,42 +6089,44 @@ gdtcmd.BoardNode = LOCALBOARD; gdtcmd.Service = CACHESERVICE; gdtcmd.OpCode = GDT_FLUSH; - gdtcmd.u.cache.DeviceNo = i; - gdtcmd.u.cache.BlockNo = 1; - gdtcmd.u.cache.sg_canz = 0; + if (ha->cache_feat & GDT_64BIT) { + gdtcmd.u.cache64.DeviceNo = i; + gdtcmd.u.cache64.BlockNo = 1; + gdtcmd.u.cache64.sg_canz = 0; + } else { + gdtcmd.u.cache.DeviceNo = i; + gdtcmd.u.cache.BlockNo = 1; + gdtcmd.u.cache.sg_canz = 0; + } TRACE2(("gdth_flush(): flush ha %d drive %d\n", hanum, i)); -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) gdth_do_req(srp, &gdtcmd, cmnd, 30); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) gdth_do_cmd(scp, &gdtcmd, cmnd, 30); #else gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); #endif } } -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) scsi_release_request(srp); scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) scsi_release_command(scp); scsi_free_host_dev(sdev); #endif } /* shutdown routine */ -#if LINUX_VERSION_CODE >= 0x020100 static int gdth_halt(struct notifier_block *nb, ulong event, void *buf) -#else -void gdth_halt(void) -#endif { int hanum; #ifndef __alpha__ gdth_cmd_str gdtcmd; -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) Scsi_Request *srp; Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) Scsi_Cmnd *scp; Scsi_Device *sdev; #else @@ -5715,20 +6136,11 @@ char cmnd[MAX_COMMAND_SIZE]; #endif -#if LINUX_VERSION_CODE >= 0x020100 TRACE2(("gdth_halt() event %d\n",(int)event)); if (event != SYS_RESTART && event != SYS_HALT && event != SYS_POWER_OFF) return NOTIFY_DONE; -#else - TRACE2(("gdth_halt()\n")); - if (halt_called) { - TRACE2(("already called\n")); - return; - } - halt_called = TRUE; -#endif - printk("GDT: Flushing all host drives .. "); + printk("GDT-HA: Flushing all host drives .. "); for (hanum = 0; hanum < gdth_ctr_count; ++hanum) { gdth_flush(hanum); @@ -5739,32 +6151,24 @@ gdtcmd.Service = CACHESERVICE; gdtcmd.OpCode = GDT_RESET; TRACE2(("gdth_halt(): reset controller %d\n", hanum)); -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); srp = scsi_allocate_request(sdev, GFP_KERNEL); if (!srp) { -#if LINUX_VERSION_CODE >= 0x020100 unregister_reboot_notifier(&gdth_notifier); return NOTIFY_OK; -#else - return; -#endif } srp->sr_cmd_len = 12; srp->sr_use_sg = 0; gdth_do_req(srp, &gdtcmd, cmnd, 10); scsi_release_request(srp); scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); scp = scsi_allocate_device(sdev, 1, FALSE); if (!scp) { -#if LINUX_VERSION_CODE >= 0x020100 unregister_reboot_notifier(&gdth_notifier); return NOTIFY_OK; -#else - return; -#endif } scp->cmd_len = 12; scp->use_sg = 0; @@ -5786,15 +6190,12 @@ #ifdef GDTH_STATISTICS del_timer(&gdth_timer); #endif -#if LINUX_VERSION_CODE >= 0x020100 unregister_reboot_notifier(&gdth_notifier); return NOTIFY_OK; -#endif } -#endif -#if LINUX_VERSION_CODE < 0x020400 && !defined(MODULE) +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) && !defined(MODULE) GDTH_INITFUNC(void, gdth_setup(char *str,int *ints)) { @@ -5805,33 +6206,36 @@ #else +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) static Scsi_Host_Template driver_template = { -#if LINUX_VERSION_CODE >= 0x02015F - .proc_name = "gdth", -#else - .proc_dir = &proc_scsi_gdth, + .proc_name = "gdth", + .proc_info = gdth_proc_info, + .name = "GDT SCSI Disk Array Controller", + .detect = gdth_detect, + .release = gdth_release, + .info = gdth_info, + .queuecommand = gdth_queuecommand, + .eh_abort_handler = gdth_eh_abort, + .eh_device_reset_handler = gdth_eh_device_reset, + .eh_bus_reset_handler = gdth_eh_bus_reset, + .eh_host_reset_handler = gdth_eh_host_reset, + .bios_param = gdth_bios_param, + .can_queue = GDTH_MAXCMDS, + .this_id = -1, + .sg_tablesize = GDTH_MAXSG, + .cmd_per_lun = GDTH_MAXC_P_L, + .unchecked_isa_dma = 1, + .use_clustering = ENABLE_CLUSTERING, +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) + .use_new_eh_code = 1, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) + .highmem_io = 1, #endif - .proc_info = gdth_proc_info, - .name = "GDT SCSI Disk Array Controller", - .detect = gdth_detect, - .release = gdth_release, - .info = gdth_info, - .queuecommand = gdth_queuecommand, - .eh_abort_handler = gdth_eh_abort, - .eh_device_reset_handler = gdth_eh_device_reset, - .eh_bus_reset_handler = gdth_eh_bus_reset, - .eh_host_reset_handler = gdth_eh_host_reset, - .bios_param = gdth_bios_param, - .can_queue = GDTH_MAXCMDS, - .this_id = -1, - .sg_tablesize = GDTH_MAXSG, - .cmd_per_lun = GDTH_MAXC_P_L, - .unchecked_isa_dma = 1, - .use_clustering = ENABLE_CLUSTERING, -#if LINUX_VERSION_CODE < 0x020501 - .use_new_eh_code = 1, #endif }; +#else +static Scsi_Host_Template driver_template = GDTH; +#endif #include "scsi_module.c" #ifndef MODULE diff -Nru a/drivers/scsi/gdth.h b/drivers/scsi/gdth.h --- a/drivers/scsi/gdth.h 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/gdth.h 2004-05-26 15:01:35 -07:00 @@ -10,7 +10,7 @@ * * <achim_leubner@adaptec.com> * - * $Id: gdth.h,v 1.50 2003/09/17 08:29:58 achim Exp $ + * $Id: gdth.h,v 1.57 2004/03/31 11:52:09 achim Exp $ */ #include <linux/version.h> @@ -26,9 +26,9 @@ /* defines, macros */ /* driver version */ -#define GDTH_VERSION_STR "2.08" -#define GDTH_VERSION 2 -#define GDTH_SUBVERSION 8 +#define GDTH_VERSION_STR "3.04" +#define GDTH_VERSION 3 +#define GDTH_SUBVERSION 4 /* protocol version */ #define PROTOCOL_VERSION 1 @@ -133,7 +133,12 @@ /* new GDT Rx Controller */ #define PCI_DEVICE_ID_VORTEX_GDTNEWRX 0x300 #endif - + +#ifndef PCI_DEVICE_ID_VORTEX_GDTNEWRX2 +/* new(2) GDT Rx Controller */ +#define PCI_DEVICE_ID_VORTEX_GDTNEWRX2 0x301 +#endif + #ifndef PCI_DEVICE_ID_INTEL_SRC /* Intel Storage RAID Controller */ #define PCI_DEVICE_ID_INTEL_SRC 0x600 @@ -146,8 +151,7 @@ /* limits */ #define GDTH_SCRATCH PAGE_SIZE /* 4KB scratch buffer */ -#define GDTH_SCRATCH_ORD 0 /* order 0 means 1 page */ -#define GDTH_MAXCMDS 124 +#define GDTH_MAXCMDS 120 #define GDTH_MAXC_P_L 16 /* max. cmds per lun */ #define GDTH_MAX_RAW 2 /* max. cmds per raw device */ #define MAXOFFSETS 128 @@ -221,6 +225,8 @@ #define GDT_CLUST_RESET 24 /* releases the cluster drives*/ #define GDT_FREEZE_IO 25 /* freezes all IOs */ #define GDT_UNFREEZE_IO 26 /* unfreezes all IOs */ +#define GDT_X_INIT_HOST 29 /* ext. init: 64 bit support */ +#define GDT_X_INFO 30 /* ext. info for drives>2TB */ /* raw service commands */ #define GDT_RESERVE 14 /* reserve dev. to raw serv. */ @@ -230,9 +236,11 @@ #define GDT_RESET_BUS 18 /* reset bus */ #define GDT_SCAN_START 19 /* start device scan */ #define GDT_SCAN_END 20 /* stop device scan */ +#define GDT_X_INIT_RAW 21 /* ext. init: 64 bit support */ /* screen service commands */ #define GDT_REALTIME 3 /* realtime clock to screens. */ +#define GDT_X_INIT_SCR 4 /* ext. init: 64 bit support */ /* IOCTL command defines */ #define SCSI_DR_INFO 0x00 /* SCSI drive info */ @@ -254,6 +262,8 @@ #define CACHE_DRV_INFO 0x07 /* cache drive info */ #define BOARD_FEATURES 0x15 /* controller features */ #define BOARD_INFO 0x28 /* controller info */ +#define SET_PERF_MODES 0x82 /* set mode (coalescing,..) */ +#define GET_PERF_MODES 0x83 /* get mode */ #define CACHE_READ_OEM_STRING_RECORD 0x84 /* read OEM string record */ #define HOST_GET 0x10001L /* get host drive list */ #define IO_CHANNEL 0x00020000L /* default IO channel */ @@ -266,6 +276,7 @@ #define S_CACHE_UNKNOWN 12 /* cache serv.: drive unknown */ #define S_RAW_SCSI 12 /* raw serv.: target error */ #define S_RAW_ILL 0xff /* raw serv.: illegal */ +#define S_NOFUNC -2 /* unknown function */ #define S_CACHE_RESERV -24 /* cache: reserv. conflict */ /* timeout values */ @@ -307,7 +318,12 @@ #define LOCALBOARD 0 /* board node always 0 */ #define ASYNCINDEX 0 /* cmd index async. event */ #define SPEZINDEX 1 /* cmd index unknown service */ +#define COALINDEX (GDTH_MAXCMDS + 2) + +/* features */ +#define SCATTER_GATHER 1 /* s/g feature */ #define GDT_WR_THROUGH 0x100 /* WRITE_THROUGH supported */ +#define GDT_64BIT 0x200 /* 64bit / drv>2TB support */ #include "gdth_ioctl.h" @@ -322,7 +338,40 @@ char msg_text[MSGLEN+2]; /* the message text */ } PACKED gdth_msg_str; + /* IOCTL data structures */ + +/* Status coalescing buffer for returning multiple requests per interrupt */ +typedef struct { + ulong32 status; + ulong32 ext_status; + ulong32 info0; + ulong32 info1; +} PACKED gdth_coal_status; + +/* performance mode data structure */ +typedef struct { + ulong32 version; /* The version of this IOCTL structure. */ + ulong32 st_mode; /* 0=dis., 1=st_buf_addr1 valid, 2=both */ + ulong32 st_buff_addr1; /* physical address of status buffer 1 */ + ulong32 st_buff_u_addr1; /* reserved for 64 bit addressing */ + ulong32 st_buff_indx1; /* reserved command idx. for this buffer */ + ulong32 st_buff_addr2; /* physical address of status buffer 1 */ + ulong32 st_buff_u_addr2; /* reserved for 64 bit addressing */ + ulong32 st_buff_indx2; /* reserved command idx. for this buffer */ + ulong32 st_buff_size; /* size of each buffer in bytes */ + ulong32 cmd_mode; /* 0 = mode disabled, 1 = cmd_buff_addr1 */ + ulong32 cmd_buff_addr1; /* physical address of cmd buffer 1 */ + ulong32 cmd_buff_u_addr1; /* reserved for 64 bit addressing */ + ulong32 cmd_buff_indx1; /* cmd buf addr1 unique identifier */ + ulong32 cmd_buff_addr2; /* physical address of cmd buffer 1 */ + ulong32 cmd_buff_u_addr2; /* reserved for 64 bit addressing */ + ulong32 cmd_buff_indx2; /* cmd buf addr1 unique identifier */ + ulong32 cmd_buff_size; /* size of each cmd bufer in bytes */ + ulong32 reserved1; + ulong32 reserved2; +} PACKED gdth_perf_modes; + /* SCSI drive info */ typedef struct { unchar vendor[8]; /* vendor string */ @@ -795,9 +844,7 @@ /* PCI resources */ typedef struct { -#if LINUX_VERSION_CODE >= 0x02015C struct pci_dev *pdev; -#endif ushort vendor_id; /* vendor (ICP, Intel, ..) */ ushort device_id; /* device ID (0,..,9) */ ushort subdevice_id; /* sub device ID */ @@ -814,20 +861,28 @@ typedef struct { ushort oem_id; /* OEM */ ushort type; /* controller class */ - ushort raw_feat; /* feat. raw service (s/g,..) */ ulong32 stype; /* subtype (PCI: device ID) */ ushort subdevice_id; /* sub device ID (PCI) */ ushort fw_vers; /* firmware version */ - ushort cache_feat; /* feat. cache serv. (s/g,..) */ + ushort cache_feat; /* feat. cache serv. (s/g,..)*/ + ushort raw_feat; /* feat. raw service (s/g,..)*/ + ushort screen_feat; /* feat. raw service (s/g,..)*/ ushort bmic; /* BMIC address (EISA) */ void *brd; /* DPRAM address */ ulong32 brd_phys; /* slot number/BIOS address */ gdt6c_plx_regs *plx; /* PLX regs (new PCI contr.) */ gdth_cmd_str *pccb; /* address command structure */ ulong32 ccb_phys; /* phys. address */ +#ifdef INT_COAL + gdth_coal_status *coal_stat; /* buffer for coalescing int.*/ + ulong64 coal_stat_phys; /* phys. address */ +#endif char *pscratch; /* scratch (DMA) buffer */ - ulong32 scratch_phys; /* phys. address */ + ulong64 scratch_phys; /* phys. address */ unchar scratch_busy; /* in use? */ + unchar dma64_support; /* 64-bit DMA supported? */ + gdth_msg_str *pmsg; /* message buffer */ + ulong64 msg_phys; /* phys. address */ unchar scan_mode; /* current scan mode */ unchar irq; /* IRQ */ unchar drq; /* DRQ (ISA controllers) */ @@ -848,11 +903,11 @@ unchar heads; /* mapping */ unchar secs; ushort devtype; /* further information */ - ulong32 size; /* capacity */ + ulong64 size; /* capacity */ unchar ldr_no; /* log. drive no. */ unchar rw_attribs; /* r/w attributes */ unchar cluster_type; /* cluster properties */ - unchar media_changed; /* Flag:MOUNT/UNMOUNT occurred*/ + unchar media_changed; /* Flag:MOUNT/UNMOUNT occured */ ulong32 start_sec; /* start sector */ } hdr[MAX_LDRIVES]; /* host drives */ struct { @@ -880,13 +935,19 @@ gdth_bfeat_str bfeat; /* controller features */ gdth_binfo_str binfo; /* controller info */ gdth_evt_data dvr; /* event structure */ -#if LINUX_VERSION_CODE >= 0x02015F spinlock_t smp_lock; -#endif -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) struct pci_dev *pdev; #endif char oem_name[8]; +#ifdef GDTH_DMA_STATISTICS + ulong dma32_cnt, dma64_cnt; /* statistics: DMA buffer */ +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + Scsi_Device *sdev; +#else + Scsi_Device sdev; +#endif } gdth_ha_str; /* structure for scsi_register(), SCSI bus != 0 */ @@ -924,6 +985,12 @@ ulong32 block_length; } PACKED gdth_rdcap_data; +/* READ_CAPACITY (16) data format */ +typedef struct { + ulong64 last_block_no; + ulong32 block_length; +} PACKED gdth_rdcap16_data; + /* REQUEST_SENSE data format */ typedef struct { unchar errorcode; @@ -965,42 +1032,48 @@ int gdth_detect(Scsi_Host_Template *); int gdth_release(struct Scsi_Host *); int gdth_queuecommand(Scsi_Cmnd *,void (*done)(Scsi_Cmnd *)); -int gdth_abort(Scsi_Cmnd *); -#if LINUX_VERSION_CODE >= 0x010346 -int gdth_reset(Scsi_Cmnd *, unsigned int reset_flags); -#else -int gdth_reset(Scsi_Cmnd *); -#endif const char *gdth_info(struct Scsi_Host *); -#if LINUX_VERSION_CODE >= 0x020501 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) int gdth_bios_param(struct scsi_device *,struct block_device *,sector_t,int *); int gdth_proc_info(struct Scsi_Host *, char *,char **,off_t,int,int); -int gdth_eh_abort(Scsi_Cmnd *scp); -int gdth_eh_device_reset(Scsi_Cmnd *scp); -int gdth_eh_bus_reset(Scsi_Cmnd *scp); -int gdth_eh_host_reset(Scsi_Cmnd *scp); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) int gdth_bios_param(Disk *,kdev_t,int *); int gdth_proc_info(char *,char **,off_t,int,int,int); -int gdth_eh_abort(Scsi_Cmnd *scp); -int gdth_eh_device_reset(Scsi_Cmnd *scp); -int gdth_eh_bus_reset(Scsi_Cmnd *scp); -int gdth_eh_host_reset(Scsi_Cmnd *scp); -#elif LINUX_VERSION_CODE >= 0x02015F +#else int gdth_bios_param(Disk *,kdev_t,int *); extern struct proc_dir_entry proc_scsi_gdth; int gdth_proc_info(char *,char **,off_t,int,int,int); +int gdth_abort(Scsi_Cmnd *); +int gdth_reset(Scsi_Cmnd *,unsigned int); +#define GDTH { proc_dir: &proc_scsi_gdth, \ + proc_info: gdth_proc_info, \ + name: "GDT SCSI Disk Array Controller",\ + detect: gdth_detect, \ + release: gdth_release, \ + info: gdth_info, \ + command: NULL, \ + queuecommand: gdth_queuecommand, \ + eh_abort_handler: gdth_eh_abort, \ + eh_device_reset_handler: gdth_eh_device_reset, \ + eh_bus_reset_handler: gdth_eh_bus_reset, \ + eh_host_reset_handler: gdth_eh_host_reset, \ + abort: gdth_abort, \ + reset: gdth_reset, \ + bios_param: gdth_bios_param, \ + can_queue: GDTH_MAXCMDS, \ + this_id: -1, \ + sg_tablesize: GDTH_MAXSG, \ + cmd_per_lun: GDTH_MAXC_P_L, \ + present: 0, \ + unchecked_isa_dma: 1, \ + use_clustering: ENABLE_CLUSTERING, \ + use_new_eh_code: 1 /* use new error code */ } +#endif + int gdth_eh_abort(Scsi_Cmnd *scp); int gdth_eh_device_reset(Scsi_Cmnd *scp); int gdth_eh_bus_reset(Scsi_Cmnd *scp); int gdth_eh_host_reset(Scsi_Cmnd *scp); -#elif LINUX_VERSION_CODE >= 0x010300 -int gdth_bios_param(Disk *,kdev_t,int *); -extern struct proc_dir_entry proc_scsi_gdth; -int gdth_proc_info(char *,char **,off_t,int,int,int); -#else -int gdth_bios_param(Disk *,int,int *); -#endif -#endif +#endif diff -Nru a/drivers/scsi/gdth_ioctl.h b/drivers/scsi/gdth_ioctl.h --- a/drivers/scsi/gdth_ioctl.h 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/gdth_ioctl.h 2004-05-26 15:01:36 -07:00 @@ -2,7 +2,7 @@ #define _GDTH_IOCTL_H /* gdth_ioctl.h - * $Id: gdth_ioctl.h,v 1.11 2003/02/27 14:59:03 achim Exp $ + * $Id: gdth_ioctl.h,v 1.14 2004/02/19 15:43:15 achim Exp $ */ /* IOCTLs */ @@ -21,8 +21,8 @@ #define GDTIOCTL_RESCAN (GDTIOCTL_MASK |11) /* rescan host drives */ #define GDTIOCTL_RESET_DRV (GDTIOCTL_MASK |12) /* reset (remote) drv. res. */ -#define GDTIOCTL_MAGIC 0xaffe0004 -#define EVENT_SIZE 294 +#define GDTIOCTL_MAGIC 0xaffe0004 +#define EVENT_SIZE 294 #define GDTH_MAXSG 32 /* max. s/g elements */ #define MAX_LDRIVES 255 /* max. log. drive count */ @@ -35,7 +35,9 @@ /* typedefs */ #ifdef __KERNEL__ typedef u32 ulong32; +typedef u64 ulong64; #endif + #define PACKED __attribute__((packed)) /* scatter/gather element */ @@ -44,6 +46,12 @@ ulong32 sg_len; /* length */ } PACKED gdth_sg_str; +/* scatter/gather element - 64bit addresses */ +typedef struct { + ulong64 sg_ptr; /* address */ + ulong32 sg_len; /* length */ +} PACKED gdth_sg64_str; + /* command structure */ typedef struct { ulong32 BoardNode; /* board node (always 0) */ @@ -59,17 +67,25 @@ gdth_sg_str sg_lst[GDTH_MAXSG]; /* s/g list */ } PACKED cache; /* cache service cmd. str. */ struct { + ushort DeviceNo; /* number of cache drive */ + ulong64 BlockNo; /* block number */ + ulong32 BlockCnt; /* block count */ + ulong64 DestAddr; /* dest. addr. (if s/g: -1) */ + ulong32 sg_canz; /* s/g element count */ + gdth_sg64_str sg_lst[GDTH_MAXSG]; /* s/g list */ + } PACKED cache64; /* cache service cmd. str. */ + struct { ushort param_size; /* size of p_param buffer */ ulong32 subfunc; /* IOCTL function */ ulong32 channel; /* device */ - ulong32 p_param; /* buffer */ + ulong64 p_param; /* buffer */ } PACKED ioctl; /* IOCTL command structure */ struct { ushort reserved; union { struct { ulong32 msg_handle; /* message handle */ - ulong32 msg_addr; /* message buffer address */ + ulong64 msg_addr; /* message buffer address */ } PACKED msg; unchar data[12]; /* buffer for rtc data, ... */ } su; @@ -93,6 +109,24 @@ ulong32 sg_ranz; /* s/g element count */ gdth_sg_str sg_lst[GDTH_MAXSG]; /* s/g list */ } PACKED raw; /* raw service cmd. struct. */ + struct { + ushort reserved; + ulong32 direction; /* data direction */ + ulong32 mdisc_time; /* disc. time (0: no timeout)*/ + ulong32 mcon_time; /* connect time(0: no to.) */ + ulong64 sdata; /* dest. addr. (if s/g: -1) */ + ulong32 sdlen; /* data length (bytes) */ + ulong32 clen; /* SCSI cmd. length(6,..,16) */ + unchar cmd[16]; /* SCSI command */ + unchar target; /* target ID */ + unchar lun; /* LUN */ + unchar bus; /* SCSI bus number */ + unchar priority; /* only 0 used */ + ulong32 sense_len; /* sense data length */ + ulong64 sense_data; /* sense data addr. */ + ulong32 sg_ranz; /* s/g element count */ + gdth_sg64_str sg_lst[GDTH_MAXSG]; /* s/g list */ + } PACKED raw64; /* raw service cmd. struct. */ } u; /* additional variables */ unchar Service; /* controller service */ @@ -236,7 +270,6 @@ } gdth_iord_str; #endif -#ifdef GDTH_IOCTL_CHRDEV /* GDTIOCTL_GENERAL */ typedef struct { ushort ionode; /* controller number */ @@ -244,8 +277,8 @@ ulong32 info; /* error info */ ushort status; /* status */ ulong data_len; /* data buffer size */ - ulong sense_len; /* sense buffer size */ - gdth_cmd_str command; /* command */ + ulong sense_len; /* sense buffer size */ + gdth_cmd_str command; /* command */ } gdth_ioctl_general; /* GDTIOCTL_LOCKDRV */ @@ -310,6 +343,5 @@ ushort number; /* bus/host drive number */ ushort status; /* status */ } gdth_ioctl_reset; -#endif #endif diff -Nru a/drivers/scsi/gdth_proc.c b/drivers/scsi/gdth_proc.c --- a/drivers/scsi/gdth_proc.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/gdth_proc.c 2004-05-26 15:01:36 -07:00 @@ -1,56 +1,80 @@ /* gdth_proc.c - * $Id: gdth_proc.c,v 1.37 2003/09/17 08:31:53 achim Exp $ + * $Id: gdth_proc.c,v 1.42 2004/03/05 15:50:20 achim Exp $ */ -#if LINUX_VERSION_CODE >= 0x020407 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,7) #include <linux/completion.h> #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) int gdth_proc_info(struct Scsi_Host *host, char *buffer,char **start,off_t offset,int length, int inout) { int hanum,busnum; - TRACE2(("gdth_proc_info() length %d ha %d offs %d inout %d\n", - length,hostno,(int)offset,inout)); + TRACE2(("gdth_proc_info() length %d offs %d inout %d\n", + length,(int)offset,inout)); hanum = NUMDATA(host)->hanum; busnum= NUMDATA(host)->busnum; if (inout) - return(gdth_set_info(buffer,length,hanum,busnum)); + return(gdth_set_info(buffer,length,host,hanum,busnum)); else - return(gdth_get_info(buffer,start,offset,length,hanum,busnum)); + return(gdth_get_info(buffer,start,offset,length,host,hanum,busnum)); } +#else +int gdth_proc_info(char *buffer,char **start,off_t offset,int length,int hostno, + int inout) +{ + int hanum,busnum,i; + + TRACE2(("gdth_proc_info() length %d offs %d inout %d\n", + length,(int)offset,inout)); + + for (i = 0; i < gdth_ctr_vcount; ++i) { + if (gdth_ctr_vtab[i]->host_no == hostno) + break; + } + if (i == gdth_ctr_vcount) + return(-EINVAL); + + hanum = NUMDATA(gdth_ctr_vtab[i])->hanum; + busnum= NUMDATA(gdth_ctr_vtab[i])->busnum; + + if (inout) + return(gdth_set_info(buffer,length,gdth_ctr_vtab[i],hanum,busnum)); + else + return(gdth_get_info(buffer,start,offset,length, + gdth_ctr_vtab[i],hanum,busnum)); +} +#endif -static int gdth_set_info(char *buffer,int length,int hanum,int busnum) +static int gdth_set_info(char *buffer,int length,struct Scsi_Host *host, + int hanum,int busnum) { int ret_val = -EINVAL; -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) Scsi_Request *scp; Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) Scsi_Cmnd *scp; Scsi_Device *sdev; #else Scsi_Cmnd scp; Scsi_Device sdev; #endif -#ifdef GDTH_IOCTL_PROC - gdth_iowr_str *piowr; - piowr = (gdth_iowr_str *)buffer; -#endif TRACE2(("gdth_set_info() ha %d bus %d\n",hanum,busnum)); -#if LINUX_VERSION_CODE >= 0x020503 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + sdev = scsi_get_host_dev(host); scp = scsi_allocate_request(sdev, GFP_KERNEL); if (!scp) return -ENOMEM; scp->sr_cmd_len = 12; scp->sr_use_sg = 0; -#elif LINUX_VERSION_CODE >= 0x020322 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + sdev = scsi_get_host_dev(host); scp = scsi_allocate_device(sdev, 1, FALSE); if (!scp) return -ENOMEM; @@ -59,7 +83,7 @@ #else memset(&sdev,0,sizeof(Scsi_Device)); memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = scp.host = gdth_ctr_tab[hanum]; + sdev.host = scp.host = host; sdev.id = scp.target = sdev.host->this_id; scp.device = &sdev; #endif @@ -69,32 +93,21 @@ buffer += 5; length -= 5; ret_val = gdth_set_asc_info( buffer, length, hanum, scp ); -#ifdef GDTH_IOCTL_PROC - } else if (piowr->magic == GDTIOCTL_MAGIC) { - ret_val = gdth_set_bin_info( buffer, length, hanum, scp ); - } else { - printk("GDT: Wrong signature %x (%x required)!\n", - piowr->magic, GDTIOCTL_MAGIC); - if (piowr->magic > GDTIOCTL_MAGIC) - printk("GDT: Please update your driver.\n"); - else - printk("GDT: Please update your tool.\n"); -#endif } } -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) scsi_release_request(scp); scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) scsi_release_command(scp); scsi_free_host_dev(sdev); #endif return ret_val; } -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Request *scp) -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd *scp) #else static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd scp) @@ -105,7 +118,7 @@ gdth_ha_str *ha; gdth_cmd_str gdtcmd; gdth_cpar_str *pcpar; - ulong32 paddr; + ulong64 paddr; char cmnd[MAX_COMMAND_SIZE]; memset(cmnd, 0xff, 12); @@ -139,11 +152,16 @@ found = TRUE; gdtcmd.Service = CACHESERVICE; gdtcmd.OpCode = GDT_FLUSH; - gdtcmd.u.cache.DeviceNo = i; - gdtcmd.u.cache.BlockNo = 1; -#if LINUX_VERSION_CODE >= 0x020503 + if (ha->cache_feat & GDT_64BIT) { + gdtcmd.u.cache64.DeviceNo = i; + gdtcmd.u.cache64.BlockNo = 1; + } else { + gdtcmd.u.cache.DeviceNo = i; + gdtcmd.u.cache.BlockNo = 1; + } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) gdth_do_req(scp, &gdtcmd, cmnd, 30); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) gdth_do_cmd(scp, &gdtcmd, cmnd, 30); #else gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); @@ -199,9 +217,9 @@ gdtcmd.u.ioctl.subfunc = CACHE_CONFIG; gdtcmd.u.ioctl.channel = INVALID_CHANNEL; pcpar->write_back = wb_mode==1 ? 0:1; -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) gdth_do_req(scp, &gdtcmd, cmnd, 30); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) gdth_do_cmd(scp, &gdtcmd, cmnd, 30); #else gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); @@ -215,562 +233,23 @@ return(-EINVAL); } -#ifdef GDTH_IOCTL_PROC -#if LINUX_VERSION_CODE >= 0x020503 -static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Request *scp) -#elif LINUX_VERSION_CODE >= 0x020322 -static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Cmnd *scp) -#else -static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Cmnd scp) -#endif -{ - unchar i, j; - ushort k, hdr_cnt, status; - gdth_ha_str *ha; - gdth_iowr_str *piowr; - gdth_iord_str *piord; - gdth_cmd_str *pcmd; - gdth_evt_str *pevt; - ulong32 *ppadd, add_size, *ppadd2, add_size2, info, paddr; - ulong flags; - gdth_cmd_str gdtcmd; - int drv_cyls, drv_hds, drv_secs; - - char cmnd[MAX_COMMAND_SIZE]; - memset(cmnd, 0xff, 12); - memset(&gdtcmd, 0, sizeof(gdth_cmd_str)); - - TRACE2(("gdth_set_bin_info() ha %d\n",hanum)); - ha = HADATA(gdth_ctr_tab[hanum]); - piowr = (gdth_iowr_str *)buffer; - piord = NULL; - pcmd = NULL; - ppadd = ppadd2 = NULL; - add_size = add_size2 = 0; - - if (length < GDTOFFSOF(gdth_iowr_str,iu)) - return(-EINVAL); - - switch (piowr->ioctl) { - case GDTIOCTL_GENERAL: - if (length < GDTOFFSOF(gdth_iowr_str,iu.general.data[0])) - return(-EINVAL); - pcmd = (gdth_cmd_str *)piowr->iu.general.command; - pcmd->Service = piowr->service; - if (pcmd->OpCode == GDT_IOCTL) { - ppadd = &pcmd->u.ioctl.p_param; - add_size = pcmd->u.ioctl.param_size; - } else if (piowr->service == CACHESERVICE) { - add_size = pcmd->u.cache.BlockCnt * SECTOR_SIZE; - if (ha->cache_feat & SCATTER_GATHER) { - ppadd = &pcmd->u.cache.sg_lst[0].sg_ptr; - pcmd->u.cache.DestAddr = 0xffffffff; - pcmd->u.cache.sg_lst[0].sg_len = add_size; - pcmd->u.cache.sg_canz = 1; - } else { - ppadd = &pcmd->u.cache.DestAddr; - pcmd->u.cache.sg_canz = 0; - } - } else if (piowr->service == SCSIRAWSERVICE) { - add_size = pcmd->u.raw.sdlen; - add_size2 = pcmd->u.raw.sense_len; - if (ha->raw_feat & SCATTER_GATHER) { - ppadd = &pcmd->u.raw.sg_lst[0].sg_ptr; - pcmd->u.raw.sdata = 0xffffffff; - pcmd->u.raw.sg_lst[0].sg_len = add_size; - pcmd->u.raw.sg_ranz = 1; - } else { - ppadd = &pcmd->u.raw.sdata; - pcmd->u.raw.sg_ranz = 0; - } - ppadd2 = &pcmd->u.raw.sense_data; - } else { - return(-EINVAL); - } - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str)+add_size+add_size2, - TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str) + add_size + add_size2; - if (add_size > 0) { - memcpy(piord->iu.general.data, piowr->iu.general.data, add_size); - *ppadd = paddr + GDTOFFSOF(gdth_iord_str, iu.general.data[0]); - } - if (add_size2 > 0) { - memcpy(piord->iu.general.data+add_size, piowr->iu.general.data, add_size2); - *ppadd2 = paddr + GDTOFFSOF(gdth_iord_str, iu.general.data[0]) + add_size2; - } - - /* do IOCTL */ -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, pcmd, cmnd, piowr->timeout); - piord->status = (scp->sr_command->SCp.Message << 16) | - scp->sr_command->SCp.Status; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, pcmd, cmnd, piowr->timeout); - piord->status = (scp->SCp.Message<<16)|scp->SCp.Status; -#else - gdth_do_cmd(&scp, pcmd, cmnd, piowr->timeout); - piord->status = (scp.SCp.Message<<16)|scp.SCp.Status; -#endif - break; - - case GDTIOCTL_DRVERS: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - piord->iu.drvers.version = (GDTH_VERSION<<8) | GDTH_SUBVERSION; - break; - - case GDTIOCTL_CTRTYPE: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - if (ha->type == GDT_ISA || ha->type == GDT_EISA) { - piord->iu.ctrtype.type = (unchar)((ha->stype>>20) - 0x10); - } else { - if (ha->type != GDT_PCIMPR) { - piord->iu.ctrtype.type = (unchar)((ha->stype<<4) + 6); - } else { - piord->iu.ctrtype.type = - (ha->oem_id == OEM_ID_INTEL ? 0xfd : 0xfe); - if (ha->stype >= 0x300) - piord->iu.ctrtype.ext_type = 0x6000 | ha->subdevice_id; - else - piord->iu.ctrtype.ext_type = 0x6000 | ha->stype; - } - piord->iu.ctrtype.device_id = ha->stype; - piord->iu.ctrtype.sub_device_id = ha->subdevice_id; - } - piord->iu.ctrtype.info = ha->brd_phys; - piord->iu.ctrtype.oem_id = ha->oem_id; - break; - - case GDTIOCTL_CTRCNT: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - piord->iu.ctrcnt.count = (ushort)gdth_ctr_count; - break; - - case GDTIOCTL_OSVERS: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - piord->iu.osvers.version = (unchar)(LINUX_VERSION_CODE >> 16); - piord->iu.osvers.subversion = (unchar)(LINUX_VERSION_CODE >> 8); - piord->iu.osvers.revision = (ushort)(LINUX_VERSION_CODE & 0xff); - break; - - case GDTIOCTL_LOCKDRV: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - for (i = 0; i < piowr->iu.lockdrv.drive_cnt; ++i) { - j = piowr->iu.lockdrv.drives[i]; - if (j >= MAX_HDRIVES || !ha->hdr[j].present) - continue; - if (piowr->iu.lockdrv.lock) { - GDTH_LOCK_HA(ha, flags); - ha->hdr[j].lock = 1; - GDTH_UNLOCK_HA(ha, flags); - gdth_wait_completion( hanum, ha->bus_cnt, j ); - gdth_stop_timeout( hanum, ha->bus_cnt, j ); - } else { - GDTH_LOCK_HA(ha, flags); - ha->hdr[j].lock = 0; - GDTH_UNLOCK_HA(ha, flags); - gdth_start_timeout( hanum, ha->bus_cnt, j ); - gdth_next( hanum ); - } - } - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - break; - - case GDTIOCTL_LOCKCHN: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - i = piowr->iu.lockchn.channel; - if (i < ha->bus_cnt) { - if (piowr->iu.lockchn.lock) { - GDTH_LOCK_HA(ha, flags); - ha->raw[i].lock = 1; - GDTH_UNLOCK_HA(ha, flags); - for (j = 0; j < ha->tid_cnt; ++j) { - gdth_wait_completion( hanum, i, j ); - gdth_stop_timeout( hanum, i, j ); - } - } else { - GDTH_LOCK_HA(ha, flags); - ha->raw[i].lock = 0; - GDTH_UNLOCK_HA(ha, flags); - for (j = 0; j < ha->tid_cnt; ++j) { - gdth_start_timeout( hanum, i, j ); - gdth_next( hanum ); - } - } - } - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - break; - - case GDTIOCTL_EVENT: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - if (piowr->iu.event.erase == 0xff) { - pevt = (gdth_evt_str *)piowr->iu.event.evt; - if (pevt->event_source == ES_TEST) - pevt->event_data.size = sizeof(pevt->event_data.eu.test); - else if (pevt->event_source == ES_DRIVER) - pevt->event_data.size = sizeof(pevt->event_data.eu.driver); - else if (pevt->event_source == ES_SYNC) - pevt->event_data.size = sizeof(pevt->event_data.eu.sync); - else { - pevt->event_data.size = sizeof(pevt->event_data.eu.async); - gdth_log_event(&pevt->event_data, NULL); - } - GDTH_LOCK_HA(ha, flags); - gdth_store_event(ha, pevt->event_source, pevt->event_idx, - &pevt->event_data); - GDTH_UNLOCK_HA(ha, flags); - } else if (piowr->iu.event.erase == 0xfe) { - gdth_clear_events(); - } else if (piowr->iu.event.erase == 0) { - piord->iu.event.handle = - gdth_read_event(ha,piowr->iu.event.handle, - (gdth_evt_str *)piord->iu.event.evt); - } else { - piord->iu.event.handle = piowr->iu.event.handle; - gdth_readapp_event(ha, (unchar)piowr->iu.event.erase, - (gdth_evt_str *)piord->iu.event.evt); - } - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - break; - - case GDTIOCTL_SCSI: -#if LINUX_VERSION_CODE >= 0x020503 - return(-EINVAL); -#else - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - memcpy(cmnd, piowr->iu.scsi.cmd, 12); -#if LINUX_VERSION_CODE >= 0x020322 - scp->target = piowr->iu.scsi.target; - scp->channel = virt_ctr ? 0 : piowr->iu.scsi.bus; - scp->cmd_len = piowr->iu.scsi.cmd_len; - gdth_do_cmd(scp, pcmd, cmnd, piowr->timeout); - piord->status = (scp->SCp.Message<<16)|scp->SCp.Status; -#else - scp.target = piowr->iu.scsi.target; - scp.channel = virt_ctr ? 0 : piowr->iu.scsi.bus; - scp.cmd_len = piowr->iu.scsi.cmd_len; - gdth_do_cmd(&scp, pcmd, cmnd, piowr->timeout); - piord->status = (scp.SCp.Message<<16)|scp.SCp.Status; -#endif -#endif - break; - - case GDTIOCTL_RESET_BUS: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); -#if LINUX_VERSION_CODE >= 0x02053C - { - Scsi_Device *sdev; - Scsi_Cmnd *scmnd; - - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); - scmnd= scsi_get_command(sdev, GFP_KERNEL); - if (!scmnd) - return(-ENOMEM); - scmnd->device->host = scp->sr_host; - scmnd->device->channel = virt_ctr ? 0 : piowr->iu.scsi.bus; - piord->status = (ulong32)gdth_eh_bus_reset( scmnd ); - if (piord->status == SUCCESS) - piord->status = S_OK; - else - piord->status = S_GENERR; - scsi_put_command(scmnd); - scsi_free_host_dev(sdev); - } -#elif LINUX_VERSION_CODE >= 0x020503 - { - Scsi_Cmnd scmnd; - - scmnd.host = scp->sr_host; - scmnd.channel = virt_ctr ? 0 : piowr->iu.scsi.bus; - piord->status = (ulong32)gdth_eh_bus_reset( &scmnd ); - if (piord->status == SUCCESS) - piord->status = S_OK; - else - piord->status = S_GENERR; - } -#elif LINUX_VERSION_CODE >= 0x020322 - scp->channel = virt_ctr ? 0 : piowr->iu.scsi.bus; - piord->status = (ulong32)gdth_eh_bus_reset( scp ); - if (piord->status == SUCCESS) - piord->status = S_OK; - else - piord->status = S_GENERR; -#elif LINUX_VERSION_CODE >= 0x02015F - scp.channel = virt_ctr ? 0 : piowr->iu.scsi.bus; - piord->status = (ulong32)gdth_eh_bus_reset( &scp ); - if (piord->status == SUCCESS) - piord->status = S_OK; - else - piord->status = S_GENERR; -#else - piord->status = S_OK; -#endif - break; - - case GDTIOCTL_HDRLIST: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - for (i = 0; i < MAX_HDRIVES; ++i) { - if (ha->hdr[i].present) { - piord->iu.hdr_list[i].bus = ha->virt_bus; - piord->iu.hdr_list[i].target = i; - piord->iu.hdr_list[i].lun = 0; - piord->iu.hdr_list[i].cluster_type = ha->hdr[i].cluster_type; - if (ha->hdr[i].cluster_type & CLUSTER_DRIVE) { - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_CLUST_INFO; - gdtcmd.u.cache.DeviceNo = i; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - if (scp->sr_command->SCp.Status == S_OK) - piord->iu.hdr_list[i].cluster_type = - (unchar)scp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - if (scp->SCp.Status == S_OK) - piord->iu.hdr_list[i].cluster_type = - (unchar)scp->SCp.Message; -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - if (scp.SCp.Status == S_OK) - piord->iu.hdr_list[i].cluster_type = - (unchar)scp.SCp.Message; -#endif - } - } else { - piord->iu.hdr_list[i].bus = 0xff; - } - } - break; - - case GDTIOCTL_RESCAN: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - if (piowr->iu.rescan.flag == 0) { - /* old method: scan all host drives - re-initialize cache service to get host drive count - */ - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_INIT; - gdtcmd.u.cache.DeviceNo = LINUX_OS; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->sr_command->SCp.Status; - info = (ulong32)scp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; -#endif - if (status != S_OK) - break; - k = 0; - hdr_cnt = (ushort)info; - } else { - k = piowr->iu.rescan.hdr_no; - hdr_cnt = k + 1; - } - if (hdr_cnt > MAX_HDRIVES) - hdr_cnt = MAX_HDRIVES; - /* scanning for host drives */ - for (; k < hdr_cnt; ++k) { - /* info about host drive */ - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_INFO; - gdtcmd.u.cache.DeviceNo = k; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->sr_command->SCp.Status; - info = (ulong32)scp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; -#endif - GDTH_LOCK_HA(ha, flags); - piord->iu.hdr_list[k].bus = ha->virt_bus; - piord->iu.hdr_list[k].target = k; - piord->iu.hdr_list[k].lun = 0; - if (status != S_OK) { - ha->hdr[k].present = FALSE; - } else { - ha->hdr[k].present = TRUE; - ha->hdr[k].size = info; - /* evaluate mapping (sectors per head, heads per cylinder) */ - ha->hdr[k].size &= ~SECS32; - gdth_eval_mapping(ha->hdr[k].size,&drv_cyls,&drv_hds,&drv_secs); - ha->hdr[k].heads = (unchar)drv_hds; - ha->hdr[k].secs = (unchar)drv_secs; - /* round size */ - ha->hdr[k].size = drv_cyls * drv_hds * drv_secs; - } - GDTH_UNLOCK_HA(ha, flags); - if (status != S_OK) - continue; /* next host drive */ - - /* devtype, cluster info, R/W attributes */ - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_DEVTYPE; - gdtcmd.u.cache.DeviceNo = k; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->sr_command->SCp.Status; - info = (ulong32)scp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; -#endif - GDTH_LOCK_HA(ha, flags); - ha->hdr[k].devtype = 0; - if (status == S_OK) - ha->hdr[k].devtype = (ushort)info; - GDTH_UNLOCK_HA(ha, flags); - - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_CLUST_INFO; - gdtcmd.u.cache.DeviceNo = k; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->sr_command->SCp.Status; - info = (ulong32)scp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; -#endif - GDTH_LOCK_HA(ha, flags); - ha->hdr[k].cluster_type = 0; - if (status == S_OK && !shared_access) - ha->hdr[k].cluster_type = (ushort)info; - GDTH_UNLOCK_HA(ha, flags); - piord->iu.hdr_list[k].cluster_type = ha->hdr[k].cluster_type; - - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_RW_ATTRIBS; - gdtcmd.u.cache.DeviceNo = k; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->sr_command->SCp.Status; - info = (ulong32)scp->sr_command->SCp.Message; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - status = (ushort)scp->SCp.Status; - info = (ulong32)scp->SCp.Message; -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - status = (ushort)scp.SCp.Status; - info = (ulong32)scp.SCp.Message; -#endif - GDTH_LOCK_HA(ha, flags); - ha->hdr[k].rw_attribs = 0; - if (status == S_OK) - ha->hdr[k].rw_attribs = (ushort)info; - GDTH_UNLOCK_HA(ha, flags); - } - break; - - case GDTIOCTL_RESET_DRV: - if (!gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str), TRUE, &paddr )) - return(-EBUSY); - piord = (gdth_iord_str *)ha->pscratch; - piord->size = sizeof(gdth_iord_str); - piord->status = S_OK; - i = piowr->iu.scsi.target; - if (ha->hdr[i].present) { - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_CLUST_RESET; - gdtcmd.u.cache.DeviceNo = i; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - piord->status = (ushort)scp->sr_command->SCp.Status; -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - piord->status = (scp->SCp.Message<<16)|scp->SCp.Status; -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - piord->status = (scp.SCp.Message<<16)|scp.SCp.Status; -#endif - } - break; - - default: - return(-EINVAL); - } - return length; -} -#endif - -static int gdth_get_info(char *buffer,char **start,off_t offset, - int length,int hanum,int busnum) +static int gdth_get_info(char *buffer,char **start,off_t offset,int length, + struct Scsi_Host *host,int hanum,int busnum) { int size = 0,len = 0; off_t begin = 0,pos = 0; gdth_ha_str *ha; int id, i, j, k, sec, flag; int no_mdrv = 0, drv_no, is_mirr; - ulong32 cnt, paddr; + ulong32 cnt; + ulong64 paddr; gdth_cmd_str gdtcmd; gdth_evt_str estr; -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) Scsi_Request *scp; Scsi_Device *sdev; -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) Scsi_Cmnd *scp; Scsi_Device *sdev; #else @@ -795,15 +274,15 @@ TRACE2(("gdth_get_info() ha %d bus %d\n",hanum,busnum)); ha = HADATA(gdth_ctr_tab[hanum]); -#if LINUX_VERSION_CODE >= 0x020503 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + sdev = scsi_get_host_dev(host); scp = scsi_allocate_request(sdev, GFP_KERNEL); if (!scp) return -ENOMEM; scp->sr_cmd_len = 12; scp->sr_use_sg = 0; -#elif LINUX_VERSION_CODE >= 0x020322 - sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + sdev = scsi_get_host_dev(host); scp = scsi_allocate_device(sdev, 1, FALSE); if (!scp) return -ENOMEM; @@ -812,485 +291,415 @@ #else memset(&sdev,0,sizeof(Scsi_Device)); memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = scp.host = gdth_ctr_tab[hanum]; + sdev.host = scp.host = host; sdev.id = scp.target = sdev.host->this_id; scp.device = &sdev; #endif - -#ifdef GDTH_IOCTL_PROC - /* ioctl from tool? */ - if (!gdth_ioctl_check_bin(hanum, (ushort)length)) { -#endif - /* request is i.e. "cat /proc/scsi/gdth/0" */ - /* format: %-15s\t%-10s\t%-15s\t%s */ - /* driver parameters */ - size = sprintf(buffer+len,"Driver Parameters:\n"); - len += size; pos = begin + len; - if (reserve_list[0] == 0xff) - strcpy(hrec, "--"); - else { - sprintf(hrec, "%d", reserve_list[0]); - for (i = 1; i < MAX_RES_ARGS; i++) { - if (reserve_list[i] == 0xff) - break; - sprintf(hrec,"%s,%d", hrec, reserve_list[i]); - } + + + /* request is i.e. "cat /proc/scsi/gdth/0" */ + /* format: %-15s\t%-10s\t%-15s\t%s */ + /* driver parameters */ + size = sprintf(buffer+len,"Driver Parameters:\n"); + len += size; pos = begin + len; + if (reserve_list[0] == 0xff) + strcpy(hrec, "--"); + else { + sprintf(hrec, "%d", reserve_list[0]); + for (i = 1; i < MAX_RES_ARGS; i++) { + if (reserve_list[i] == 0xff) + break; + sprintf(hrec,"%s,%d", hrec, reserve_list[i]); } - size = sprintf(buffer+len, - " reserve_mode: \t%d \treserve_list: \t%s\n", - reserve_mode, hrec); - len += size; pos = begin + len; - size = sprintf(buffer+len, - " max_ids: \t%-3d \thdr_channel: \t%d\n", - max_ids, hdr_channel); - len += size; pos = begin + len; + } + size = sprintf(buffer+len, + " reserve_mode: \t%d \treserve_list: \t%s\n", + reserve_mode, hrec); + len += size; pos = begin + len; + size = sprintf(buffer+len, + " max_ids: \t%-3d \thdr_channel: \t%d\n", + max_ids, hdr_channel); + len += size; pos = begin + len; + + /* controller information */ + size = sprintf(buffer+len,"\nDisk Array Controller Information:\n"); + len += size; pos = begin + len; + if (virt_ctr) + sprintf(hrec, "%s (Bus %d)", ha->binfo.type_string, busnum); + else + strcpy(hrec, ha->binfo.type_string); + size = sprintf(buffer+len, + " Number: \t%d \tName: \t%s\n", + hanum, hrec); + len += size; pos = begin + len; + + if (ha->more_proc) + sprintf(hrec, "%d.%02d.%02d-%c%03X", + (unchar)(ha->binfo.upd_fw_ver>>24), + (unchar)(ha->binfo.upd_fw_ver>>16), + (unchar)(ha->binfo.upd_fw_ver), + ha->bfeat.raid ? 'R':'N', + ha->binfo.upd_revision); + else + sprintf(hrec, "%d.%02d", (unchar)(ha->cpar.version>>8), + (unchar)(ha->cpar.version)); - /* controller information */ - size = sprintf(buffer+len,"\nDisk Array Controller Information:\n"); - len += size; pos = begin + len; - if (virt_ctr) - sprintf(hrec, "%s (Bus %d)", ha->binfo.type_string, busnum); - else - strcpy(hrec, ha->binfo.type_string); + size = sprintf(buffer+len, + " Driver Ver.: \t%-10s\tFirmware Ver.: \t%s\n", + GDTH_VERSION_STR, hrec); + len += size; pos = begin + len; + + if (ha->more_proc) { + /* more information: 1. about controller */ size = sprintf(buffer+len, - " Number: \t%d \tName: \t%s\n", - hanum, hrec); + " Serial No.: \t0x%8X\tCache RAM size:\t%d KB\n", + ha->binfo.ser_no, ha->binfo.memsize / 1024); len += size; pos = begin + len; + } - if (ha->more_proc) - sprintf(hrec, "%d.%02d.%02d-%c%03X", - (unchar)(ha->binfo.upd_fw_ver>>24), - (unchar)(ha->binfo.upd_fw_ver>>16), - (unchar)(ha->binfo.upd_fw_ver), - ha->bfeat.raid ? 'R':'N', - ha->binfo.upd_revision); - else - sprintf(hrec, "%d.%02d", (unchar)(ha->cpar.version>>8), - (unchar)(ha->cpar.version)); +#ifdef GDTH_DMA_STATISTICS + /* controller statistics */ + size = sprintf(buffer+len,"\nController Statistics:\n"); + len += size; pos = begin + len; + size = sprintf(buffer+len, + " 32-bit DMA buffer:\t%lu\t64-bit DMA buffer:\t%lu\n", + ha->dma32_cnt, ha->dma64_cnt); + len += size; pos = begin + len; +#endif - size = sprintf(buffer+len, - " Driver Ver.: \t%-10s\tFirmware Ver.: \t%s\n", - GDTH_VERSION_STR, hrec); + if (pos < offset) { + len = 0; + begin = pos; + } + if (pos > offset + length) + goto stop_output; + + if (ha->more_proc) { + /* more information: 2. about physical devices */ + size = sprintf(buffer+len,"\nPhysical Devices:"); len += size; pos = begin + len; - - if (pos < offset) { - len = 0; - begin = pos; - } - if (pos > offset + length) + flag = FALSE; + + buf = gdth_ioctl_alloc(hanum, GDTH_SCRATCH, FALSE, &paddr); + if (!buf) goto stop_output; + for (i = 0; i < ha->bus_cnt; ++i) { + /* 2.a statistics (and retries/reassigns) */ + TRACE2(("pdr_statistics() chn %d\n",i)); + pds = (gdth_dskstat_str *)(buf + GDTH_SCRATCH/4); + gdtcmd.Service = CACHESERVICE; + gdtcmd.OpCode = GDT_IOCTL; + gdtcmd.u.ioctl.p_param = paddr + GDTH_SCRATCH/4; + gdtcmd.u.ioctl.param_size = 3*GDTH_SCRATCH/4; + gdtcmd.u.ioctl.subfunc = DSK_STATISTICS | L_CTRL_PATTERN; + gdtcmd.u.ioctl.channel = ha->raw[i].address | INVALID_CHANNEL; + pds->bid = ha->raw[i].local_no; + pds->first = 0; + pds->entries = ha->raw[i].pdev_cnt; + cnt = (3*GDTH_SCRATCH/4 - 5 * sizeof(ulong32)) / + sizeof(pds->list[0]); + if (pds->entries > cnt) + pds->entries = cnt; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(scp, &gdtcmd, cmnd, 30); + if (scp->sr_command->SCp.Status != S_OK) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &gdtcmd, cmnd, 30); + if (scp->SCp.Status != S_OK) +#else + gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); + if (scp.SCp.Status != S_OK) +#endif + { + pds->count = 0; + } - if (ha->more_proc) { - /* more information: 1. about controller */ - size = sprintf(buffer+len, - " Serial No.: \t0x%8X\tCache RAM size:\t%d KB\n", - ha->binfo.ser_no, ha->binfo.memsize / 1024); - len += size; pos = begin + len; - - /* 2. about physical devices */ - size = sprintf(buffer+len,"\nPhysical Devices:"); - len += size; pos = begin + len; - flag = FALSE; - - buf = gdth_ioctl_alloc(hanum, GDTH_SCRATCH, FALSE, &paddr); - if (!buf) - goto stop_output; - for (i = 0; i < ha->bus_cnt; ++i) { - /* 2.a statistics (and retries/reassigns) */ - TRACE2(("pdr_statistics() chn %d\n",i)); - pds = (gdth_dskstat_str *)(buf + GDTH_SCRATCH/4); + /* other IOCTLs must fit into area GDTH_SCRATCH/4 */ + for (j = 0; j < ha->raw[i].pdev_cnt; ++j) { + /* 2.b drive info */ + TRACE2(("scsi_drv_info() chn %d dev %d\n", + i, ha->raw[i].id_list[j])); + pdi = (gdth_diskinfo_str *)buf; gdtcmd.Service = CACHESERVICE; gdtcmd.OpCode = GDT_IOCTL; - gdtcmd.u.ioctl.p_param = paddr + GDTH_SCRATCH/4; - gdtcmd.u.ioctl.param_size = 3*GDTH_SCRATCH/4; - gdtcmd.u.ioctl.subfunc = DSK_STATISTICS | L_CTRL_PATTERN; - gdtcmd.u.ioctl.channel = ha->raw[i].address | INVALID_CHANNEL; - pds->bid = ha->raw[i].local_no; - pds->first = 0; - pds->entries = ha->raw[i].pdev_cnt; - cnt = (3*GDTH_SCRATCH/4 - 5 * sizeof(ulong32)) / - sizeof(pds->list[0]); - if (pds->entries > cnt) - pds->entries = cnt; -#if LINUX_VERSION_CODE >= 0x020503 + gdtcmd.u.ioctl.p_param = paddr; + gdtcmd.u.ioctl.param_size = sizeof(gdth_diskinfo_str); + gdtcmd.u.ioctl.subfunc = SCSI_DR_INFO | L_CTRL_PATTERN; + gdtcmd.u.ioctl.channel = + ha->raw[i].address | ha->raw[i].id_list[j]; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) gdth_do_req(scp, &gdtcmd, cmnd, 30); - if (scp->sr_command->SCp.Status != S_OK) -#elif LINUX_VERSION_CODE >= 0x020322 + if (scp->sr_command->SCp.Status == S_OK) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - if (scp->SCp.Status != S_OK) + if (scp->SCp.Status == S_OK) #else gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - if (scp.SCp.Status != S_OK) + if (scp.SCp.Status == S_OK) #endif - { - pds->count = 0; + { + strncpy(hrec,pdi->vendor,8); + strncpy(hrec+8,pdi->product,16); + strncpy(hrec+24,pdi->revision,4); + hrec[28] = 0; + size = sprintf(buffer+len, + "\n Chn/ID/LUN: \t%c/%02d/%d \tName: \t%s\n", + 'A'+i,pdi->target_id,pdi->lun,hrec); + len += size; pos = begin + len; + flag = TRUE; + pdi->no_ldrive &= 0xffff; + if (pdi->no_ldrive == 0xffff) + strcpy(hrec,"--"); + else + sprintf(hrec,"%d",pdi->no_ldrive); + size = sprintf(buffer+len, + " Capacity [MB]:\t%-6d \tTo Log. Drive: \t%s\n", + pdi->blkcnt/(1024*1024/pdi->blksize), + hrec); + len += size; pos = begin + len; + } else { + pdi->devtype = 0xff; } - - /* other IOCTLs must fit into area GDTH_SCRATCH/4 */ - for (j = 0; j < ha->raw[i].pdev_cnt; ++j) { - /* 2.b drive info */ - TRACE2(("scsi_drv_info() chn %d dev %d\n", - i, ha->raw[i].id_list[j])); - pdi = (gdth_diskinfo_str *)buf; - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_IOCTL; - gdtcmd.u.ioctl.p_param = paddr; - gdtcmd.u.ioctl.param_size = sizeof(gdth_diskinfo_str); - gdtcmd.u.ioctl.subfunc = SCSI_DR_INFO | L_CTRL_PATTERN; - gdtcmd.u.ioctl.channel = - ha->raw[i].address | ha->raw[i].id_list[j]; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - if (scp->sr_command->SCp.Status == S_OK) -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - if (scp->SCp.Status == S_OK) -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - if (scp.SCp.Status == S_OK) -#endif - { - strncpy(hrec,pdi->vendor,8); - strncpy(hrec+8,pdi->product,16); - strncpy(hrec+24,pdi->revision,4); - hrec[28] = 0; - size = sprintf(buffer+len, - "\n Chn/ID/LUN: \t%c/%02d/%d \tName: \t%s\n", - 'A'+i,pdi->target_id,pdi->lun,hrec); - len += size; pos = begin + len; - flag = TRUE; - pdi->no_ldrive &= 0xffff; - if (pdi->no_ldrive == 0xffff) - strcpy(hrec,"--"); - else - sprintf(hrec,"%d",pdi->no_ldrive); - size = sprintf(buffer+len, - " Capacity [MB]:\t%-6d \tTo Log. Drive: \t%s\n", - pdi->blkcnt/(1024*1024/pdi->blksize), - hrec); - len += size; pos = begin + len; - } else { - pdi->devtype = 0xff; - } - if (pdi->devtype == 0) { - /* search retries/reassigns */ - for (k = 0; k < pds->count; ++k) { - if (pds->list[k].tid == pdi->target_id && - pds->list[k].lun == pdi->lun) { - size = sprintf(buffer+len, - " Retries: \t%-6d \tReassigns: \t%d\n", - pds->list[k].retries, - pds->list[k].reassigns); - len += size; pos = begin + len; - break; - } - } - /* 2.c grown defects */ - TRACE2(("scsi_drv_defcnt() chn %d dev %d\n", - i, ha->raw[i].id_list[j])); - pdef = (gdth_defcnt_str *)buf; - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_IOCTL; - gdtcmd.u.ioctl.p_param = paddr; - gdtcmd.u.ioctl.param_size = sizeof(gdth_defcnt_str); - gdtcmd.u.ioctl.subfunc = SCSI_DEF_CNT | L_CTRL_PATTERN; - gdtcmd.u.ioctl.channel = - ha->raw[i].address | ha->raw[i].id_list[j]; - pdef->sddc_type = 0x08; -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - if (scp->sr_command->SCp.Status == S_OK) -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - if (scp->SCp.Status == S_OK) -#else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - if (scp.SCp.Status == S_OK) -#endif - { + if (pdi->devtype == 0) { + /* search retries/reassigns */ + for (k = 0; k < pds->count; ++k) { + if (pds->list[k].tid == pdi->target_id && + pds->list[k].lun == pdi->lun) { size = sprintf(buffer+len, - " Grown Defects:\t%d\n", - pdef->sddc_cnt); + " Retries: \t%-6d \tReassigns: \t%d\n", + pds->list[k].retries, + pds->list[k].reassigns); len += size; pos = begin + len; + break; } } - if (pos < offset) { - len = 0; - begin = pos; - } - if (pos > offset + length) - goto stop_output; - } - } - gdth_ioctl_free(hanum, GDTH_SCRATCH, buf, paddr); - - if (!flag) { - size = sprintf(buffer+len, "\n --\n"); - len += size; pos = begin + len; - } - - /* 3. about logical drives */ - size = sprintf(buffer+len,"\nLogical Drives:"); - len += size; pos = begin + len; - flag = FALSE; - - buf = gdth_ioctl_alloc(hanum, GDTH_SCRATCH, FALSE, &paddr); - if (!buf) - goto stop_output; - for (i = 0; i < MAX_LDRIVES; ++i) { - if (!ha->hdr[i].is_logdrv) - continue; - drv_no = i; - j = k = 0; - is_mirr = FALSE; - do { - /* 3.a log. drive info */ - TRACE2(("cache_drv_info() drive no %d\n",drv_no)); - pcdi = (gdth_cdrinfo_str *)buf; + /* 2.c grown defects */ + TRACE2(("scsi_drv_defcnt() chn %d dev %d\n", + i, ha->raw[i].id_list[j])); + pdef = (gdth_defcnt_str *)buf; gdtcmd.Service = CACHESERVICE; gdtcmd.OpCode = GDT_IOCTL; gdtcmd.u.ioctl.p_param = paddr; - gdtcmd.u.ioctl.param_size = sizeof(gdth_cdrinfo_str); - gdtcmd.u.ioctl.subfunc = CACHE_DRV_INFO; - gdtcmd.u.ioctl.channel = drv_no; -#if LINUX_VERSION_CODE >= 0x020503 + gdtcmd.u.ioctl.param_size = sizeof(gdth_defcnt_str); + gdtcmd.u.ioctl.subfunc = SCSI_DEF_CNT | L_CTRL_PATTERN; + gdtcmd.u.ioctl.channel = + ha->raw[i].address | ha->raw[i].id_list[j]; + pdef->sddc_type = 0x08; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) gdth_do_req(scp, &gdtcmd, cmnd, 30); - if (scp->sr_command->SCp.Status != S_OK) -#elif LINUX_VERSION_CODE >= 0x020322 + if (scp->sr_command->SCp.Status == S_OK) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - if (scp->SCp.Status != S_OK) + if (scp->SCp.Status == S_OK) #else gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - if (scp.SCp.Status != S_OK) + if (scp.SCp.Status == S_OK) #endif { - break; - } - pcdi->ld_dtype >>= 16; - j++; - if (pcdi->ld_dtype > 2) { - strcpy(hrec, "missing"); - } else if (pcdi->ld_error & 1) { - strcpy(hrec, "fault"); - } else if (pcdi->ld_error & 2) { - strcpy(hrec, "invalid"); - k++; j--; - } else { - strcpy(hrec, "ok"); - } - - if (drv_no == i) { - size = sprintf(buffer+len, - "\n Number: \t%-2d \tStatus: \t%s\n", - drv_no, hrec); - len += size; pos = begin + len; - flag = TRUE; - no_mdrv = pcdi->cd_ldcnt; - if (no_mdrv > 1 || pcdi->ld_slave != -1) { - is_mirr = TRUE; - strcpy(hrec, "RAID-1"); - } else if (pcdi->ld_dtype == 0) { - strcpy(hrec, "Disk"); - } else if (pcdi->ld_dtype == 1) { - strcpy(hrec, "RAID-0"); - } else if (pcdi->ld_dtype == 2) { - strcpy(hrec, "Chain"); - } else { - strcpy(hrec, "???"); - } - size = sprintf(buffer+len, - " Capacity [MB]:\t%-6d \tType: \t%s\n", - pcdi->ld_blkcnt/(1024*1024/pcdi->ld_blksize), - hrec); - len += size; pos = begin + len; - } else { size = sprintf(buffer+len, - " Slave Number: \t%-2d \tStatus: \t%s\n", - drv_no & 0x7fff, hrec); + " Grown Defects:\t%d\n", + pdef->sddc_cnt); len += size; pos = begin + len; } - drv_no = pcdi->ld_slave; - if (pos < offset) { - len = 0; - begin = pos; - } - if (pos > offset + length) - goto stop_output; - } while (drv_no != -1); - - if (is_mirr) { - size = sprintf(buffer+len, - " Missing Drv.: \t%-2d \tInvalid Drv.: \t%d\n", - no_mdrv - j - k, k); - len += size; pos = begin + len; } - - if (!ha->hdr[i].is_arraydrv) - strcpy(hrec, "--"); - else - sprintf(hrec, "%d", ha->hdr[i].master_no); - size = sprintf(buffer+len, - " To Array Drv.:\t%s\n", hrec); - len += size; pos = begin + len; if (pos < offset) { len = 0; begin = pos; } if (pos > offset + length) goto stop_output; - } - gdth_ioctl_free(hanum, GDTH_SCRATCH, buf, paddr); - - if (!flag) { - size = sprintf(buffer+len, "\n --\n"); - len += size; pos = begin + len; - } + } + } + gdth_ioctl_free(hanum, GDTH_SCRATCH, buf, paddr); - /* 4. about array drives */ - size = sprintf(buffer+len,"\nArray Drives:"); + if (!flag) { + size = sprintf(buffer+len, "\n --\n"); len += size; pos = begin + len; - flag = FALSE; + } - buf = gdth_ioctl_alloc(hanum, GDTH_SCRATCH, FALSE, &paddr); - if (!buf) - goto stop_output; - for (i = 0; i < MAX_LDRIVES; ++i) { - if (!(ha->hdr[i].is_arraydrv && ha->hdr[i].is_master)) - continue; - /* 4.a array drive info */ - TRACE2(("array_info() drive no %d\n",i)); - pai = (gdth_arrayinf_str *)buf; + /* 3. about logical drives */ + size = sprintf(buffer+len,"\nLogical Drives:"); + len += size; pos = begin + len; + flag = FALSE; + + buf = gdth_ioctl_alloc(hanum, GDTH_SCRATCH, FALSE, &paddr); + if (!buf) + goto stop_output; + for (i = 0; i < MAX_LDRIVES; ++i) { + if (!ha->hdr[i].is_logdrv) + continue; + drv_no = i; + j = k = 0; + is_mirr = FALSE; + do { + /* 3.a log. drive info */ + TRACE2(("cache_drv_info() drive no %d\n",drv_no)); + pcdi = (gdth_cdrinfo_str *)buf; gdtcmd.Service = CACHESERVICE; gdtcmd.OpCode = GDT_IOCTL; gdtcmd.u.ioctl.p_param = paddr; - gdtcmd.u.ioctl.param_size = sizeof(gdth_arrayinf_str); - gdtcmd.u.ioctl.subfunc = ARRAY_INFO | LA_CTRL_PATTERN; - gdtcmd.u.ioctl.channel = i; -#if LINUX_VERSION_CODE >= 0x020503 + gdtcmd.u.ioctl.param_size = sizeof(gdth_cdrinfo_str); + gdtcmd.u.ioctl.subfunc = CACHE_DRV_INFO; + gdtcmd.u.ioctl.channel = drv_no; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) gdth_do_req(scp, &gdtcmd, cmnd, 30); - if (scp->sr_command->SCp.Status == S_OK) -#elif LINUX_VERSION_CODE >= 0x020322 + if (scp->sr_command->SCp.Status != S_OK) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - if (scp->SCp.Status == S_OK) + if (scp->SCp.Status != S_OK) #else gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - if (scp.SCp.Status == S_OK) + if (scp.SCp.Status != S_OK) #endif { - if (pai->ai_state == 0) - strcpy(hrec, "idle"); - else if (pai->ai_state == 2) - strcpy(hrec, "build"); - else if (pai->ai_state == 4) - strcpy(hrec, "ready"); - else if (pai->ai_state == 6) - strcpy(hrec, "fail"); - else if (pai->ai_state == 8 || pai->ai_state == 10) - strcpy(hrec, "rebuild"); - else - strcpy(hrec, "error"); - if (pai->ai_ext_state & 0x10) - strcat(hrec, "/expand"); - else if (pai->ai_ext_state & 0x1) - strcat(hrec, "/patch"); + break; + } + pcdi->ld_dtype >>= 16; + j++; + if (pcdi->ld_dtype > 2) { + strcpy(hrec, "missing"); + } else if (pcdi->ld_error & 1) { + strcpy(hrec, "fault"); + } else if (pcdi->ld_error & 2) { + strcpy(hrec, "invalid"); + k++; j--; + } else { + strcpy(hrec, "ok"); + } + + if (drv_no == i) { size = sprintf(buffer+len, "\n Number: \t%-2d \tStatus: \t%s\n", - i,hrec); + drv_no, hrec); len += size; pos = begin + len; flag = TRUE; - - if (pai->ai_type == 0) + no_mdrv = pcdi->cd_ldcnt; + if (no_mdrv > 1 || pcdi->ld_slave != -1) { + is_mirr = TRUE; + strcpy(hrec, "RAID-1"); + } else if (pcdi->ld_dtype == 0) { + strcpy(hrec, "Disk"); + } else if (pcdi->ld_dtype == 1) { strcpy(hrec, "RAID-0"); - else if (pai->ai_type == 4) - strcpy(hrec, "RAID-4"); - else if (pai->ai_type == 5) - strcpy(hrec, "RAID-5"); - else - strcpy(hrec, "RAID-10"); + } else if (pcdi->ld_dtype == 2) { + strcpy(hrec, "Chain"); + } else { + strcpy(hrec, "???"); + } size = sprintf(buffer+len, " Capacity [MB]:\t%-6d \tType: \t%s\n", - pai->ai_size/(1024*1024/pai->ai_secsize), + pcdi->ld_blkcnt/(1024*1024/pcdi->ld_blksize), hrec); len += size; pos = begin + len; - if (pos < offset) { - len = 0; - begin = pos; - } - if (pos > offset + length) - goto stop_output; + } else { + size = sprintf(buffer+len, + " Slave Number: \t%-2d \tStatus: \t%s\n", + drv_no & 0x7fff, hrec); + len += size; pos = begin + len; } - } - gdth_ioctl_free(hanum, GDTH_SCRATCH, buf, paddr); - - if (!flag) { - size = sprintf(buffer+len, "\n --\n"); + drv_no = pcdi->ld_slave; + if (pos < offset) { + len = 0; + begin = pos; + } + if (pos > offset + length) + goto stop_output; + } while (drv_no != -1); + + if (is_mirr) { + size = sprintf(buffer+len, + " Missing Drv.: \t%-2d \tInvalid Drv.: \t%d\n", + no_mdrv - j - k, k); len += size; pos = begin + len; } - - /* 5. about host drives */ - size = sprintf(buffer+len,"\nHost Drives:"); + + if (!ha->hdr[i].is_arraydrv) + strcpy(hrec, "--"); + else + sprintf(hrec, "%d", ha->hdr[i].master_no); + size = sprintf(buffer+len, + " To Array Drv.:\t%s\n", hrec); len += size; pos = begin + len; - flag = FALSE; - - buf = gdth_ioctl_alloc(hanum, sizeof(gdth_hget_str), FALSE, &paddr); - if (!buf) + if (pos < offset) { + len = 0; + begin = pos; + } + if (pos > offset + length) goto stop_output; - for (i = 0; i < MAX_LDRIVES; ++i) { - if (!ha->hdr[i].is_logdrv || - (ha->hdr[i].is_arraydrv && !ha->hdr[i].is_master)) - continue; - /* 5.a get host drive list */ - TRACE2(("host_get() drv_no %d\n",i)); - phg = (gdth_hget_str *)buf; - gdtcmd.Service = CACHESERVICE; - gdtcmd.OpCode = GDT_IOCTL; - gdtcmd.u.ioctl.p_param = paddr; - gdtcmd.u.ioctl.param_size = sizeof(gdth_hget_str); - gdtcmd.u.ioctl.subfunc = HOST_GET | LA_CTRL_PATTERN; - gdtcmd.u.ioctl.channel = i; - phg->entries = MAX_HDRIVES; - phg->offset = GDTOFFSOF(gdth_hget_str, entry[0]); -#if LINUX_VERSION_CODE >= 0x020503 - gdth_do_req(scp, &gdtcmd, cmnd, 30); - if (scp->sr_command->SCp.Status != S_OK) -#elif LINUX_VERSION_CODE >= 0x020322 - gdth_do_cmd(scp, &gdtcmd, cmnd, 30); - if (scp->SCp.Status != S_OK) + } + gdth_ioctl_free(hanum, GDTH_SCRATCH, buf, paddr); + + if (!flag) { + size = sprintf(buffer+len, "\n --\n"); + len += size; pos = begin + len; + } + + /* 4. about array drives */ + size = sprintf(buffer+len,"\nArray Drives:"); + len += size; pos = begin + len; + flag = FALSE; + + buf = gdth_ioctl_alloc(hanum, GDTH_SCRATCH, FALSE, &paddr); + if (!buf) + goto stop_output; + for (i = 0; i < MAX_LDRIVES; ++i) { + if (!(ha->hdr[i].is_arraydrv && ha->hdr[i].is_master)) + continue; + /* 4.a array drive info */ + TRACE2(("array_info() drive no %d\n",i)); + pai = (gdth_arrayinf_str *)buf; + gdtcmd.Service = CACHESERVICE; + gdtcmd.OpCode = GDT_IOCTL; + gdtcmd.u.ioctl.p_param = paddr; + gdtcmd.u.ioctl.param_size = sizeof(gdth_arrayinf_str); + gdtcmd.u.ioctl.subfunc = ARRAY_INFO | LA_CTRL_PATTERN; + gdtcmd.u.ioctl.channel = i; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(scp, &gdtcmd, cmnd, 30); + if (scp->sr_command->SCp.Status == S_OK) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &gdtcmd, cmnd, 30); + if (scp->SCp.Status == S_OK) #else - gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); - if (scp.SCp.Status != S_OK) + gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); + if (scp.SCp.Status == S_OK) #endif - { - ha->hdr[i].ldr_no = i; - ha->hdr[i].rw_attribs = 0; - ha->hdr[i].start_sec = 0; - } else { - for (j = 0; j < phg->entries; ++j) { - k = phg->entry[j].host_drive; - if (k >= MAX_LDRIVES) - continue; - ha->hdr[k].ldr_no = phg->entry[j].log_drive; - ha->hdr[k].rw_attribs = phg->entry[j].rw_attribs; - ha->hdr[k].start_sec = phg->entry[j].start_sec; - } - } - } - gdth_ioctl_free(hanum, sizeof(gdth_hget_str), buf, paddr); - - for (i = 0; i < MAX_HDRIVES; ++i) { - if (!(ha->hdr[i].present)) - continue; - + { + if (pai->ai_state == 0) + strcpy(hrec, "idle"); + else if (pai->ai_state == 2) + strcpy(hrec, "build"); + else if (pai->ai_state == 4) + strcpy(hrec, "ready"); + else if (pai->ai_state == 6) + strcpy(hrec, "fail"); + else if (pai->ai_state == 8 || pai->ai_state == 10) + strcpy(hrec, "rebuild"); + else + strcpy(hrec, "error"); + if (pai->ai_ext_state & 0x10) + strcat(hrec, "/expand"); + else if (pai->ai_ext_state & 0x1) + strcat(hrec, "/patch"); size = sprintf(buffer+len, - "\n Number: \t%-2d \tArr/Log. Drive:\t%d\n", - i, ha->hdr[i].ldr_no); + "\n Number: \t%-2d \tStatus: \t%s\n", + i,hrec); len += size; pos = begin + len; flag = TRUE; + if (pai->ai_type == 0) + strcpy(hrec, "RAID-0"); + else if (pai->ai_type == 4) + strcpy(hrec, "RAID-4"); + else if (pai->ai_type == 5) + strcpy(hrec, "RAID-5"); + else + strcpy(hrec, "RAID-10"); size = sprintf(buffer+len, - " Capacity [MB]:\t%-6d \tStart Sector: \t%d\n", - ha->hdr[i].size/2048, ha->hdr[i].start_sec); + " Capacity [MB]:\t%-6d \tType: \t%s\n", + pai->ai_size/(1024*1024/pai->ai_secsize), + hrec); len += size; pos = begin + len; if (pos < offset) { len = 0; @@ -1299,60 +708,125 @@ if (pos > offset + length) goto stop_output; } + } + gdth_ioctl_free(hanum, GDTH_SCRATCH, buf, paddr); - if (!flag) { - size = sprintf(buffer+len, "\n --\n"); - len += size; pos = begin + len; - } + if (!flag) { + size = sprintf(buffer+len, "\n --\n"); + len += size; pos = begin + len; } - /* controller events */ - size = sprintf(buffer+len,"\nController Events:\n"); + /* 5. about host drives */ + size = sprintf(buffer+len,"\nHost Drives:"); len += size; pos = begin + len; + flag = FALSE; - for (id = -1;;) { - id = gdth_read_event(ha, id, &estr); - if (estr.event_source == 0) - break; - if (estr.event_data.eu.driver.ionode == hanum && - estr.event_source == ES_ASYNC) { - gdth_log_event(&estr.event_data, hrec); - do_gettimeofday(&tv); - sec = (int)(tv.tv_sec - estr.first_stamp); - if (sec < 0) sec = 0; - size = sprintf(buffer+len," date- %02d:%02d:%02d\t%s\n", - sec/3600, sec%3600/60, sec%60, hrec); - len += size; pos = begin + len; - if (pos < offset) { - len = 0; - begin = pos; + buf = gdth_ioctl_alloc(hanum, sizeof(gdth_hget_str), FALSE, &paddr); + if (!buf) + goto stop_output; + for (i = 0; i < MAX_LDRIVES; ++i) { + if (!ha->hdr[i].is_logdrv || + (ha->hdr[i].is_arraydrv && !ha->hdr[i].is_master)) + continue; + /* 5.a get host drive list */ + TRACE2(("host_get() drv_no %d\n",i)); + phg = (gdth_hget_str *)buf; + gdtcmd.Service = CACHESERVICE; + gdtcmd.OpCode = GDT_IOCTL; + gdtcmd.u.ioctl.p_param = paddr; + gdtcmd.u.ioctl.param_size = sizeof(gdth_hget_str); + gdtcmd.u.ioctl.subfunc = HOST_GET | LA_CTRL_PATTERN; + gdtcmd.u.ioctl.channel = i; + phg->entries = MAX_HDRIVES; + phg->offset = GDTOFFSOF(gdth_hget_str, entry[0]); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + gdth_do_req(scp, &gdtcmd, cmnd, 30); + if (scp->sr_command->SCp.Status != S_OK) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + gdth_do_cmd(scp, &gdtcmd, cmnd, 30); + if (scp->SCp.Status != S_OK) +#else + gdth_do_cmd(&scp, &gdtcmd, cmnd, 30); + if (scp.SCp.Status != S_OK) +#endif + { + ha->hdr[i].ldr_no = i; + ha->hdr[i].rw_attribs = 0; + ha->hdr[i].start_sec = 0; + } else { + for (j = 0; j < phg->entries; ++j) { + k = phg->entry[j].host_drive; + if (k >= MAX_LDRIVES) + continue; + ha->hdr[k].ldr_no = phg->entry[j].log_drive; + ha->hdr[k].rw_attribs = phg->entry[j].rw_attribs; + ha->hdr[k].start_sec = phg->entry[j].start_sec; } - if (pos > offset + length) - goto stop_output; } - if (id == -1) - break; } -#ifdef GDTH_IOCTL_PROC - } else { - gdth_iord_str *piord; + gdth_ioctl_free(hanum, sizeof(gdth_hget_str), buf, paddr); - /* request from tool (GDTMON,..) */ - piord = (gdth_iord_str *)ha->pscratch; - if (piord == NULL) - goto stop_output; - length = piord->size; - memcpy(buffer+len, (char *)piord, length); - gdth_ioctl_free(hanum, GDTH_SCRATCH, ha->pscratch, paddr); - len = length; + for (i = 0; i < MAX_HDRIVES; ++i) { + if (!(ha->hdr[i].present)) + continue; + + size = sprintf(buffer+len, + "\n Number: \t%-2d \tArr/Log. Drive:\t%d\n", + i, ha->hdr[i].ldr_no); + len += size; pos = begin + len; + flag = TRUE; + + size = sprintf(buffer+len, + " Capacity [MB]:\t%-6d \tStart Sector: \t%d\n", + (ulong32)(ha->hdr[i].size/2048), ha->hdr[i].start_sec); + len += size; pos = begin + len; + if (pos < offset) { + len = 0; + begin = pos; + } + if (pos > offset + length) + goto stop_output; + } + + if (!flag) { + size = sprintf(buffer+len, "\n --\n"); + len += size; pos = begin + len; + } + } + + /* controller events */ + size = sprintf(buffer+len,"\nController Events:\n"); + len += size; pos = begin + len; + + for (id = -1;;) { + id = gdth_read_event(ha, id, &estr); + if (estr.event_source == 0) + break; + if (estr.event_data.eu.driver.ionode == hanum && + estr.event_source == ES_ASYNC) { + gdth_log_event(&estr.event_data, hrec); + do_gettimeofday(&tv); + sec = (int)(tv.tv_sec - estr.first_stamp); + if (sec < 0) sec = 0; + size = sprintf(buffer+len," date- %02d:%02d:%02d\t%s\n", + sec/3600, sec%3600/60, sec%60, hrec); + len += size; pos = begin + len; + if (pos < offset) { + len = 0; + begin = pos; + } + if (pos > offset + length) + goto stop_output; + } + if (id == -1) + break; } -#endif stop_output: -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) scsi_release_request(scp); scsi_free_host_dev(sdev); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) scsi_release_command(scp); scsi_free_host_dev(sdev); #endif @@ -1365,7 +839,8 @@ return(len); } -#if LINUX_VERSION_CODE >= 0x020503 + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) static void gdth_do_req(Scsi_Request *scp, gdth_cmd_str *gdtcmd, char *cmnd, int timeout) { @@ -1389,9 +864,9 @@ char *cmnd, int timeout) { unsigned bufflen; -#if LINUX_VERSION_CODE >= 0x020407 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,7) DECLARE_COMPLETION(wait); -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) DECLARE_MUTEX_LOCKED(sem); #else struct semaphore sem = MUTEX_LOCKED; @@ -1405,19 +880,19 @@ scp->SCp.this_residual = DEFAULT_PRI; bufflen = 0; } -#if LINUX_VERSION_CODE >= 0x020407 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,7) scp->request.rq_status = RQ_SCSI_BUSY; scp->request.waiting = &wait; scsi_do_cmd(scp, cmnd, gdtcmd, bufflen, gdth_scsi_done, timeout*HZ, 1); wait_for_completion(&wait); #else scp->request.sem = &sem; -#if LINUX_VERSION_CODE >= 0x020322 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) scsi_do_cmd(scp, cmnd, gdtcmd, bufflen, gdth_scsi_done, timeout*HZ, 1); #else - GDTH_LOCK_SCSI_DOCMD(); + spin_lock_irq(&io_request_lock); scsi_do_cmd(scp, cmnd, gdtcmd, bufflen, gdth_scsi_done, timeout*HZ, 1); - GDTH_UNLOCK_SCSI_DOCMD(); + spin_unlock_irq(&io_request_lock); #endif down(&sem); #endif @@ -1428,11 +903,11 @@ { TRACE2(("gdth_scsi_done()\n")); -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) scp->request->rq_status = RQ_SCSI_DONE; if (scp->request->waiting != NULL) complete(scp->request->waiting); -#elif LINUX_VERSION_CODE >= 0x020407 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,7) scp->request.rq_status = RQ_SCSI_DONE; if (scp->request.waiting != NULL) complete(scp->request.waiting); @@ -1444,7 +919,7 @@ } static char *gdth_ioctl_alloc(int hanum, int size, int scratch, - ulong32 *paddr) + ulong64 *paddr) { gdth_ha_str *ha; ulong flags; @@ -1463,11 +938,11 @@ } else if (scratch) { ret_val = NULL; } else { -#if LINUX_VERSION_CODE >= 0x020400 - dma_addr_t dma_addr; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + dma_addr_t dma_addr; ret_val = pci_alloc_consistent(ha->pdev, size, &dma_addr); - *paddr = (ulong32)dma_addr; + *paddr = dma_addr; #else ret_val = scsi_init_malloc(size, GFP_ATOMIC | GFP_DMA); if (ret_val) @@ -1479,7 +954,7 @@ return ret_val; } -static void gdth_ioctl_free(int hanum, int size, char *buf, ulong32 paddr) +static void gdth_ioctl_free(int hanum, int size, char *buf, ulong64 paddr) { gdth_ha_str *ha; ulong flags; @@ -1490,7 +965,7 @@ if (buf == ha->pscratch) { ha->scratch_busy = FALSE; } else { -#if LINUX_VERSION_CODE >= 0x020400 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) pci_free_consistent(ha->pdev, size, buf, paddr); #else scsi_init_free((void *)buf, size); @@ -1533,7 +1008,7 @@ for (i = 0; i < GDTH_MAXCMDS; ++i) { scp = ha->cmd_tab[i].cmnd; -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; t = scp->device->id; #else @@ -1546,14 +1021,10 @@ GDTH_UNLOCK_HA(ha, flags); while (!scp->SCp.have_data_in) barrier(); -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) GDTH_LOCK_SCSI_DONE(scp->device->host, flags); scp->scsi_done(scp); GDTH_UNLOCK_SCSI_DONE(scp->device->host, flags); -#elif LINUX_VERSION_CODE >= 0x020503 - GDTH_LOCK_SCSI_DONE(scp->host, flags); - scp->scsi_done(scp); - GDTH_UNLOCK_SCSI_DONE(scp->host, flags); #else GDTH_LOCK_SCSI_DONE(flags); scp->scsi_done(scp); @@ -1576,7 +1047,7 @@ GDTH_LOCK_HA(ha, flags); for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) { -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; t = scp->device->id; #else @@ -1602,7 +1073,7 @@ GDTH_LOCK_HA(ha, flags); for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) { -#if LINUX_VERSION_CODE >= 0x02053C +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) b = virt_ctr ? NUMDATA(scp->device->host)->busnum : scp->device->channel; t = scp->device->id; #else @@ -1624,7 +1095,6 @@ oldto = scp->timeout_per_command; scp->timeout_per_command = timeout; -#if LINUX_VERSION_CODE >= 0x02014B if (timeout == 0) { del_timer(&scp->eh_timeout); scp->eh_timeout.data = (unsigned long) NULL; @@ -1636,17 +1106,6 @@ scp->eh_timeout.expires = jiffies + timeout; add_timer(&scp->eh_timeout); } -#else - if (timeout > 0) { - if (timer_table[SCSI_TIMER].expires == 0) { - timer_table[SCSI_TIMER].expires = jiffies + timeout; - timer_active |= 1 << SCSI_TIMER; - } else { - if (jiffies + timeout < timer_table[SCSI_TIMER].expires) - timer_table[SCSI_TIMER].expires = jiffies + timeout; - } - } -#endif return oldto; } diff -Nru a/drivers/scsi/gdth_proc.h b/drivers/scsi/gdth_proc.h --- a/drivers/scsi/gdth_proc.h 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/gdth_proc.h 2004-05-26 15:01:36 -07:00 @@ -2,42 +2,31 @@ #define _GDTH_PROC_H /* gdth_proc.h - * $Id: gdth_proc.h,v 1.14 2003/08/27 11:37:35 achim Exp $ + * $Id: gdth_proc.h,v 1.16 2004/01/14 13:09:01 achim Exp $ */ -static int gdth_set_info(char *buffer,int length,int hanum,int busnum); -static int gdth_get_info(char *buffer,char **start,off_t offset, - int length,int hanum,int busnum); +static int gdth_set_info(char *buffer,int length,struct Scsi_Host *host, + int hanum,int busnum); +static int gdth_get_info(char *buffer,char **start,off_t offset,int length, + struct Scsi_Host *host,int hanum,int busnum); -#if LINUX_VERSION_CODE >= 0x020503 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) static void gdth_do_req(Scsi_Request *srp, gdth_cmd_str *cmd, char *cmnd, int timeout); static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Request *scp); -#ifdef GDTH_IOCTL_PROC -static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Request *scp); -#endif -#elif LINUX_VERSION_CODE >= 0x020322 +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) static void gdth_do_cmd(Scsi_Cmnd *scp, gdth_cmd_str *cmd, char *cmnd, int timeout); static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd *scp); -#ifdef GDTH_IOCTL_PROC -static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Cmnd *scp); -#endif #else static void gdth_do_cmd(Scsi_Cmnd *scp, gdth_cmd_str *cmd, char *cmnd, int timeout); static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd scp); -#ifdef GDTH_IOCTL_PROC -static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Cmnd scp); -#endif #endif static char *gdth_ioctl_alloc(int hanum, int size, int scratch, - ulong32 *paddr); -static void gdth_ioctl_free(int hanum, int size, char *buf, ulong32 paddr); -#ifdef GDTH_IOCTL_PROC -static int gdth_ioctl_check_bin(int hanum, ushort size); -#endif + ulong64 *paddr); +static void gdth_ioctl_free(int hanum, int size, char *buf, ulong64 paddr); static void gdth_wait_completion(int hanum, int busnum, int id); static void gdth_stop_timeout(int hanum, int busnum, int id); static void gdth_start_timeout(int hanum, int busnum, int id); diff -Nru a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c --- a/drivers/scsi/ipr.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/ipr.c 2004-05-26 15:01:36 -07:00 @@ -406,7 +406,7 @@ trace_entry->type = type; trace_entry->cmd_index = ipr_cmd->cmd_index; trace_entry->res_handle = ipr_cmd->ioarcb.res_handle; - trace_entry->add_data = add_data; + trace_entry->u.add_data = add_data; } #else #define ipr_trc_hook(ipr_cmd, type, add_data) do { } while(0) @@ -447,7 +447,7 @@ static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd) { ipr_reinit_ipr_cmnd(ipr_cmd); - ipr_cmd->scratch = 0; + ipr_cmd->u.scratch = 0; init_timer(&ipr_cmd->timer); } @@ -676,8 +676,8 @@ **/ static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd) { - if (ipr_cmd->sibling) - ipr_cmd->sibling = NULL; + if (ipr_cmd->u.sibling) + ipr_cmd->u.sibling = NULL; else complete(&ipr_cmd->completion); } @@ -729,20 +729,20 @@ list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q); list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_pending_q); - ipr_cmd->hostrcb = hostrcb; + ipr_cmd->u.hostrcb = hostrcb; ioarcb = &ipr_cmd->ioarcb; ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); ioarcb->cmd_pkt.request_type = IPR_RQTYPE_HCAM; ioarcb->cmd_pkt.cdb[0] = IPR_HOST_CONTROLLED_ASYNC; ioarcb->cmd_pkt.cdb[1] = type; - ioarcb->cmd_pkt.cdb[7] = (IPR_HOSTRCB_SZ >> 8) & 0xff; - ioarcb->cmd_pkt.cdb[8] = IPR_HOSTRCB_SZ & 0xff; + ioarcb->cmd_pkt.cdb[7] = (sizeof(hostrcb->hcam) >> 8) & 0xff; + ioarcb->cmd_pkt.cdb[8] = sizeof(hostrcb->hcam) & 0xff; - ioarcb->read_data_transfer_length = cpu_to_be32(IPR_HOSTRCB_SZ); + ioarcb->read_data_transfer_length = cpu_to_be32(sizeof(hostrcb->hcam)); ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); ipr_cmd->ioadl[0].flags_and_data_len = - cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | IPR_HOSTRCB_SZ); + cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | sizeof(hostrcb->hcam)); ipr_cmd->ioadl[0].address = cpu_to_be32(hostrcb->hostrcb_dma); if (type == IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE) @@ -794,7 +794,7 @@ struct ipr_config_table_entry *cfgte; u32 is_ndn = 1; - cfgte = &hostrcb->ccn.cfgte; + cfgte = &hostrcb->hcam.u.ccn.cfgte; list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { if (!memcmp(&res->cfgte.res_addr, &cfgte->res_addr, @@ -822,7 +822,7 @@ memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry)); - if (hostrcb->notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) { + if (hostrcb->hcam.notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) { if (res->sdev) { res->sdev->hostdata = NULL; res->del_from_ml = 1; @@ -852,7 +852,7 @@ static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd) { struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; - struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb; + struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); list_del(&hostrcb->queue); @@ -902,7 +902,8 @@ static void ipr_log_cache_error(struct ipr_ioa_cfg *ioa_cfg, struct ipr_hostrcb *hostrcb) { - struct ipr_hostrcb_type_02_error *error = &hostrcb->error.type_02_error; + struct ipr_hostrcb_type_02_error *error = + &hostrcb->hcam.u.error.u.type_02_error; ipr_err("-----Current Configuration-----\n"); ipr_err("Cache Directory Card Information:\n"); @@ -937,14 +938,15 @@ { int errors_logged, i; struct ipr_hostrcb_device_data_entry *dev_entry; + struct ipr_hostrcb_type_03_error *error; - errors_logged = be32_to_cpu(hostrcb->error.type_03_error.errors_logged); + error = &hostrcb->hcam.u.error.u.type_03_error; + errors_logged = be32_to_cpu(error->errors_logged); ipr_err("Device Errors Detected/Logged: %d/%d\n", - be32_to_cpu(hostrcb->error.type_03_error.errors_detected), - errors_logged); + be32_to_cpu(error->errors_detected), errors_logged); - dev_entry = hostrcb->error.type_03_error.dev_entry; + dev_entry = error->dev_entry; for (i = 0; i < errors_logged; i++, dev_entry++) { ipr_err_separator; @@ -996,7 +998,7 @@ memset(zero_sn, '0', IPR_SERIAL_NUM_LEN); - error = &hostrcb->error.type_04_error; + error = &hostrcb->hcam.u.error.u.type_04_error; ipr_err_separator; @@ -1064,7 +1066,7 @@ struct ipr_hostrcb *hostrcb) { int i; - int ioa_data_len = be32_to_cpu(hostrcb->length); + int ioa_data_len = be32_to_cpu(hostrcb->hcam.length); if (ioa_data_len == 0) return; @@ -1074,10 +1076,10 @@ for (i = 0; i < ioa_data_len / 4; i += 4) { ipr_err("%08X: %08X %08X %08X %08X\n", i*4, - be32_to_cpu(hostrcb->raw.data[i]), - be32_to_cpu(hostrcb->raw.data[i+1]), - be32_to_cpu(hostrcb->raw.data[i+2]), - be32_to_cpu(hostrcb->raw.data[i+3])); + be32_to_cpu(hostrcb->hcam.u.raw.data[i]), + be32_to_cpu(hostrcb->hcam.u.raw.data[i+1]), + be32_to_cpu(hostrcb->hcam.u.raw.data[i+2]), + be32_to_cpu(hostrcb->hcam.u.raw.data[i+3])); } } @@ -1119,19 +1121,19 @@ u32 ioasc; int error_index; - if (hostrcb->notify_type != IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY) + if (hostrcb->hcam.notify_type != IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY) return; - if (hostrcb->notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST) + if (hostrcb->hcam.notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST) dev_err(&ioa_cfg->pdev->dev, "Error notifications lost\n"); - ioasc = be32_to_cpu(hostrcb->error.failing_dev_ioasc); + ioasc = be32_to_cpu(hostrcb->hcam.u.error.failing_dev_ioasc); if (ioasc == IPR_IOASC_BUS_WAS_RESET || ioasc == IPR_IOASC_BUS_WAS_RESET_BY_OTHER) { /* Tell the midlayer we had a bus reset so it will handle the UA properly */ scsi_report_bus_reset(ioa_cfg->host, - hostrcb->error.failing_dev_res_addr.bus); + hostrcb->hcam.u.error.failing_dev_res_addr.bus); } error_index = ipr_get_error(ioasc); @@ -1139,8 +1141,8 @@ if (!ipr_error_table[error_index].log_hcam) return; - if (ipr_is_device(&hostrcb->error.failing_dev_res_addr)) { - ipr_res_err(ioa_cfg, hostrcb->error.failing_dev_res_addr, + if (ipr_is_device(&hostrcb->hcam.u.error.failing_dev_res_addr)) { + ipr_res_err(ioa_cfg, hostrcb->hcam.u.error.failing_dev_res_addr, "%s\n", ipr_error_table[error_index].error); } else { dev_err(&ioa_cfg->pdev->dev, "%s\n", @@ -1153,7 +1155,7 @@ if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL) return; - switch (hostrcb->overlay_id) { + switch (hostrcb->hcam.overlay_id) { case IPR_HOST_RCB_OVERLAY_ID_1: ipr_log_generic_error(ioa_cfg, hostrcb); break; @@ -1173,7 +1175,7 @@ default: dev_err(&ioa_cfg->pdev->dev, "Unknown error received. Overlay ID: %d\n", - hostrcb->overlay_id); + hostrcb->hcam.overlay_id); break; } } @@ -1192,7 +1194,7 @@ static void ipr_process_error(struct ipr_cmnd *ipr_cmd) { struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; - struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb; + struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb; u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); list_del(&hostrcb->queue); @@ -2972,6 +2974,7 @@ cmd_pkt->request_type = IPR_RQTYPE_IOACMD; cmd_pkt->cdb[0] = IPR_RESET_DEVICE; + ipr_sdev_err(scsi_cmd->device, "Resetting device\n"); ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); @@ -3011,10 +3014,10 @@ * If abort has not completed, indicate the reset has, else call the * abort's done function to wake the sleeping eh thread */ - if (ipr_cmd->sibling->sibling) - ipr_cmd->sibling->sibling = NULL; + if (ipr_cmd->u.sibling->u.sibling) + ipr_cmd->u.sibling->u.sibling = NULL; else - ipr_cmd->sibling->done(ipr_cmd->sibling); + ipr_cmd->u.sibling->done(ipr_cmd->u.sibling); list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); LEAVE; @@ -3045,9 +3048,10 @@ return; } + ipr_sdev_err(ipr_cmd->u.sdev, "Abort timed out. Resetting bus\n"); reset_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); - ipr_cmd->sibling = reset_cmd; - reset_cmd->sibling = ipr_cmd; + ipr_cmd->u.sibling = reset_cmd; + reset_cmd->u.sibling = ipr_cmd; reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle; cmd_pkt = &reset_cmd->ioarcb.cmd_pkt; cmd_pkt->request_type = IPR_RQTYPE_IOACMD; @@ -3106,7 +3110,9 @@ cmd_pkt->cdb[3] = (ioarcb_addr >> 16) & 0xff; cmd_pkt->cdb[4] = (ioarcb_addr >> 8) & 0xff; cmd_pkt->cdb[5] = ioarcb_addr & 0xff; + ipr_cmd->u.sdev = scsi_cmd->device; + ipr_sdev_err(scsi_cmd->device, "Aborting command: %02X\n", scsi_cmd->cmnd[0]); ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_ABORT_TASK_TIMEOUT); ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); @@ -3175,6 +3181,7 @@ writel(IPR_PCII_IOA_TRANS_TO_OPER, ioa_cfg->regs.clr_interrupt_reg); int_reg = readl(ioa_cfg->regs.sense_interrupt_reg); + list_del(&ioa_cfg->reset_cmd->queue); del_timer(&ioa_cfg->reset_cmd->timer); ipr_reset_ioa_job(ioa_cfg->reset_cmd); } else { @@ -3570,12 +3577,12 @@ ipr_sdev_err(ipr_cmd->scsi_cmd->device, "%s\n", ipr_error_table[error_index].error); - if ((ioasa->gpdd.device_end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) && - (ioasa->gpdd.device_bus_phase <= ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) { + if ((ioasa->u.gpdd.end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) && + (ioasa->u.gpdd.bus_phase <= ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) { ipr_sdev_err(ipr_cmd->scsi_cmd->device, "Device End state: %s Phase: %s\n", - ipr_gpdd_dev_end_states[ioasa->gpdd.device_end_state], - ipr_gpdd_dev_bus_phases[ioasa->gpdd.device_bus_phase]); + ipr_gpdd_dev_end_states[ioasa->u.gpdd.end_state], + ipr_gpdd_dev_bus_phases[ioasa->u.gpdd.bus_phase]); } if (sizeof(struct ipr_ioasa) < be16_to_cpu(ioasa->ret_stat_len)) @@ -3619,7 +3626,7 @@ if (ipr_is_vset_device(res) && ioasc == IPR_IOASC_MED_DO_NOT_REALLOC && - ioasa->vset.failing_lba_hi != 0) { + ioasa->u.vset.failing_lba_hi != 0) { sense_buf[0] = 0x72; sense_buf[1] = IPR_IOASC_SENSE_KEY(ioasc); sense_buf[2] = IPR_IOASC_SENSE_CODE(ioasc); @@ -3630,14 +3637,14 @@ sense_buf[9] = 0x0A; sense_buf[10] = 0x80; - failing_lba = be32_to_cpu(ioasa->vset.failing_lba_hi); + failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_hi); sense_buf[12] = (failing_lba & 0xff000000) >> 24; sense_buf[13] = (failing_lba & 0x00ff0000) >> 16; sense_buf[14] = (failing_lba & 0x0000ff00) >> 8; sense_buf[15] = failing_lba & 0x000000ff; - failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo); + failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_lo); sense_buf[16] = (failing_lba & 0xff000000) >> 24; sense_buf[17] = (failing_lba & 0x00ff0000) >> 16; @@ -3669,9 +3676,9 @@ } else { if (ioasc == IPR_IOASC_MED_DO_NOT_REALLOC) { if (ipr_is_vset_device(res)) - failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo); + failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_lo); else - failing_lba = be32_to_cpu(ioasa->dasd.failing_lba); + failing_lba = be32_to_cpu(ioasa->u.dasd.failing_lba); sense_buf[0] |= 0x80; /* Or in the Valid bit */ sense_buf[3] = (failing_lba & 0xff000000) >> 24; @@ -4118,7 +4125,7 @@ struct ipr_supported_device *supp_dev = &ioa_cfg->vpd_cbs->supp_dev; struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; - struct ipr_resource_entry *res = ipr_cmd->res; + struct ipr_resource_entry *res = ipr_cmd->u.res; ipr_cmd->job_step = ipr_ioa_reset_done; @@ -4126,7 +4133,7 @@ if (!ipr_is_af_dasd_device(res)) continue; - ipr_cmd->res = res; + ipr_cmd->u.res = res; ipr_set_sup_dev_dflt(supp_dev, &res->cfgte.std_inq_data.vpids); ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); @@ -4367,8 +4374,8 @@ length); ipr_cmd->job_step = ipr_set_supported_devs; - ipr_cmd->res = list_entry(ioa_cfg->used_res_q.next, - struct ipr_resource_entry, queue); + ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next, + struct ipr_resource_entry, queue); ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); @@ -4802,6 +4809,7 @@ ipr_cmd->timer.expires = jiffies + IPR_OPERATIONAL_TIMEOUT; ipr_cmd->timer.function = (void (*)(unsigned long))ipr_timeout; add_timer(&ipr_cmd->timer); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q); LEAVE; return IPR_RC_JOB_RETURN; @@ -4886,12 +4894,12 @@ hostrcb = list_entry(ioa_cfg->hostrcb_free_q.next, struct ipr_hostrcb, queue); list_del(&hostrcb->queue); - memset(hostrcb, 0, IPR_HOSTRCB_SZ); + memset(&hostrcb->hcam, 0, sizeof(hostrcb->hcam)); rc = ipr_get_ldump_data_section(ioa_cfg, be32_to_cpu(sdt.entry[0].bar_str_offset), - (u32 *)hostrcb, - min(length, (int)IPR_HOSTRCB_SZ) / sizeof(u32)); + (u32 *)&hostrcb->hcam, + min(length, (int)sizeof(hostrcb->hcam)) / sizeof(u32)); if (!rc) ipr_handle_log_data(ioa_cfg, hostrcb); @@ -5022,8 +5030,8 @@ struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; int rc = IPR_RC_JOB_RETURN; - if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->time_left) { - ipr_cmd->time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; + if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) { + ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); } else { ipr_cmd->job_step = ipr_reset_start_bist; @@ -5062,7 +5070,7 @@ ipr_cmd->job_step = ipr_reset_start_bist; } - ipr_cmd->time_left = IPR_WAIT_FOR_RESET_TIMEOUT; + ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT; ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); LEAVE; @@ -5148,7 +5156,7 @@ static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd) { struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; - enum ipr_shutdown_type shutdown_type = ipr_cmd->shutdown_type; + enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type; unsigned long timeout; int rc = IPR_RC_JOB_CONTINUE; @@ -5189,7 +5197,7 @@ static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd) { u32 rc, ioasc; - unsigned long scratch = ipr_cmd->scratch; + unsigned long scratch = ipr_cmd->u.scratch; struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; do { @@ -5215,7 +5223,7 @@ } ipr_reinit_ipr_cmnd(ipr_cmd); - ipr_cmd->scratch = scratch; + ipr_cmd->u.scratch = scratch; rc = ipr_cmd->job_step(ipr_cmd); } while(rc == IPR_RC_JOB_CONTINUE); } @@ -5247,7 +5255,7 @@ ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); ioa_cfg->reset_cmd = ipr_cmd; ipr_cmd->job_step = job_step; - ipr_cmd->shutdown_type = shutdown_type; + ipr_cmd->u.shutdown_type = shutdown_type; ipr_reset_ioa_job(ipr_cmd); } @@ -5531,7 +5539,8 @@ goto cleanup; memset(ioa_cfg->hostrcb[i], 0, sizeof(struct ipr_hostrcb)); - ioa_cfg->hostrcb[i]->hostrcb_dma = ioa_cfg->hostrcb_dma[i]; + ioa_cfg->hostrcb[i]->hostrcb_dma = + ioa_cfg->hostrcb_dma[i] + offsetof(struct ipr_hostrcb, hcam); list_add_tail(&ioa_cfg->hostrcb[i]->queue, &ioa_cfg->hostrcb_free_q); } diff -Nru a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h --- a/drivers/scsi/ipr.h 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/ipr.h 2004-05-26 15:01:35 -07:00 @@ -36,8 +36,8 @@ /* * Literals */ -#define IPR_DRIVER_VERSION "2.0.6" -#define IPR_DRIVER_DATE "(May 3, 2004)" +#define IPR_DRIVER_VERSION "2.0.7" +#define IPR_DRIVER_DATE "(May 21, 2004)" /* * IPR_DBG_TRACE: Setting this to 1 will turn on some general function tracing @@ -413,8 +413,8 @@ }__attribute__((packed, aligned (4))); struct ipr_ioasa_gpdd { - u8 device_end_state; - u8 device_bus_phase; + u8 end_state; + u8 bus_phase; u16 reserved; u32 ioa_data[23]; }__attribute__((packed, aligned (4))); @@ -457,7 +457,7 @@ struct ipr_ioasa_af_dasd dasd; struct ipr_ioasa_gpdd gpdd; struct ipr_ioasa_raw raw; - }; + } u; }__attribute__((packed, aligned (4))); struct ipr_mode_parm_hdr { @@ -617,14 +617,14 @@ struct ipr_hostrcb_type_02_error type_02_error; struct ipr_hostrcb_type_03_error type_03_error; struct ipr_hostrcb_type_04_error type_04_error; - }; + } u; }__attribute__((packed, aligned (4))); struct ipr_hostrcb_raw { u32 data[sizeof(struct ipr_hostrcb_error)/sizeof(u32)]; }__attribute__((packed, aligned (4))); -struct ipr_hostrcb { +struct ipr_hcam { u8 op_code; #define IPR_HOST_RCB_OP_CODE_CONFIG_CHANGE 0xE1 #define IPR_HOST_RCB_OP_CODE_LOG_DATA 0xE2 @@ -662,14 +662,14 @@ struct ipr_hostrcb_error error; struct ipr_hostrcb_cfg_ch_not ccn; struct ipr_hostrcb_raw raw; - }; + } u; +}__attribute__((packed, aligned (4))); - /* Driver added data */ +struct ipr_hostrcb { + struct ipr_hcam hcam; u32 hostrcb_dma; struct list_head queue; -}__attribute__((packed, aligned (4))); - -#define IPR_HOSTRCB_SZ offsetof(struct ipr_hostrcb, hostrcb_dma) +}; /* IPR smart dump table structures */ struct ipr_sdt_entry { @@ -785,7 +785,7 @@ u32 ioasc; u32 add_data; u32 res_addr; - }; + } u; }; struct ipr_sglist { @@ -939,7 +939,8 @@ unsigned long scratch; struct ipr_resource_entry *res; struct ipr_cmnd *sibling; - }; + struct scsi_device *sdev; + } u; struct ipr_ioa_cfg *ioa_cfg; }; diff -Nru a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c --- a/drivers/scsi/nsp32.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/nsp32.c 2004-05-26 15:01:35 -07:00 @@ -38,7 +38,6 @@ #include <linux/pci.h> #include <linux/delay.h> #include <linux/ctype.h> -#include <linux/interrupt.h> #include <asm/dma.h> #include <asm/system.h> diff -Nru a/drivers/scsi/qlogicfas408.c b/drivers/scsi/qlogicfas408.c --- a/drivers/scsi/qlogicfas408.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/qlogicfas408.c 2004-05-26 15:01:35 -07:00 @@ -538,7 +538,7 @@ * Return info string */ -char *qlogicfas408_info(struct Scsi_Host *host) +const char *qlogicfas408_info(struct Scsi_Host *host) { struct qlogicfas408_priv *priv = get_priv_by_host(host); return priv->qinfo; diff -Nru a/drivers/scsi/qlogicfas408.h b/drivers/scsi/qlogicfas408.h --- a/drivers/scsi/qlogicfas408.h 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/qlogicfas408.h 2004-05-26 15:01:35 -07:00 @@ -111,7 +111,7 @@ int qlogicfas408_bus_reset(Scsi_Cmnd * cmd); int qlogicfas408_host_reset(Scsi_Cmnd * cmd); int qlogicfas408_device_reset(Scsi_Cmnd * cmd); -char *qlogicfas408_info(struct Scsi_Host *host); +const char *qlogicfas408_info(struct Scsi_Host *host); int qlogicfas408_get_chip_type(int qbase, int int_type); void qlogicfas408_setup(int qbase, int id, int int_type); int qlogicfas408_detect(int qbase, int int_type); diff -Nru a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c --- a/drivers/scsi/scsi_lib.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/scsi_lib.c 2004-05-26 15:01:36 -07:00 @@ -1610,7 +1610,9 @@ case SDEV_CANCEL: switch (oldstate) { + case SDEV_CREATED: case SDEV_RUNNING: + case SDEV_OFFLINE: break; default: goto illegal; @@ -1619,9 +1621,7 @@ case SDEV_DEL: switch (oldstate) { - case SDEV_CREATED: case SDEV_CANCEL: - case SDEV_OFFLINE: break; default: goto illegal; diff -Nru a/drivers/scsi/scsi_logging.h b/drivers/scsi/scsi_logging.h --- a/drivers/scsi/scsi_logging.h 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/scsi_logging.h 2004-05-26 15:01:35 -07:00 @@ -46,7 +46,7 @@ #define SCSI_CHECK_LOGGING(SHIFT, BITS, LEVEL, CMD) \ { \ - if ((SCSI_LOG_LEVEL(SHIFT, BITS)) > (LEVEL)) \ + if (unlikely((SCSI_LOG_LEVEL(SHIFT, BITS)) > (LEVEL))) \ (CMD); \ } #else diff -Nru a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c --- a/drivers/scsi/scsi_scan.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/scsi_scan.c 2004-05-26 15:01:36 -07:00 @@ -80,7 +80,6 @@ MODULE_PARM_DESC(max_luns, "last scsi LUN (should be between 1 and 2^32-1)"); -#ifdef CONFIG_SCSI_REPORT_LUNS /* * max_scsi_report_luns: the maximum number of LUNS that will be * returned from the REPORT LUNS command. 8 times this value must @@ -88,13 +87,19 @@ * in practice, the maximum number of LUNs suppored by any device * is about 16k. */ -static unsigned int max_scsi_report_luns = 128; +static unsigned int max_scsi_report_luns = 511; module_param_named(max_report_luns, max_scsi_report_luns, int, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(max_report_luns, "REPORT LUNS maximum number of LUNS received (should be" " between 1 and 16384)"); -#endif + +static unsigned int scsi_inq_timeout = SCSI_TIMEOUT/HZ+3; + +module_param_named(inq_timeout, scsi_inq_timeout, int, S_IRUGO|S_IWUSR); +MODULE_PARM_DESC(inq_timeout, + "Timeout (in seconds) waiting for devices to answer INQUIRY." + " Default is 5. Some non-compliant devices need more."); /** * scsi_unlock_floptical - unlock device via a special MODE SENSE command @@ -212,6 +217,11 @@ INIT_LIST_HEAD(&sdev->starved_entry); spin_lock_init(&sdev->list_lock); + + /* if the device needs this changing, it may do so in the + * slave_configure function */ + sdev->max_device_blocked = SCSI_DEFAULT_DEVICE_BLOCKED; + /* * Some low level driver could use device->type */ @@ -346,7 +356,7 @@ memset(inq_result, 0, 36); scsi_wait_req(sreq, (void *) scsi_cmd, (void *) inq_result, 36, - SCSI_TIMEOUT + 4 * HZ, 3); + HZ/2 + HZ*scsi_inq_timeout, 3); SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO "scsi scan: 1st INQUIRY %s with" " code 0x%x\n", sreq->sr_result ? @@ -400,7 +410,7 @@ memset(inq_result, 0, possible_inq_resp_len); scsi_wait_req(sreq, (void *) scsi_cmd, (void *) inq_result, - possible_inq_resp_len, SCSI_TIMEOUT + 4 * HZ, 3); + possible_inq_resp_len, (1+scsi_inq_timeout)*(HZ/2), 3); SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO "scsi scan: 2nd INQUIRY" " %s with code 0x%x\n", sreq->sr_result ? "failed" : "successful", sreq->sr_result)); @@ -628,10 +638,6 @@ spin_unlock_irqrestore(sdev->host->host_lock, flags); } - /* if the device needs this changing, it may do so in the detect - * function */ - sdev->max_device_blocked = SCSI_DEFAULT_DEVICE_BLOCKED; - sdev->use_10_for_rw = 1; if (*bflags & BLIST_MS_SKIP_PAGE_08) @@ -863,7 +869,6 @@ return; } -#ifdef CONFIG_SCSI_REPORT_LUNS /** * scsilun_to_int: convert a scsi_lun to an int * @scsilun: struct scsi_lun to be converted. @@ -924,9 +929,14 @@ u8 *data; /* - * Only support SCSI-3 and up devices. - */ - if (sdev->scsi_level < SCSI_3) + * Only support SCSI-3 and up devices if BLIST_NOREPORTLUN is not set. + * Also allow SCSI-2 if BLIST_REPORTLUN2 is set and host adapter does + * support more than 8 LUNs. + */ + if ((bflags & BLIST_NOREPORTLUN) || + sdev->scsi_level < SCSI_2 || + (sdev->scsi_level < SCSI_3 && + (!(bflags & BLIST_REPORTLUN2) || sdev->host->max_lun <= 8)) ) return 1; if (bflags & BLIST_NOLUN) return 0; @@ -1090,9 +1100,6 @@ printk(ALLOC_FAILURE_MSG, __FUNCTION__); return 0; } -#else -# define scsi_report_lun_scan(sdev, blags, rescan) (1) -#endif /* CONFIG_SCSI_REPORT_LUNS */ struct scsi_device *scsi_add_device(struct Scsi_Host *shost, uint channel, uint id, uint lun) diff -Nru a/drivers/scsi/scsiiom.c b/drivers/scsi/scsiiom.c --- a/drivers/scsi/scsiiom.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/scsi/scsiiom.c 2004-05-26 15:01:35 -07:00 @@ -15,7 +15,7 @@ }; -UCHAR +static UCHAR dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB ) { UCHAR cmd; UCHAR disc_allowed, try_sync_nego; @@ -227,7 +227,7 @@ #if DMA_INT UCHAR dstatus; #endif - DC390_AFLAGS DC390_IFLAGS; //DC390_DFLAGS + DC390_IFLAGS; pACB = (PACB)dev_id; for (pACB2 = dc390_pACB_start; (pACB2 && pACB2 != pACB); pACB2 = pACB2->pNextACB); @@ -237,26 +237,21 @@ return IRQ_NONE; } - //DC390_LOCK_DRV; - sstatus = DC390_read8 (Scsi_Status); if( !(sstatus & INTERRUPT) ) - { /*DC390_UNLOCK_DRV;*/ return IRQ_NONE; }; + return IRQ_NONE; DEBUG1(printk (KERN_DEBUG "sstatus=%02x,", sstatus)); #if DMA_INT DC390_LOCK_IO(pACB->pScsiHost); - DC390_LOCK_ACB; dstatus = dc390_dma_intr (pACB); - DC390_UNLOCK_ACB; DC390_UNLOCK_IO(pACB->pScsiHost); DEBUG1(printk (KERN_DEBUG "dstatus=%02x,", dstatus)); if (! (dstatus & SCSI_INTERRUPT)) { DEBUG0(printk (KERN_WARNING "DC390 Int w/o SCSI actions (only DMA?)\n")); - //DC390_UNLOCK_DRV; return IRQ_NONE; }; #else @@ -266,8 +261,6 @@ #endif DC390_LOCK_IO(pACB->pScsiHost); - DC390_LOCK_ACB; - //DC390_UNLOCK_DRV_NI; /* Allow _other_ CPUs to process IRQ (useful for shared IRQs) */ istate = DC390_read8 (Intern_State); istatus = DC390_read8 (INT_Status); /* This clears Scsi_Status, Intern_State and INT_Status ! */ @@ -339,14 +332,11 @@ } unlock: - //DC390_LOCK_DRV_NI; - DC390_UNLOCK_ACB; DC390_UNLOCK_IO(pACB->pScsiHost); - //DC390_UNLOCK_DRV; /* Restore initial flags */ return IRQ_HANDLED; } -irqreturn_t do_DC390_Interrupt( int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t do_DC390_Interrupt( int irq, void *dev_id, struct pt_regs *regs) { irqreturn_t ret; DEBUG1(printk (KERN_INFO "DC390: Irq (%i) caught: ", irq)); @@ -356,7 +346,7 @@ return ret; } -void +static void dc390_DataOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus) { UCHAR sstatus; @@ -410,7 +400,7 @@ } } -void +static void dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus) { UCHAR sstatus, residual, bval; @@ -521,7 +511,7 @@ { DC390_write8 (ScsiCmd, CLEAR_FIFO_CMD); DC390_write8 (DMA_Cmd, READ_DIRECTION+DMA_IDLE_CMD); /* | DMA_INT */ - } + } } static void @@ -740,9 +730,9 @@ psgl = pSRB->pSegmentList; //dc390_pci_sync(pSRB); - while (pSRB->TotalXferredLen + (ULONG) psgl->length < pSRB->Saved_Ptr) + while (pSRB->TotalXferredLen + (ULONG) sg_dma_len(psgl) < pSRB->Saved_Ptr) { - pSRB->TotalXferredLen += (ULONG) psgl->length; + pSRB->TotalXferredLen += (ULONG) sg_dma_len(psgl); pSRB->SGIndex++; if( pSRB->SGIndex < pSRB->SGcount ) { @@ -762,7 +752,7 @@ } else if(pcmd->request_buffer) { //dc390_pci_sync(pSRB); - pSRB->Segmentx.length = pcmd->request_bufflen - pSRB->Saved_Ptr; + sg_dma_len(&pSRB->Segmentx) = pcmd->request_bufflen - pSRB->Saved_Ptr; pSRB->SGcount = 1; pSRB->pSegmentList = (PSGL) &pSRB->Segmentx; } else { @@ -873,7 +863,7 @@ } -void +static void dc390_DataIO_Comm( PACB pACB, PSRB pSRB, UCHAR ioDir) { PSGL psgl; @@ -885,6 +875,8 @@ if (pDCB) printk (KERN_ERR "DC390: pSRB == pTmpSRB! (TagQ Error?) (%02i-%i)\n", pDCB->TargetID, pDCB->TargetLUN); else printk (KERN_ERR "DC390: pSRB == pTmpSRB! (TagQ Error?) (DCB 0!)\n"); + + pSRB->pSRBDCB = pDCB; dc390_EnableMsgOut_Abort (pACB, pSRB); if (pDCB) pDCB->DCBFlag |= ABORT_DEV; return; @@ -1150,7 +1142,6 @@ pSRB = psrb; } pDCB->pGoingSRB = 0; - dc390_Query_to_Waiting (pACB); dc390_Waiting_process (pACB); } else @@ -1466,7 +1457,7 @@ ptr2 = pSRB->pSegmentList; for( i=pSRB->SGIndex; i < bval; i++) { - swlval += ptr2->length; + swlval += sg_dma_len(ptr2); ptr2++; } REMOVABLEDEBUG(printk(KERN_INFO "XferredLen=%08x,NotXferLen=%08x\n",\ @@ -1619,20 +1610,15 @@ pACB->scan_devices = 0; }; -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,30) pcmd->resid = pcmd->request_bufflen - pSRB->TotalXferredLen; -#endif if (!DCB_removed) dc390_Going_remove (pDCB, pSRB); /* Add to free list */ dc390_Free_insert (pACB, pSRB); DEBUG0(printk (KERN_DEBUG "DC390: SRBdone: done pid %li\n", pcmd->pid)); - DC390_UNLOCK_ACB_NI; pcmd->scsi_done (pcmd); - DC390_LOCK_ACB_NI; - dc390_Query_to_Waiting (pACB); dc390_Waiting_process (pACB); return; } @@ -1668,9 +1654,7 @@ /* ReleaseSRB( pDCB, pSRB ); */ DEBUG0(printk (KERN_DEBUG "DC390: DoingSRB_Done: done pid %li\n", pcmd->pid)); - DC390_UNLOCK_ACB_NI; pcmd->scsi_done( pcmd ); - DC390_LOCK_ACB_NI; #endif psrb = psrb2; } @@ -1679,7 +1663,6 @@ pdcb->TagMask = 0; pdcb = pdcb->pNextDCB; } while( pdcb != pDCB ); - dc390_Query_to_Waiting (pACB); } diff -Nru a/drivers/scsi/sg.c b/drivers/scsi/sg.c --- a/drivers/scsi/sg.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/sg.c 2004-05-26 15:01:36 -07:00 @@ -7,7 +7,7 @@ * Original driver (sg.c): * Copyright (C) 1992 Lawrence Foard * Version 2 and 3 extensions to driver: - * Copyright (C) 1998 - 2002 Douglas Gilbert + * Copyright (C) 1998 - 2004 Douglas Gilbert * * Modified 19-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support * @@ -17,27 +17,18 @@ * any later version. * */ -#include <linux/config.h> -static int sg_version_num = 30530; /* 2 digits for each component */ + +static int sg_version_num = 30531; /* 2 digits for each component */ +#define SG_VERSION_STR "3.5.31" + /* * D. P. Gilbert (dgilbert@interlog.com, dougg@triode.net.au), notes: * - scsi logging is available via SCSI_LOG_TIMEOUT macros. First * the kernel/module needs to be built with CONFIG_SCSI_LOGGING * (otherwise the macros compile to empty statements). - * Then before running the program to be debugged enter: - * # echo "scsi log timeout 7" > /proc/scsi/scsi - * This will send copious output to the console and the log which - * is usually /var/log/messages. To turn off debugging enter: - * # echo "scsi log timeout 0" > /proc/scsi/scsi - * The 'timeout' token was chosen because it is relatively unused. - * The token 'hlcomplete' should be used but that triggers too - * much output from the sd device driver. To dump the current - * state of the SCSI mid level data structures enter: - * # echo "scsi dump 1" > /proc/scsi/scsi - * To dump the state of sg's data structures use: - * # cat /proc/scsi/sg/debug * */ +#include <linux/config.h> #include <linux/module.h> #include <linux/fs.h> @@ -69,7 +60,7 @@ #ifdef CONFIG_SCSI_PROC_FS #include <linux/proc_fs.h> -static char *sg_version_str = "3.5.30 [20040124]"; +static char *sg_version_date = "20040513"; static int sg_proc_init(void); static void sg_proc_cleanup(void); @@ -110,7 +101,7 @@ #define SG_SECTOR_SZ 512 #define SG_SECTOR_MSK (SG_SECTOR_SZ - 1) -#define SG_DEV_ARR_LUMP 6 /* amount to over allocate sg_dev_arr by */ +#define SG_DEV_ARR_LUMP 32 /* amount to over allocate sg_dev_arr by */ static int sg_add(struct class_device *); static void sg_remove(struct class_device *); @@ -1333,85 +1324,44 @@ static int sg_sysfs_valid = 0; -static int -sg_add(struct class_device *cl_dev) +static int sg_alloc(struct gendisk *disk, struct scsi_device *scsidp) { - struct scsi_device *scsidp = to_scsi_device(cl_dev->dev); - struct gendisk *disk; - Sg_device *sdp = NULL; + Sg_device *sdp; unsigned long iflags; - struct cdev * cdev = NULL; + void *old_sg_dev_arr = NULL; int k, error; - disk = alloc_disk(1); - if (!disk) + sdp = vmalloc(sizeof(Sg_device)); + if (!sdp) return -ENOMEM; - cdev = cdev_alloc(); - if (! cdev) - return -ENOMEM; write_lock_irqsave(&sg_dev_arr_lock, iflags); - if (sg_nr_dev >= sg_dev_max) { /* try to resize */ + if (unlikely(sg_nr_dev >= sg_dev_max)) { /* try to resize */ Sg_device **tmp_da; int tmp_dev_max = sg_nr_dev + SG_DEV_ARR_LUMP; - write_unlock_irqrestore(&sg_dev_arr_lock, iflags); - tmp_da = (Sg_device **)vmalloc( - tmp_dev_max * sizeof(Sg_device *)); - if (NULL == tmp_da) { - printk(KERN_ERR - "sg_add: device array cannot be resized\n"); - error = -ENOMEM; - goto out; - } + + tmp_da = vmalloc(tmp_dev_max * sizeof(Sg_device *)); + if (unlikely(!tmp_da)) + goto expand_failed; + write_lock_irqsave(&sg_dev_arr_lock, iflags); - memset(tmp_da, 0, tmp_dev_max * sizeof (Sg_device *)); - memcpy(tmp_da, sg_dev_arr, - sg_dev_max * sizeof (Sg_device *)); - vfree((char *) sg_dev_arr); + memset(tmp_da, 0, tmp_dev_max * sizeof(Sg_device *)); + memcpy(tmp_da, sg_dev_arr, sg_dev_max * sizeof(Sg_device *)); + old_sg_dev_arr = sg_dev_arr; sg_dev_arr = tmp_da; sg_dev_max = tmp_dev_max; } -find_empty_slot: for (k = 0; k < sg_dev_max; k++) if (!sg_dev_arr[k]) break; - if (k >= SG_MAX_DEVS) { - write_unlock_irqrestore(&sg_dev_arr_lock, iflags); - printk(KERN_WARNING - "Unable to attach sg device <%d, %d, %d, %d>" - " type=%d, minor number exceeds %d\n", - scsidp->host->host_no, scsidp->channel, scsidp->id, - scsidp->lun, scsidp->type, SG_MAX_DEVS - 1); - if (NULL != sdp) - vfree((char *) sdp); - error = -ENODEV; - goto out; - } - if (k < sg_dev_max) { - if (NULL == sdp) { - write_unlock_irqrestore(&sg_dev_arr_lock, iflags); - sdp = (Sg_device *)vmalloc(sizeof(Sg_device)); - write_lock_irqsave(&sg_dev_arr_lock, iflags); - if (!sg_dev_arr[k]) - goto find_empty_slot; - } - } else - sdp = NULL; - if (NULL == sdp) { - write_unlock_irqrestore(&sg_dev_arr_lock, iflags); - printk(KERN_ERR "sg_add: Sg_device cannot be allocated\n"); - error = -ENOMEM; - goto out; - } + if (unlikely(k >= SG_MAX_DEVS)) + goto overflow; - SCSI_LOG_TIMEOUT(3, printk("sg_add: dev=%d \n", k)); memset(sdp, 0, sizeof(*sdp)); + SCSI_LOG_TIMEOUT(3, printk("sg_alloc: dev=%d \n", k)); sprintf(disk->disk_name, "sg%d", k); - cdev->owner = THIS_MODULE; - cdev->ops = &sg_fops; - disk->major = SCSI_GENERIC_MAJOR; disk->first_minor = k; sdp->disk = disk; sdp->device = scsidp; @@ -1421,6 +1371,55 @@ sg_nr_dev++; sg_dev_arr[k] = sdp; write_unlock_irqrestore(&sg_dev_arr_lock, iflags); + error = k; + + out: + if (error < 0) + vfree(sdp); + vfree(old_sg_dev_arr); + return error; + + expand_failed: + printk(KERN_ERR "sg_alloc: device array cannot be resized\n"); + error = -ENOMEM; + goto out; + + overflow: + write_unlock_irqrestore(&sg_dev_arr_lock, iflags); + printk(KERN_WARNING + "Unable to attach sg device <%d, %d, %d, %d> type=%d, minor " + "number exceeds %d\n", scsidp->host->host_no, scsidp->channel, + scsidp->id, scsidp->lun, scsidp->type, SG_MAX_DEVS - 1); + error = -ENODEV; + goto out; +} + +static int +sg_add(struct class_device *cl_dev) +{ + struct scsi_device *scsidp = to_scsi_device(cl_dev->dev); + struct gendisk *disk; + Sg_device *sdp = NULL; + struct cdev * cdev = NULL; + int error, k; + + disk = alloc_disk(1); + if (!disk) + return -ENOMEM; + disk->major = SCSI_GENERIC_MAJOR; + + error = -ENOMEM; + cdev = cdev_alloc(); + if (!cdev) + goto out; + cdev->owner = THIS_MODULE; + cdev->ops = &sg_fops; + + error = sg_alloc(disk, scsidp); + if (error < 0) + goto out; + k = error; + sdp = sg_dev_arr[k]; devfs_mk_cdev(MKDEV(SCSI_GENERIC_MAJOR, k), S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, @@ -1543,6 +1542,7 @@ MODULE_AUTHOR("Douglas Gilbert"); MODULE_DESCRIPTION("SCSI generic (sg) driver"); MODULE_LICENSE("GPL"); +MODULE_VERSION(SG_VERSION_STR); MODULE_PARM_DESC(def_reserved_size, "size of buffer reserved for each fd"); MODULE_PARM_DESC(allow_dio, "allow direct I/O (default: 0 (disallow))"); @@ -2844,7 +2844,8 @@ static int sg_proc_seq_show_version(struct seq_file *s, void *v) { - seq_printf(s, "%d\t%s\n", sg_version_num, sg_version_str); + seq_printf(s, "%d\t%s [%s]\n", sg_version_num, SG_VERSION_STR, + sg_version_date); return 0; } diff -Nru a/drivers/scsi/st.c b/drivers/scsi/st.c --- a/drivers/scsi/st.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/st.c 2004-05-26 15:01:36 -07:00 @@ -486,7 +486,7 @@ tape_name(STp), forward ? "forward" : "backward")); SRpnt = st_do_scsi(NULL, STp, cmd, 0, SCSI_DATA_NONE, - STp->timeout, MAX_RETRIES, TRUE); + STp->device->timeout, MAX_RETRIES, TRUE); if (!SRpnt) return (STp->buffer)->syscall_result; @@ -544,7 +544,7 @@ cmd[4] = blks; SRpnt = st_do_scsi(NULL, STp, cmd, transfer, SCSI_DATA_WRITE, - STp->timeout, MAX_WRITE_RETRIES, TRUE); + STp->device->timeout, MAX_WRITE_RETRIES, TRUE); if (!SRpnt) return (STp->buffer)->syscall_result; @@ -867,7 +867,7 @@ memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE); cmd[0] = READ_BLOCK_LIMITS; - SRpnt = st_do_scsi(SRpnt, STp, cmd, 6, SCSI_DATA_READ, STp->timeout, + SRpnt = st_do_scsi(SRpnt, STp, cmd, 6, SCSI_DATA_READ, STp->device->timeout, MAX_READY_RETRIES, TRUE); if (!SRpnt) { retval = (STp->buffer)->syscall_result; @@ -894,7 +894,7 @@ cmd[0] = MODE_SENSE; cmd[4] = 12; - SRpnt = st_do_scsi(SRpnt, STp, cmd, 12, SCSI_DATA_READ, STp->timeout, + SRpnt = st_do_scsi(SRpnt, STp, cmd, 12, SCSI_DATA_READ, STp->device->timeout, MAX_READY_RETRIES, TRUE); if (!SRpnt) { retval = (STp->buffer)->syscall_result; @@ -1116,7 +1116,7 @@ cmd[4] = 1 + STp->two_fm; SRpnt = st_do_scsi(NULL, STp, cmd, 0, SCSI_DATA_NONE, - STp->timeout, MAX_WRITE_RETRIES, TRUE); + STp->device->timeout, MAX_WRITE_RETRIES, TRUE); if (!SRpnt) { result = (STp->buffer)->syscall_result; goto out; @@ -1509,7 +1509,7 @@ cmd[4] = blks; SRpnt = st_do_scsi(SRpnt, STp, cmd, transfer, SCSI_DATA_WRITE, - STp->timeout, MAX_WRITE_RETRIES, !async_write); + STp->device->timeout, MAX_WRITE_RETRIES, !async_write); if (!SRpnt) { retval = STbp->syscall_result; goto out; @@ -1679,7 +1679,7 @@ SRpnt = *aSRpnt; SRpnt = st_do_scsi(SRpnt, STp, cmd, bytes, SCSI_DATA_READ, - STp->timeout, MAX_RETRIES, TRUE); + STp->device->timeout, MAX_RETRIES, TRUE); release_buffering(STp); *aSRpnt = SRpnt; if (!SRpnt) @@ -2081,7 +2081,7 @@ DEBC( printk(KERN_INFO "%s: Long timeout set to %d seconds.\n", name, (value & ~MT_ST_SET_LONG_TIMEOUT))); } else { - STp->timeout = value * HZ; + STp->device->timeout = value * HZ; DEBC( printk(KERN_INFO "%s: Normal timeout set to %d seconds.\n", name, value) ); } @@ -2189,7 +2189,7 @@ cmd[4] = 255; SRpnt = st_do_scsi(SRpnt, STp, cmd, cmd[4], SCSI_DATA_READ, - STp->timeout, 0, TRUE); + STp->device->timeout, 0, TRUE); if (SRpnt == NULL) return (STp->buffer)->syscall_result; @@ -2220,7 +2220,7 @@ (STp->buffer)->b_data[pgo + MP_OFF_PAGE_NBR] &= MP_MSK_PAGE_NBR; SRpnt = st_do_scsi(SRpnt, STp, cmd, cmd[4], SCSI_DATA_WRITE, - (slow ? STp->long_timeout : STp->timeout), 0, TRUE); + (slow ? STp->long_timeout : STp->device->timeout), 0, TRUE); if (SRpnt == NULL) return (STp->buffer)->syscall_result; @@ -2332,7 +2332,7 @@ } if (STp->immediate) { cmd[1] = 1; /* Don't wait for completion */ - timeout = STp->timeout; + timeout = STp->device->timeout; } else timeout = STp->long_timeout; @@ -2512,7 +2512,7 @@ cmd[2] = (arg >> 16); cmd[3] = (arg >> 8); cmd[4] = arg; - timeout = STp->timeout; + timeout = STp->device->timeout; DEBC( if (cmd_in == MTWEOF) printk(ST_DEB_MSG "%s: Writing %d filemarks.\n", name, @@ -2530,7 +2530,7 @@ cmd[0] = REZERO_UNIT; if (STp->immediate) { cmd[1] = 1; /* Don't wait for completion */ - timeout = STp->timeout; + timeout = STp->device->timeout; } DEBC(printk(ST_DEB_MSG "%s: Rewinding tape.\n", name)); fileno = blkno = at_sm = 0; @@ -2543,7 +2543,7 @@ cmd[0] = START_STOP; if (STp->immediate) { cmd[1] = 1; /* Don't wait for completion */ - timeout = STp->timeout; + timeout = STp->device->timeout; } cmd[4] = 3; DEBC(printk(ST_DEB_MSG "%s: Retensioning tape.\n", name)); @@ -2576,7 +2576,7 @@ cmd[1] = (arg ? 1 : 0); /* Long erase with non-zero argument */ if (STp->immediate) { cmd[1] |= 2; /* Don't wait for completion */ - timeout = STp->timeout; + timeout = STp->device->timeout; } else timeout = STp->long_timeout * 8; @@ -2628,7 +2628,7 @@ (STp->buffer)->b_data[9] = (ltmp >> 16); (STp->buffer)->b_data[10] = (ltmp >> 8); (STp->buffer)->b_data[11] = ltmp; - timeout = STp->timeout; + timeout = STp->device->timeout; DEBC( if (cmd_in == MTSETBLK || cmd_in == SET_DENS_AND_BLK) printk(ST_DEB_MSG @@ -2809,7 +2809,7 @@ if (!logical && !STp->scsi2_logical) scmd[1] = 1; } - SRpnt = st_do_scsi(NULL, STp, scmd, 20, SCSI_DATA_READ, STp->timeout, + SRpnt = st_do_scsi(NULL, STp, scmd, 20, SCSI_DATA_READ, STp->device->timeout, MAX_READY_RETRIES, TRUE); if (!SRpnt) return (STp->buffer)->syscall_result; @@ -2911,7 +2911,7 @@ } if (STp->immediate) { scmd[1] |= 1; /* Don't wait for completion */ - timeout = STp->timeout; + timeout = STp->device->timeout; } SRpnt = st_do_scsi(NULL, STp, scmd, 0, SCSI_DATA_NONE, @@ -3408,11 +3408,17 @@ goto out; } up(&STp->lock); - i = scsi_cmd_ioctl(STp->disk, cmd_in, arg); - if (i != -ENOTTY) - return i; - else - return scsi_ioctl(STp->device, cmd_in, (void *) arg); + switch (cmd_in) { + case SCSI_IOCTL_GET_IDLUN: + case SCSI_IOCTL_GET_BUS_NUMBER: + break; + default: + i = scsi_cmd_ioctl(STp->disk, cmd_in, arg); + if (i != -ENOTTY) + return i; + break; + } + return scsi_ioctl(STp->device, cmd_in, (void *) arg); out: up(&STp->lock); @@ -3832,7 +3838,7 @@ tpnt->partition = 0; tpnt->new_partition = 0; tpnt->nbr_partitions = 0; - tpnt->timeout = ST_TIMEOUT; + tpnt->device->timeout = ST_TIMEOUT; tpnt->long_timeout = ST_LONG_TIMEOUT; tpnt->try_dio = try_direct_io && !SDp->host->unchecked_isa_dma; diff -Nru a/drivers/scsi/st.h b/drivers/scsi/st.h --- a/drivers/scsi/st.h 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/st.h 2004-05-26 15:01:36 -07:00 @@ -100,7 +100,6 @@ unsigned char c_algo; /* compression algorithm */ unsigned char pos_unknown; /* after reset position unknown */ int tape_type; - int timeout; /* timeout for normal commands */ int long_timeout; /* timeout for commands known to take long time */ unsigned long max_pfn; /* the maximum page number reachable by the HBA */ diff -Nru a/drivers/scsi/tmscsim.c b/drivers/scsi/tmscsim.c --- a/drivers/scsi/tmscsim.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/tmscsim.c 2004-05-26 15:01:36 -07:00 @@ -168,6 +168,10 @@ * 2.1a 03/11/29 GL, KG Initial fixing for 2.6. Convert to * * use the current PCI-mapping API, update * * command-queuing. * + * 2.1b 04/04/13 GL Fix for 64-bit platforms * + * 2.1b1 04/01/31 GL (applied 05.04) Remove internal * + * command-queuing. * + * 2.1b2 04/02/01 CH (applied 05.04) Fix error-handling * ***********************************************************************/ /* Uncomment SA_INTERRUPT, if the driver refuses to share its IRQ with other devices */ @@ -260,16 +264,10 @@ * undef : traditional save_flags; cli; restore_flags; */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,30) -# include <linux/init.h> -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,30) -# include <linux/spinlock.h> -#else -# include <asm/spinlock.h> -#endif -#endif +#include <linux/init.h> +#include <linux/spinlock.h> -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,99) && defined(MODULE) +#if defined(MODULE) static struct pci_device_id tmscsim_pci_tbl[] = { { .vendor = PCI_VENDOR_ID_AMD, @@ -283,23 +281,10 @@ #endif #define USE_SPINLOCKS 1 -#define NEW_PCI 1 -#define DC390_AFLAGS #define DC390_IFLAGS unsigned long iflags -#define DC390_DFLAGS unsigned long dflags -spinlock_t dc390_drvlock = SPIN_LOCK_UNLOCKED; #define DC390_LOCK_IO(dev) spin_lock_irqsave (((struct Scsi_Host *)dev)->host_lock, iflags) #define DC390_UNLOCK_IO(dev) spin_unlock_irqrestore (((struct Scsi_Host *)dev)->host_lock, iflags) -#define DC390_LOCK_DRV spin_lock_irqsave (&dc390_drvlock, dflags) -#define DC390_UNLOCK_DRV spin_unlock_irqrestore (&dc390_drvlock, dflags) -#define DC390_LOCK_DRV_NI spin_lock (&dc390_drvlock) -#define DC390_UNLOCK_DRV_NI spin_unlock (&dc390_drvlock) -#define DC390_LOCK_ACB /* DC390_LOCK_IO */ -#define DC390_UNLOCK_ACB /* DC390_UNLOCK_IO */ -#define DC390_LOCK_ACB_NI /* spin_lock (&(pACB->lock)) */ -#define DC390_UNLOCK_ACB_NI /* spin_unlock (&(pACB->lock)) */ -#define DC390_LOCKA_INIT /* DC390_LOCKA_INIT */ /* These macros are used for uniform access to 2.0.x and 2.1.x PCI config space*/ @@ -313,10 +298,7 @@ #define PCI_READ_CONFIG_BYTE(pd, rv, bv) pci_read_config_byte (pd, rv, bv) #define PCI_WRITE_CONFIG_WORD(pd, rv, bv) pci_write_config_word (pd, rv, bv) #define PCI_READ_CONFIG_WORD(pd, rv, bv) pci_read_config_word (pd, rv, bv) -#define PCI_BUS_DEV pdev->bus->number, pdev->devfn #define PCI_PRESENT (1) -#define PCI_SET_MASTER pci_set_master (pdev) -#define PCI_FIND_DEVICE(vend, id) (pdev = pci_find_device (vend, id, pdev)) #define PCI_GET_IO_AND_IRQ do{io_port = pci_resource_start (pdev, 0); irq = pdev->irq;} while(0) #include "tmscsim.h" @@ -325,46 +307,42 @@ # define __init #endif -UCHAR dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB ); -void dc390_DataOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); -void dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); +static UCHAR dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB ); +static void dc390_DataOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); +static void dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_Command_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_Status_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_MsgOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); -void dc390_MsgIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); +static void dc390_MsgIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_DataOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_DataInPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus); -void dc390_CommandPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus); +static void dc390_CommandPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_StatusPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus); -void dc390_MsgOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus); +static void dc390_MsgOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_MsgInPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_Nop_0( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_Nop_1( PACB pACB, PSRB pSRB, PUCHAR psstatus); static void dc390_SetXferRate( PACB pACB, PDCB pDCB ); -void dc390_Disconnect( PACB pACB ); -void dc390_Reselect( PACB pACB ); -void dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB ); -void dc390_DoingSRB_Done( PACB pACB, PSCSICMD cmd ); +static void dc390_Disconnect( PACB pACB ); +static void dc390_Reselect( PACB pACB ); +static void dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB ); +static void dc390_DoingSRB_Done( PACB pACB, PSCSICMD cmd ); static void dc390_ScsiRstDetect( PACB pACB ); static void dc390_ResetSCSIBus( PACB pACB ); static void __inline__ dc390_RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB ); static void __inline__ dc390_InvalidCmd( PACB pACB ); static void __inline__ dc390_EnableMsgOut_Abort (PACB, PSRB); static void dc390_remove_dev (PACB pACB, PDCB pDCB); -irqreturn_t do_DC390_Interrupt( int, void *, struct pt_regs *); +static irqreturn_t do_DC390_Interrupt( int, void *, struct pt_regs *); -int dc390_initAdapter( PSH psh, ULONG io_port, UCHAR Irq, UCHAR index ); -void dc390_initDCB( PACB pACB, PDCB *ppDCB, UCHAR id, UCHAR lun); -void dc390_updateDCB (PACB pACB, PDCB pDCB); +static int dc390_initAdapter( PSH psh, ULONG io_port, UCHAR Irq, UCHAR index ); +static void dc390_initDCB( PACB pACB, PDCB *ppDCB, UCHAR id, UCHAR lun); +static void dc390_updateDCB (PACB pACB, PDCB pDCB); static int DC390_release(struct Scsi_Host *host); static int dc390_shutdown (struct Scsi_Host *host); - -//static PSHT dc390_pSHT_start = NULL; -//static PSH dc390_pSH_start = NULL; -//static PSH dc390_pSH_current = NULL; static PACB dc390_pACB_start= NULL; static PACB dc390_pACB_current = NULL; static ULONG dc390_lastabortedpid = 0; @@ -372,14 +350,11 @@ static UCHAR dc390_adapterCnt = 0; /* Startup values, to be overriden on the commandline */ -int tmscsim[] = {-2, -2, -2, -2, -2, -2}; +static int tmscsim[] = {-2, -2, -2, -2, -2, -2}; -# if defined(MODULE) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,30) +#if defined(MODULE) MODULE_PARM(tmscsim, "1-6i"); MODULE_PARM_DESC(tmscsim, "Host SCSI ID, Speed (0=10MHz), Device Flags, Adapter Flags, Max Tags (log2(tags)-1), DelayReset (s)"); -# endif - -#if defined(MODULE) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,30) MODULE_AUTHOR("C.L. Huang / Kurt Garloff"); MODULE_DESCRIPTION("SCSI host adapter driver for Tekram DC390 and other AMD53C974A based PCI SCSI adapters"); MODULE_LICENSE("GPL"); @@ -438,22 +413,15 @@ #endif /* Devices erroneously pretending to be able to do TagQ */ -UCHAR dc390_baddevname1[2][28] ={ +static UCHAR dc390_baddevname1[2][28] ={ "SEAGATE ST3390N 9546", "HP C3323-300 4269"}; #define BADDEVCNT 2 static char* dc390_adapname = "DC390"; -UCHAR dc390_eepromBuf[MAX_ADAPTER_NUM][EE_LEN]; -UCHAR dc390_clock_period1[] = {4, 5, 6, 7, 8, 10, 13, 20}; -UCHAR dc390_clock_speed[] = {100,80,67,57,50, 40, 31, 20}; - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,30) -struct proc_dir_entry DC390_proc_scsi_tmscsim ={ - PROC_SCSI_DC390T, 7 ,"tmscsim", - S_IFDIR | S_IRUGO | S_IXUGO, 2 - }; -#endif +static UCHAR dc390_eepromBuf[MAX_ADAPTER_NUM][EE_LEN]; +static UCHAR dc390_clock_period1[] = {4, 5, 6, 7, 8, 10, 13, 20}; +static UCHAR dc390_clock_speed[] = {100,80,67,57,50, 40, 31, 20}; /*********************************************************************** * Functions for access to DC390 EEPROM @@ -518,7 +486,7 @@ } -int __initdata tmscsim_def[] = {7, 0 /* 10MHz */, +static int __initdata tmscsim_def[] = {7, 0 /* 10MHz */, PARITY_CHK_ | SEND_START_ | EN_DISCONNECT_ | SYNC_NEGO_ | TAG_QUEUEING_, MORE2_DRV | GREATER_1G | RST_SCSI_BUS | ACTIVE_NEGATION @@ -549,8 +517,7 @@ /* Override defaults on cmdline: * tmscsim: AdaptID, MaxSpeed (Index), DevMode (Bitmapped), AdaptMode (Bitmapped) */ -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,13) -int __init dc390_setup (char *str) +static int __init dc390_setup (char *str) { int ints[8]; int i, im; @@ -570,24 +537,6 @@ __setup("tmscsim=", dc390_setup); #endif -#else -void __init dc390_setup (char *str, int *ints) -{ - int i, im; - im = ints[0]; - if (im > 6) - { - printk (KERN_NOTICE "DC390: ignore extra params!\n"); - im = 6; - } - for (i = 0; i < im; i++) - tmscsim[i] = ints[i+1]; - /* dc390_checkparams (); */ -} -#endif - - - static void __init dc390_EEpromOutDI( PDEVDECL, PUCHAR regval, UCHAR Carry ) { UCHAR bval; @@ -751,37 +700,6 @@ return q; } #endif - - -/* Append to Query List */ -static void dc390_Query_append( PSCSICMD cmd, PACB pACB ) -{ - dc390_cmd_scp_t *cmdq = (dc390_cmd_scp_t *)&cmd->SCp; - - DEBUG0(printk ("DC390: Append cmd %li to Query\n", cmd->pid)); - - list_add_tail(&cmdq->list, &pACB->cmdq); - pACB->QueryCnt++; - pACB->CmdOutOfSRB++; -} - - -/* Return next cmd from Query list */ -static PSCSICMD dc390_Query_get ( PACB pACB ) -{ - PSCSICMD pcmd; - dc390_cmd_scp_t *cmdq; - if (list_empty(&pACB->cmdq)) - return NULL; - - pcmd = (PSCSICMD) list_entry(pACB->cmdq.next, struct scsi_cmnd_list, scp.list); - DEBUG0(printk ("DC390: Get cmd %li from Query\n", pcmd->pid)); - cmdq = (dc390_cmd_scp_t *)&pcmd->SCp; - list_del(&cmdq->list); - pACB->QueryCnt--; - return pcmd; -} - /* Return next free SRB */ static __inline__ PSRB dc390_Free_get ( PACB pACB ) @@ -891,17 +809,7 @@ dc390_Going_append (pDCB, pSRB); } -/* 2.0 timer compatibility */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,30) - static inline int timer_pending(struct timer_list * timer) - { - return timer->prev != NULL; - } - #define time_after(a,b) ((long)(b) - (long)(a) < 0) - #define time_before(a,b) time_after(b,a) -#endif - -void DC390_waiting_timed_out (unsigned long ptr); +static void DC390_waiting_timed_out (unsigned long ptr); /* Sets the timer to wake us up */ static void dc390_waiting_timer (PACB pACB, unsigned long to) { @@ -954,16 +862,13 @@ } /* Wake up waiting queue */ -void DC390_waiting_timed_out (unsigned long ptr) +static void DC390_waiting_timed_out (unsigned long ptr) { PACB pACB = (PACB)ptr; DC390_IFLAGS; - DC390_AFLAGS; DEBUG0(printk ("DC390: Debug: Waiting queue woken up by timer!\n")); DC390_LOCK_IO(pACB->pScsiHost); - DC390_LOCK_ACB; dc390_Waiting_process (pACB); - DC390_UNLOCK_ACB; DC390_UNLOCK_IO(pACB->pScsiHost); } @@ -1022,7 +927,7 @@ pci_map_page(pdev, virt_to_page(pcmd->sense_buffer), (unsigned long)pcmd->sense_buffer & ~PAGE_MASK, sizeof(pcmd->sense_buffer), DMA_FROM_DEVICE); - pSRB->Segmentx.length = sizeof(pcmd->sense_buffer); + sg_dma_len(&pSRB->Segmentx) = sizeof(pcmd->sense_buffer); pSRB->SGcount = 1; pSRB->pSegmentList = (PSGL) &pSRB->Segmentx; DEBUG1(printk("%s(): Mapped sense buffer %p at %x\n", __FUNCTION__, pcmd->sense_buffer, cmdp->saved_dma_handle)); @@ -1043,7 +948,7 @@ (unsigned long)pcmd->request_buffer & ~PAGE_MASK, pcmd->request_bufflen, scsi_to_pci_dma_dir(pcmd->sc_data_direction)); /* TODO: error handling */ - pSRB->Segmentx.length = pcmd->request_bufflen; + sg_dma_len(&pSRB->Segmentx) = pcmd->request_bufflen; pSRB->SGcount = 1; pSRB->pSegmentList = (PSGL) &pSRB->Segmentx; DEBUG1(printk("%s(): Mapped request buffer %p at %x\n", __FUNCTION__, pcmd->request_buffer, cmdp->saved_dma_handle)); @@ -1113,37 +1018,6 @@ /* KG: deferred PCI mapping to dc390_StartSCSI */ } -/* Put cmnd from Query to Waiting list and send next Waiting cmnd */ -static void dc390_Query_to_Waiting (PACB pACB) -{ - Scsi_Cmnd *pcmd; - PSRB pSRB; - PDCB pDCB; - - if( pACB->ACBFlag & (RESET_DETECT+RESET_DONE+RESET_DEV) ) - return; - - while (pACB->QueryCnt) - { - pSRB = dc390_Free_get ( pACB ); - if (!pSRB) return; - pcmd = dc390_Query_get ( pACB ); - if (!pcmd) { dc390_Free_insert (pACB, pSRB); return; } /* should not happen */ - pDCB = dc390_findDCB (pACB, pcmd->device->id, pcmd->device->lun); - if (!pDCB) - { - dc390_Free_insert (pACB, pSRB); - printk (KERN_ERR "DC390: Command in queue to non-existing device!\n"); - pcmd->result = MK_RES(DRIVER_ERROR,DID_ERROR,0,0); - DC390_UNLOCK_ACB_NI; - pcmd->done (pcmd); - DC390_LOCK_ACB_NI; - } - dc390_BuildSRB (pcmd, pDCB, pSRB); - dc390_Waiting_append ( pDCB, pSRB ); - } -} - /*********************************************************************** * Function : static int DC390_queue_command (Scsi_Cmnd *cmd, * void (*done)(Scsi_Cmnd *)) @@ -1163,24 +1037,17 @@ * ***********************************************************************/ -int DC390_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *)) +static int DC390_queue_command (Scsi_Cmnd *cmd, void (* done)(Scsi_Cmnd *)) { PDCB pDCB; PSRB pSRB; PACB pACB = (PACB) cmd->device->host->hostdata; - DC390_AFLAGS; - DEBUG0(/* if(pACB->scan_devices) */ \ printk(KERN_INFO "DC390: Queue Cmd=%02x,Tgt=%d,LUN=%d (pid=%li), buffer=%p\n",\ cmd->cmnd[0],cmd->device->id,cmd->device->lun,cmd->pid, cmd->buffer)); - DC390_LOCK_ACB; - - /* Assume BAD_TARGET; will be cleared later */ - cmd->result = DID_BAD_TARGET << 16; - - /* TODO: Change the policy: Alway accept TEST_UNIT_READY or INQUIRY + /* TODO: Change the policy: Always accept TEST_UNIT_READY or INQUIRY * commands and alloc a DCB for the device if not yet there. DCB will * be removed in dc390_SRBdone if SEL_TIMEOUT */ @@ -1190,17 +1057,6 @@ else if( (pACB->scan_devices) && (cmd->cmnd[0] == READ_6) ) pACB->scan_devices = 0; - if ( ( cmd->device->id >= pACB->pScsiHost->max_id ) || - (cmd->device->lun >= pACB->pScsiHost->max_lun) ) - { -/* printk ("DC390: Ignore target %d lun %d\n", - cmd->device->id, cmd->device->lun); */ - DC390_UNLOCK_ACB; - //return (1); - done (cmd); - return (0); - } - if( (pACB->scan_devices || cmd->cmnd[0] == TEST_UNIT_READY || cmd->cmnd[0] == INQUIRY) && !(pACB->DCBmap[cmd->device->id] & (1 << cmd->device->lun)) ) { @@ -1211,14 +1067,7 @@ { printk (KERN_ERR "DC390: kmalloc for DCB failed, target %02x lun %02x\n", cmd->device->id, cmd->device->lun); - DC390_UNLOCK_ACB; - printk ("DC390: No DCB in queue_command!\n"); -#ifdef USE_NEW_EH - return (1); -#else - done (cmd); - return (0); -#endif + goto fail; } } @@ -1226,10 +1075,7 @@ { printk(KERN_INFO "DC390: Ignore target %02x lun %02x\n", cmd->device->id, cmd->device->lun); - DC390_UNLOCK_ACB; - //return (1); - done (cmd); - return (0); + goto fail; } else { @@ -1238,60 +1084,34 @@ { /* should never happen */ printk (KERN_ERR "DC390: no DCB failed, target %02x lun %02x\n", cmd->device->id, cmd->device->lun); - DC390_UNLOCK_ACB; - printk ("DC390: No DCB in queuecommand (2)!\n"); -#ifdef USE_NEW_EH - return (1); -#else - done (cmd); - return (0); -#endif + goto fail; } } pACB->Cmds++; cmd->scsi_done = done; cmd->result = 0; - - dc390_Query_to_Waiting (pACB); - if( pACB->QueryCnt ) /* Unsent commands ? */ - { - DEBUG0(printk ("DC390: QueryCnt != 0\n")); - dc390_Query_append ( cmd, pACB ); - dc390_Waiting_process (pACB); - } - else if (pDCB->pWaitingSRB) - { - pSRB = dc390_Free_get ( pACB ); - DEBUG0(if (!pSRB) printk ("DC390: No free SRB but Waiting\n"); else printk ("DC390: Free SRB w/ Waiting\n")); - if (!pSRB) dc390_Query_append (cmd, pACB); - else - { - dc390_BuildSRB (cmd, pDCB, pSRB); - dc390_Waiting_append (pDCB, pSRB); - } - dc390_Waiting_process (pACB); - } - else - { - pSRB = dc390_Free_get ( pACB ); - DEBUG0(if (!pSRB) printk ("DC390: No free SRB w/o Waiting\n"); else printk ("DC390: Free SRB w/o Waiting\n")); - if (!pSRB) - { - dc390_Query_append (cmd, pACB); - dc390_Waiting_process (pACB); - } - else - { - dc390_BuildSRB (cmd, pDCB, pSRB); - dc390_SendSRB (pACB, pSRB); - } - } + pSRB = dc390_Free_get(pACB); + if (!pSRB) + goto requeue; + + dc390_BuildSRB(cmd, pDCB, pSRB); + if (pDCB->pWaitingSRB) { + dc390_Waiting_append(pDCB, pSRB); + dc390_Waiting_process(pACB); + } else + dc390_SendSRB(pACB, pSRB); - DC390_UNLOCK_ACB; DEBUG1(printk (KERN_DEBUG " ... command (pid %li) queued successfully.\n", cmd->pid)); return(0); + + requeue: + return 1; + fail: + cmd->result = DID_BAD_TARGET << 16; + done(cmd); + return 0; } /* We ignore mapping problems, as we expect everybody to respect @@ -1384,8 +1204,8 @@ * Note: * In contrary to other externally callable funcs (DC390_), we don't lock ***********************************************************************/ -int DC390_bios_param (struct scsi_device *sdev, struct block_device *bdev, - sector_t capacity, int geom[]) +static int DC390_bios_param (struct scsi_device *sdev, struct block_device *bdev, + sector_t capacity, int geom[]) { int heads, sectors, cylinders; PACB pACB = (PACB) sdev->host->hostdata; @@ -1421,15 +1241,14 @@ return (0); } #else -int DC390_bios_param (struct scsi_device *sdev, struct block_device *bdev, - sector_t capacity, int geom[]) +static int DC390_bios_param (struct scsi_device *sdev, struct block_device *bdev, + sector_t capacity, int geom[]) { return scsicam_bios_param (bdev, capacity, geom); } #endif - -void dc390_dumpinfo (PACB pACB, PDCB pDCB, PSRB pSRB) +static void dc390_dumpinfo (PACB pACB, PDCB pDCB, PSRB pSRB) { USHORT pstat; PDEVDECL1; if (!pDCB) pDCB = pACB->pActiveDCB; @@ -1483,7 +1302,7 @@ * Status: Buggy ! ***********************************************************************/ -int DC390_abort (Scsi_Cmnd *cmd) +static int DC390_abort (Scsi_Cmnd *cmd) { PDCB pDCB; PSRB pSRB, psrb; @@ -1491,28 +1310,10 @@ int status; //ULONG sbac; PACB pACB = (PACB) cmd->device->host->hostdata; - DC390_AFLAGS; - - DC390_LOCK_ACB; printk ("DC390: Abort command (pid %li, Device %02i-%02i)\n", cmd->pid, cmd->device->id, cmd->device->lun); - /* First scan Query list */ - if( pACB->QueryCnt ) - { - struct scsi_cmnd_list *t, *pcmd_l; - list_for_each_entry_safe(pcmd_l, t, &pACB->cmdq, scp.list) - if( (struct scsi_cmnd*)pcmd_l == cmd ) - { - /* Found: Dequeue */ - list_del(&pcmd_l->scp.list); - pACB->QueryCnt--; - status = SCSI_ABORT_SUCCESS; - goto ABO_X; - } - } - pDCB = dc390_findDCB (pACB, cmd->device->id, cmd->device->lun); if( !pDCB ) goto NOT_RUN; @@ -1625,7 +1426,6 @@ } #endif dc390_lastabortedpid = cmd->pid; - DC390_UNLOCK_ACB; //do_DC390_Interrupt (pACB->IRQLevel, 0, 0); #ifndef USE_NEW_EH if (status == SCSI_ABORT_SUCCESS) cmd->scsi_done(cmd); @@ -1708,15 +1508,13 @@ * Returns : 0 on success. ***********************************************************************/ -int DC390_reset (Scsi_Cmnd *cmd) +static int DC390_reset (Scsi_Cmnd *cmd) { UCHAR bval; PACB pACB = (PACB) cmd->device->host->hostdata; - DC390_AFLAGS; printk(KERN_INFO "DC390: RESET ... "); - DC390_LOCK_ACB; if (timer_pending (&pACB->Waiting_Timer)) del_timer (&pACB->Waiting_Timer); bval = DC390_read8 (CtrlReg1); bval |= DIS_INT_ON_SCSI_RST; @@ -1745,7 +1543,6 @@ dc390_Waiting_process( pACB ); printk("done\n"); - DC390_UNLOCK_ACB; return( SCSI_RESET_SUCCESS ); } @@ -1760,14 +1557,14 @@ * Inputs : SCSI id and lun ***********************************************************************/ -void dc390_initDCB( PACB pACB, PDCB *ppDCB, UCHAR id, UCHAR lun ) +static void dc390_initDCB( PACB pACB, PDCB *ppDCB, UCHAR id, UCHAR lun ) { PEEprom prom; UCHAR index; PDCB pDCB, pDCB2; pDCB = kmalloc (sizeof(DC390_DCB), GFP_ATOMIC); - DCBDEBUG(printk (KERN_INFO "DC390: alloc mem for DCB (ID %i, LUN %i): %p\n" \ + DCBDEBUG(printk (KERN_INFO "DC390: alloc mem for DCB (ID %i, LUN %i): %p\n", \ id, lun, pDCB)); *ppDCB = pDCB; @@ -1845,7 +1642,7 @@ * Purpose : Set the configuration dependent DCB parameters ***********************************************************************/ -void dc390_updateDCB (PACB pACB, PDCB pDCB) +static void dc390_updateDCB (PACB pACB, PDCB pDCB) { pDCB->SyncMode &= EN_TAG_QUEUEING | SYNC_NEGO_DONE /*| EN_ATN_STOP*/; if (pDCB->DevMode & TAG_QUEUEING_) { @@ -1869,25 +1666,6 @@ pDCB->CtrlR1 |= PARITY_ERR_REPO; } - -/*********************************************************************** - * Function : static void dc390_updateDCBs () - * - * Purpose : Set the configuration dependent DCB params for all DCBs - ***********************************************************************/ - -static void dc390_updateDCBs (PACB pACB) -{ - int i; - PDCB pDCB = pACB->pLinkDCB; - for (i = 0; i < pACB->DCBCnt; i++) - { - dc390_updateDCB (pACB, pDCB); - pDCB = pDCB->pNextDCB; - } -} - - /*********************************************************************** * Function : static void dc390_initSRB() * @@ -1902,7 +1680,7 @@ } -void dc390_linkSRB( PACB pACB ) +static void dc390_linkSRB( PACB pACB ) { UINT count, i; @@ -1927,11 +1705,10 @@ * io_port, Irq, index: Resources and adapter index ***********************************************************************/ -void __init dc390_initACB (PSH psh, ULONG io_port, UCHAR Irq, UCHAR index) +static void __init dc390_initACB (PSH psh, ULONG io_port, UCHAR Irq, UCHAR index) { PACB pACB; UCHAR i; - DC390_AFLAGS; psh->can_queue = MAX_CMD_QUEUE; psh->cmd_per_lun = MAX_CMD_PER_LUN; @@ -1939,11 +1716,7 @@ psh->io_port = io_port; psh->n_io_port = 0x80; psh->irq = Irq; -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,50) psh->base = io_port; -#else - psh->base = (char*)io_port; -#endif psh->unique_id = io_port; psh->dma_channel = -1; psh->last_reset = jiffies; @@ -1970,8 +1743,6 @@ pACB->pActiveDCB = NULL; pACB->pFreeSRB = pACB->SRB_array; pACB->SRBCount = MAX_SRB_CNT; - pACB->QueryCnt = 0; - INIT_LIST_HEAD(&pACB->cmdq); pACB->AdapterIndex = index; pACB->status = 0; psh->this_id = dc390_eepromBuf[index][EE_ADAPT_SCSI_ID]; @@ -2007,7 +1778,7 @@ * Outputs: 0 on success, -1 on error ***********************************************************************/ -int __init dc390_initAdapter (PSH psh, ULONG io_port, UCHAR Irq, UCHAR index) +static int __init dc390_initAdapter (PSH psh, ULONG io_port, UCHAR Irq, UCHAR index) { PACB pACB, pACB2; UCHAR dstate; @@ -2086,7 +1857,7 @@ * Inputs : host - pointer to this host adapter's structure * io_port - IO ports mapped to this adapter * Irq - IRQ assigned to this adpater - * PDEVDECL - PCI access handle + * struct pci_dev - PCI access handle * index - Adapter index * * Outputs: 0 on success, -1 on error @@ -2095,12 +1866,11 @@ * not in DC390_detect, called from outside ***********************************************************************/ -static int __init DC390_init (PSHT psht, ULONG io_port, UCHAR Irq, PDEVDECL, UCHAR index) +static int __init DC390_init (PSHT psht, ULONG io_port, UCHAR Irq, struct pci_dev *pdev, UCHAR index) { PSH psh; PACB pACB; - DC390_AFLAGS; - + if (dc390_CheckEEpromCheckSum (PDEV, index)) { int speed; @@ -2126,21 +1896,6 @@ scsi_set_device(psh, &pdev->dev); pACB = (PACB) psh->hostdata; - DC390_LOCKA_INIT; - DC390_LOCK_ACB; - -#if 0 - if( !dc390_pSH_start ) - { - dc390_pSH_start = psh; - dc390_pSH_current = psh; - } - else - { - dc390_pSH_current->next = psh; - dc390_pSH_current = psh; - } -#endif DEBUG0(printk(KERN_INFO "DC390: pSH = %8x, Index %02i\n", (UINT) psh, index)); @@ -2154,59 +1909,15 @@ (UINT) pACB, (UINT) pACB->DCBmap, (UINT) pACB->SRB_array)); DEBUG0(printk("DC390: ACB size= %4x, DCB size= %4x, SRB size= %4x\n",\ sizeof(DC390_ACB), sizeof(DC390_DCB), sizeof(DC390_SRB) )); - - DC390_UNLOCK_ACB; return (0); } else { - //dc390_pSH_start = NULL; scsi_unregister( psh ); - DC390_UNLOCK_ACB; return( -1 ); } } - -/*********************************************************************** - * Function : int DC390_detect(Scsi_Host_Template *psht) - * - * Purpose : detects and initializes AMD53C974 SCSI chips - * that were autoprobed, overridden on the LILO command line, - * or specified at compile time. - * - * Inputs : psht - template for this SCSI adapter - * - * Returns : number of host adapters detected - * - ***********************************************************************/ - -#ifndef NEW_PCI -/* Acc. to PCI 2.1 spec it's up to the driver to enable Bus mastering: - * We use pci_set_master () for 2.1.x and this func for 2.0.x: */ -static void __init dc390_set_master (PDEVDECL) -{ - USHORT cmd; - UCHAR lat; - - PCI_READ_CONFIG_WORD (PDEV, PCI_COMMAND, &cmd); - - if (! (cmd & PCI_COMMAND_MASTER)) { - printk("PCI: Enabling bus mastering for device %02x:%02x\n", - PCI_BUS_DEV); - cmd |= PCI_COMMAND_MASTER; - PCI_WRITE_CONFIG_WORD(PDEV, PCI_COMMAND, cmd); - } - PCI_READ_CONFIG_BYTE (PDEV, PCI_LATENCY_TIMER, &lat); - if (lat < 16 /* || lat == 255 */) { - printk("PCI: Setting latency timer of device %02x:%02x from %i to 64\n", - PCI_BUS_DEV, lat); - PCI_WRITE_CONFIG_BYTE(PDEV, PCI_LATENCY_TIMER, 64); - } - -} -#endif /* ! NEW_PCI */ - static void __init dc390_set_pci_cfg (PDEVDECL) { USHORT cmd; @@ -2215,30 +1926,31 @@ PCI_WRITE_CONFIG_WORD (PDEV, PCI_COMMAND, cmd); PCI_WRITE_CONFIG_WORD (PDEV, PCI_STATUS, (PCI_STATUS_SIG_SYSTEM_ERROR | PCI_STATUS_DETECTED_PARITY)); } - int __init DC390_detect (Scsi_Host_Template *psht) { - PDEVDECL0; + struct pci_dev *pdev = NULL; UCHAR irq; ULONG io_port; - //dc390_pSHT_start = psht; dc390_pACB_start = NULL; if ( PCI_PRESENT ) - while (PCI_FIND_DEVICE (PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD53C974)) + while ((pdev = pci_find_device(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD53C974, pdev))) { -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,30) if (pci_enable_device (pdev)) continue; -#endif + + if (pci_set_dma_mask(pdev, 0xffffffff)) { + printk(KERN_ERR "DC390(%i): No suitable DMA available.\n", dc390_adapterCnt); + continue; + } PCI_GET_IO_AND_IRQ; DEBUG0(printk(KERN_INFO "DC390(%i): IO_PORT=%04x,IRQ=%x\n", dc390_adapterCnt, (UINT) io_port, irq)); if( !DC390_init(psht, io_port, irq, PDEV, dc390_adapterCnt)) { - PCI_SET_MASTER; + pci_set_master(pdev); dc390_set_pci_cfg (PDEV); dc390_adapterCnt++; } @@ -2247,495 +1959,12 @@ printk (KERN_ERR "DC390: No PCI BIOS found!\n"); if (dc390_adapterCnt) -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,30) psht->proc_name = "tmscsim"; -#else - psht->proc_dir = &DC390_proc_scsi_tmscsim; -#endif + printk(KERN_INFO "DC390: %i adapters found\n", dc390_adapterCnt); return( dc390_adapterCnt ); } - -/*********************************************************************** - * Functions: dc390_inquiry(), dc390_inquiry_done() - * - * Purpose: When changing speed etc., we have to issue an INQUIRY - * command to make sure, we agree upon the nego parameters - * with the device - ***********************************************************************/ - -static void dc390_inquiry_done (Scsi_Cmnd* cmd) -{ - printk (KERN_INFO "DC390: INQUIRY (ID %02x LUN %02x) returned %08x\n", - cmd->device->id, cmd->device->lun, cmd->result); - if (cmd->result) - { - PACB pACB = (PACB)cmd->device->host->hostdata; - PDCB pDCB = dc390_findDCB (pACB, cmd->device->id, cmd->device->lun); - printk ("DC390: Unsetting DsCn, Sync and TagQ!\n"); - if (pDCB) - { - pDCB->DevMode &= ~(SYNC_NEGO_ | TAG_QUEUEING_ | EN_DISCONNECT_ ); - dc390_updateDCB (pACB, pDCB); - } - } - kfree (cmd); -} - -void dc390_inquiry (PACB pACB, PDCB pDCB) -{ - char* buffer; - Scsi_Cmnd* cmd; - cmd = kmalloc (sizeof(Scsi_Cmnd) + 256, GFP_ATOMIC); - if (!cmd) { printk ("DC390: kmalloc failed in inquiry!\n"); return; } - buffer = (char*)cmd + sizeof(Scsi_Cmnd); - - memset (cmd, 0, sizeof(Scsi_Cmnd) + 256); - cmd->cmnd[0] = INQUIRY; - cmd->cmnd[1] = (pDCB->TargetLUN << 5) & 0xe0; - cmd->cmnd[4] = 0xff; - - cmd->cmd_len = 6; cmd->old_cmd_len = 6; -/* TODO FIXME */ -/* cmd->host = pACB->pScsiHost; */ - cmd->device->id = pDCB->TargetID; - cmd->device->lun = pDCB->TargetLUN; - cmd->serial_number = 1; - cmd->pid = 390; - cmd->bufflen = 128; - cmd->buffer = buffer; - cmd->request_bufflen = 128; - cmd->request_buffer = &buffer[128]; - cmd->done = dc390_inquiry_done; - cmd->scsi_done = dc390_inquiry_done; - cmd->timeout_per_command = HZ; - - cmd->request->rq_status = RQ_SCSI_BUSY; - - pDCB->SyncMode &= ~SYNC_NEGO_DONE; - printk (KERN_INFO "DC390: Queue INQUIRY command to dev ID %02x LUN %02x\n", - pDCB->TargetID, pDCB->TargetLUN); - DC390_queue_command (cmd, dc390_inquiry_done); -} - -/*********************************************************************** - * Functions: dc390_sendstart(), dc390_sendstart_done() - * - * Purpose: When changing speed etc., we have to issue an INQUIRY - * command to make sure, we agree upon the nego parameters - * with the device - ***********************************************************************/ - -static void dc390_sendstart_done (Scsi_Cmnd* cmd) -{ - printk (KERN_INFO "DC390: SENDSTART (ID %02x LUN %02x) returned %08x\n", - cmd->device->id, cmd->device->lun, cmd->result); - kfree (cmd); -} - -void dc390_sendstart (PACB pACB, PDCB pDCB) -{ - char* buffer; - Scsi_Cmnd* cmd; - cmd = kmalloc (sizeof(Scsi_Cmnd) + 256, GFP_ATOMIC); - if (!cmd) { printk ("DC390: kmalloc failed in sendstart!\n"); return; } - buffer = (char*)cmd + sizeof(Scsi_Cmnd); - - memset (cmd, 0, sizeof(Scsi_Cmnd) + 256); - cmd->cmnd[0] = 0x1b; /* START_STOP_UNIT */ - cmd->cmnd[1] = (pDCB->TargetLUN << 5) & 0xe0; - cmd->cmnd[4] = 0x01; /* START */ - - cmd->cmd_len = 6; cmd->old_cmd_len = 6; -/* TODO FIXME */ -/* cmd->host = pACB->pScsiHost; */ - cmd->device->id = pDCB->TargetID; - cmd->device->lun = pDCB->TargetLUN; - cmd->serial_number = 1; - cmd->pid = 310; - cmd->bufflen = 128; - cmd->buffer = buffer; - cmd->request_bufflen = 128; - cmd->request_buffer = &buffer[128]; - cmd->done = dc390_sendstart_done; - cmd->scsi_done = dc390_sendstart_done; - cmd->timeout_per_command = 5*HZ; - - cmd->request->rq_status = RQ_SCSI_BUSY; - - pDCB->SyncMode &= ~SYNC_NEGO_DONE; - printk (KERN_INFO "DC390: Queue SEND_START command to dev ID %02x LUN %02x\n", - pDCB->TargetID, pDCB->TargetLUN); - DC390_queue_command (cmd, dc390_sendstart_done); -} - -/******************************************************************** - * Function: dc390_set_info() - * - * Purpose: Change adapter config - * - * Strings are parsed similar to the output of tmscsim_proc_info () - * '-' means no change - *******************************************************************/ - -static int dc390_scanf (char** buffer, char** pos, char** p0, int* var) -{ - *p0 = *pos; - *var = simple_strtoul (*p0, pos, 10); - if (*p0 == *pos) return -1; - *pos = strsep (buffer, " \t\n:=,;."); - return 0; -} - -#define SCANF(buffer, pos, p0, var, min, max) \ -if (dc390_scanf (&buffer, &pos, &p0, &var)) goto einv; \ -else if (var<min || var>max) goto einv2 - -static int dc390_yesno (char** buffer, char** pos, char* var, char bmask) -{ - switch (**pos) - { - case 'Y': *var |= bmask; break; - case 'N': *var &= ~bmask; break; - case '-': break; - default: return -1; - } - *pos = strsep (buffer, " \t\n:=,;"); - return 0; -} - -#define YESNO(buffer, pos, var, bmask) \ - if (dc390_yesno (&buffer, &pos, &var, bmask)) goto einv; \ - else dc390_updateDCB (pACB, pDCB); \ - if (!pos) goto ok - -static int dc390_search (char** buffer, char** pos, char** p0, char* var, char* txt, int max, int scale, char* ign) -{ - int dum; - if (! memcmp (*pos, txt, strlen(txt))) - { - *p0 = strsep (buffer, " \t\n:=,;"); - if (!*p0) return -1; - dum = simple_strtoul (*p0, pos, 10); - if (*p0 == *pos) return -1; - if (dum >= 0 && dum <= max) - { *var = (dum * 100) / scale; } - else return -2; - *pos = strsep (buffer, " \t\n:=,;"); - if (*ign && *pos && strlen(*pos) >= strlen(ign) && - !(memcmp (*pos, ign, strlen(ign)))) - *pos = strsep (buffer, " \t\n:=,;"); - - } - return 0; -} - -#define SEARCH(buffer, pos, p0, var, txt, max) \ -if (dc390_search (&buffer, &pos, &p0, (PUCHAR)(&var), txt, max, 100, "")) goto einv2; \ -else if (!p1) goto ok2 - -#define SEARCH2(buffer, pos, p0, var, txt, max, scale) \ -if (dc390_search (&buffer, &pos, &p0, &var, txt, max, scale, "")) goto einv2; \ -else if (!p1) goto ok2 - -#define SEARCH3(buffer, pos, p0, var, txt, max, scale, ign) \ -if (dc390_search (&buffer, &pos, &p0, &var, txt, max, scale, ign)) goto einv2; \ -else if (!p1) goto ok2 - - -#ifdef DC390_PARSEDEBUG -static char _prstr[256]; -char* prstr (char* p, char* e) -{ - char* c = _prstr; - while (p < e) - if (*p == 0) { *c++ = ':'; p++; } - else if (*p == 10) { *c++ = '\\'; *c++ = 'n'; p++; } - else *c++ = *p++; - *c = 0; - return _prstr; -} -#endif - -int dc390_set_info (char *buffer, int length, PACB pACB) -{ - char *pos = buffer, *p0 = buffer; - char needs_inquiry = 0; - int dum = 0; - char dev; - PDCB pDCB = pACB->pLinkDCB; - DC390_IFLAGS; - DC390_AFLAGS; - pos[length] = 0; - - DC390_LOCK_IO(pACB->pScsiHost); - DC390_LOCK_ACB; - /* UPPERCASE */ - /* Don't use kernel toupper, because of 2.0.x bug: ctmp unexported */ - while (*pos) - { if (*pos >='a' && *pos <= 'z') *pos = *pos + 'A' - 'a'; pos++; } - - /* Remove WS */ - pos = strsep (&buffer, " \t:\n=,;"); - if (!*pos) goto ok; - - next: - if (!memcmp (pos, "RESET", 5)) goto reset; - else if (!memcmp (pos, "INQUIRY", 7)) goto inquiry; - else if (!memcmp (pos, "REMOVE", 6)) goto remove; - else if (!memcmp (pos, "ADD", 3)) goto add; - else if (!memcmp (pos, "START", 5)) goto start; - else if (!memcmp (pos, "DUMP", 4)) goto dump; - - if (isdigit (*pos)) - { - /* Device config line */ - int dev, id, lun; char* pdec; - char olddevmode; - - SCANF (buffer, pos, p0, dev, 0, pACB->DCBCnt-1); - if (*pos) { SCANF (buffer, pos, p0, id, 0, 7); } else goto einv; - if (*pos) { SCANF (buffer, pos, p0, lun, 0, 7); } else goto einv; - if (!*pos) goto einv; - - PARSEDEBUG(printk (KERN_INFO "DC390: config line %i %i %i:\"%s\"\n", dev, id, lun, prstr (pos, &buffer[length]))); - pDCB = pACB->pLinkDCB; - for (dum = 0; dum < dev; dum++) pDCB = pDCB->pNextDCB; - /* Sanity Check */ - if (pDCB->TargetID != id || pDCB->TargetLUN != lun) - { - printk (KERN_ERR "DC390: no such device: Idx=%02i ID=%02i LUN=%02i\n", - dev, id, lun); - goto einv2; - } - - if (pDCB->pWaitingSRB || pDCB->pGoingSRB) - { - printk ("DC390: Cannot change dev (%i-%i) cfg: Pending requests\n", - pDCB->TargetID, pDCB->TargetLUN); - goto einv; - } - - olddevmode = pDCB->DevMode; - YESNO (buffer, pos, pDCB->DevMode, PARITY_CHK_); - needs_inquiry++; - YESNO (buffer, pos, pDCB->DevMode, SYNC_NEGO_); - if ((olddevmode & SYNC_NEGO_) == (pDCB->DevMode & SYNC_NEGO_)) needs_inquiry--; - needs_inquiry++; - YESNO (buffer, pos, pDCB->DevMode, EN_DISCONNECT_); - if ((olddevmode & EN_DISCONNECT_) == (pDCB->DevMode & EN_DISCONNECT_)) needs_inquiry--; - YESNO (buffer, pos, pDCB->DevMode, SEND_START_); - needs_inquiry++; - YESNO (buffer, pos, pDCB->DevMode, TAG_QUEUEING_); - if ((olddevmode & TAG_QUEUEING_) == (pDCB->DevMode & TAG_QUEUEING_)) needs_inquiry--; - - dc390_updateDCB (pACB, pDCB); - if (!*pos) goto ok; - - olddevmode = pDCB->NegoPeriod; - /* Look for decimal point (Speed) */ - pdec = pos; - while (pdec++ < &buffer[length]) if (*pdec == '.') break; - /* NegoPeriod */ - if (*pos != '-') - { - SCANF (buffer, pos, p0, dum, 72, 800); - pDCB->NegoPeriod = dum >> 2; - if (pDCB->NegoPeriod != olddevmode) needs_inquiry++; - if (!pos) goto ok; - if (memcmp (pos, "NS", 2) == 0) pos = strsep (&pos, " \t\n:=,;."); - } - else pos = strsep (&pos, " \t\n:=,;."); - if (!*pos) goto ok; - - /* Sync Speed in MHz */ - if (*pos != '-') - { - SCANF (buffer, pos, p0, dum, 1, 13); - pDCB->NegoPeriod = (1000/dum) >> 2; - if (pDCB->NegoPeriod != olddevmode && !pos) needs_inquiry++; - if (!*pos) goto ok; - /* decimal */ - if (pos-1 == pdec) - { - int dumold = dum; - dum = simple_strtoul (pos, &p0, 10) * 10; - for (; p0-pos > 1; p0--) dum /= 10; - pDCB->NegoPeriod = (100000/(100*dumold + dum)) >> 2; - if (pDCB->NegoPeriod < 19) pDCB->NegoPeriod = 19; - pos = strsep (&pos, " \t\n:=,;"); - if (!*pos) goto ok; - } - if (*pos == 'M') pos = strsep (&pos, " \t\n:=,;"); - if (pDCB->NegoPeriod != olddevmode) needs_inquiry++; - } - else pos = strsep (&pos, " \t\n:=,;"); - /* dc390_updateDCB (pACB, pDCB); */ - if (!*pos) goto ok; - - olddevmode = pDCB->SyncOffset; - /* SyncOffs */ - if (*pos != '-') - { - SCANF (buffer, pos, p0, dum, 0, 0x0f); - pDCB->SyncOffset = dum; - if (pDCB->SyncOffset > olddevmode) needs_inquiry++; - } - else pos = strsep (&pos, " \t\n:=,;"); - if (!*pos) goto ok; - dc390_updateDCB (pACB, pDCB); - - //olddevmode = pDCB->MaxCommand; - /* MaxCommand (Tags) */ - if (*pos != '-') - { - SCANF (buffer, pos, p0, dum, 1, 32 /*pACB->TagMaxNum*/); - if (pDCB->SyncMode & EN_TAG_QUEUEING) - pDCB->MaxCommand = dum; - else printk (KERN_INFO "DC390: Can't set MaxCmd larger than one without Tag Queueing!\n"); - } - else pos = strsep (&pos, " \t\n:=,;"); - - } - else - { - char* p1 = pos; UCHAR dum, newadaptid; - PARSEDEBUG(printk (KERN_INFO "DC390: chg adapt cfg \"%s\"\n", prstr (pos, &buffer[length]))); - dum = GLITCH_TO_NS (pACB->glitch_cfg); - /* Adapter setting */ - SEARCH (buffer, pos, p0, pACB->pScsiHost->max_id, "MAXID", 8); - SEARCH (buffer, pos, p0, pACB->pScsiHost->max_lun, "MAXLUN", 8); - SEARCH (buffer, pos, p0, newadaptid, "ADAPTERID", 7); - SEARCH (buffer, pos, p0, pACB->TagMaxNum, "TAGMAXNUM", 32); - SEARCH (buffer, pos, p0, pACB->ACBFlag, "ACBFLAG", 255); - SEARCH3 (buffer, pos, p0, dum, "GLITCHEATER", 40, 1000, "NS"); - SEARCH3 (buffer, pos, p0, pACB->sel_timeout, "SELTIMEOUT", 400, 163, "MS"); - SEARCH3 (buffer, pos, p0, dc390_eepromBuf[pACB->AdapterIndex][EE_DELAY], "DELAYRESET", 180, 100, "S"); - ok2: - pACB->glitch_cfg = NS_TO_GLITCH (dum); - if (pACB->sel_timeout < 60) pACB->sel_timeout = 60; - DC390_write8 (Scsi_TimeOut, pACB->sel_timeout); - if (newadaptid != pACB->pScsiHost->this_id) - { - pACB->pScsiHost->this_id = newadaptid; - dc390_ResetDevParam (pACB); - } - //dum = 0; while (1 << dum <= pACB->TagMaxNum) dum ++; - //pACB->TagMaxNum &= (1 << --dum); - dc390_updateDCBs (pACB); - // All devs should be INQUIRED now - if (pos == p1) goto einv; - } - if (*pos) goto next; - - ok: - DC390_UNLOCK_ACB; - if (needs_inquiry) - { dc390_updateDCB (pACB, pDCB); dc390_inquiry (pACB, pDCB); } - DC390_UNLOCK_IO(pACB->pScsiHost); - return (length); - - einv2: - pos = p0; - einv: - DC390_UNLOCK_ACB; - DC390_UNLOCK_IO(pACB->pScsiHost); - printk (KERN_WARNING "DC390: parse error near \"%s\"\n", (pos? pos: "NULL")); - return (-EINVAL); - - reset: - { - Scsi_Cmnd cmd; - /* TODO FIXME */ - /* cmd.host = pACB->pScsiHost; */ - printk (KERN_WARNING "DC390: Driver reset requested!\n"); - DC390_UNLOCK_ACB; - DC390_reset (&cmd); - DC390_UNLOCK_IO(pACB->pScsiHost); - } - return (length); - - dump: - { - dc390_dumpinfo (pACB, 0, 0); - DC390_UNLOCK_ACB; - DC390_UNLOCK_IO(pACB->pScsiHost); - } - return (length); - - inquiry: - { - pos = strsep (&pos, " \t\n.:;="); if (!*pos) goto einv; - dev = simple_strtoul (pos, &p0, 10); - if (dev >= pACB->DCBCnt) goto einv_dev; - for (dum = 0; dum < dev; dum++) pDCB = pDCB->pNextDCB; - printk (KERN_NOTICE " DC390: Issue INQUIRY command to Dev(Idx) %i SCSI ID %i LUN %i\n", - dev, pDCB->TargetID, pDCB->TargetLUN); - DC390_UNLOCK_ACB; - dc390_inquiry (pACB, pDCB); - DC390_UNLOCK_IO(pACB->pScsiHost); - } - return (length); - - remove: - { - pos = strsep (&pos, " \t\n.:;="); if (!*pos) goto einv; - dev = simple_strtoul (pos, &p0, 10); - if (dev >= pACB->DCBCnt) goto einv_dev; - for (dum = 0; dum < dev; dum++) pDCB = pDCB->pNextDCB; - printk (KERN_NOTICE " DC390: Remove DCB for Dev(Idx) %i SCSI ID %i LUN %i\n", - dev, pDCB->TargetID, pDCB->TargetLUN); - /* TO DO: We should make sure no pending commands are left */ - dc390_remove_dev (pACB, pDCB); - DC390_UNLOCK_ACB; - DC390_UNLOCK_IO(pACB->pScsiHost); - } - return (length); - - add: - { - int id, lun; - pos = strsep (&pos, " \t\n.:;="); - if (*pos) { SCANF (buffer, pos, p0, id, 0, 7); } else goto einv; - if (*pos) { SCANF (buffer, pos, p0, lun, 0, 7); } else goto einv; - pDCB = dc390_findDCB (pACB, id, lun); - if (pDCB) { printk ("DC390: ADD: Device already existing\n"); goto einv; } - dc390_initDCB (pACB, &pDCB, id, lun); - DC390_UNLOCK_ACB; - dc390_inquiry (pACB, pDCB); - DC390_UNLOCK_IO(pACB->pScsiHost); - } - return (length); - - start: - { - int id, lun; - pos = strsep (&pos, " \t\n.:;="); - if (*pos) { SCANF (buffer, pos, p0, id, 0, 7); } else goto einv; - if (*pos) { SCANF (buffer, pos, p0, lun, 0, 7); } else goto einv; - pDCB = dc390_findDCB (pACB, id, lun); - if (pDCB) printk ("DC390: SendStart: Device already existing ...\n"); - else dc390_initDCB (pACB, &pDCB, id, lun); - DC390_UNLOCK_ACB; - dc390_sendstart (pACB, pDCB); - dc390_inquiry (pACB, pDCB); - DC390_UNLOCK_IO(pACB->pScsiHost); - } - return (length); - - einv_dev: - printk (KERN_WARNING "DC390: Ignore cmnd to invalid Dev(Idx) %i. Valid range: 0 - %i.\n", - dev, pACB->DCBCnt - 1); - DC390_UNLOCK_ACB; - DC390_UNLOCK_IO(pACB->pScsiHost); - return (-EINVAL); -} - -#undef SEARCH -#undef YESNO -#undef SCANF - /******************************************************************** * Function: DC390_proc_info(char* buffer, char **start, * off_t offset, int length, int hostno, int inout) @@ -2763,15 +1992,13 @@ else SPRINTF(" No ") -int DC390_proc_info (struct Scsi_Host *shpnt, char *buffer, char **start, - off_t offset, int length, int inout) +static int DC390_proc_info (struct Scsi_Host *shpnt, char *buffer, char **start, + off_t offset, int length, int inout) { int dev, spd, spd1; char *pos = buffer; - struct scsi_cmnd_list *cl; PACB pACB; PDCB pDCB; - DC390_AFLAGS; pACB = dc390_pACB_start; @@ -2785,13 +2012,11 @@ if (pACB == (PACB)-1) return(-ESRCH); if(inout) /* Has data been written to the file ? */ - return dc390_set_info(buffer, length, pACB); + return -ENOSYS; SPRINTF("Tekram DC390/AM53C974 PCI SCSI Host Adapter, "); SPRINTF("Driver Version %s\n", DC390_VERSION); - DC390_LOCK_ACB; - SPRINTF("SCSI Host Nr %i, ", shpnt->host_no); SPRINTF("%s Adapter Nr %i\n", dc390_adapname, pACB->AdapterIndex); SPRINTF("IOPortBase 0x%04x, ", pACB->IOPortBase); @@ -2839,9 +2064,6 @@ SPRINTF (" %02i\n", pDCB->MaxCommand); pDCB = pDCB->pNextDCB; } - SPRINTF ("Commands in Queues: Query: %li:", pACB->QueryCnt); - list_for_each_entry(cl, &pACB->cmdq, scp.list) - SPRINTF (" %li", ((struct scsi_cmnd*)cl)->pid); if (timer_pending(&pACB->Waiting_Timer)) SPRINTF ("Waiting queue timer running\n"); else SPRINTF ("\n"); pDCB = pACB->pLinkDCB; @@ -2876,8 +2098,6 @@ SPRINTF("\n"); #endif - - DC390_UNLOCK_ACB; *start = buffer + offset; if (pos - buffer < offset) @@ -2919,7 +2139,7 @@ return( 0 ); } -void dc390_freeDCBs (struct Scsi_Host *host) +static void dc390_freeDCBs (struct Scsi_Host *host) { PDCB pDCB, nDCB; PACB pACB = (PACB)(host->hostdata); @@ -2938,13 +2158,12 @@ } -int DC390_release (struct Scsi_Host *host) +static int DC390_release (struct Scsi_Host *host) { - DC390_AFLAGS DC390_IFLAGS; + DC390_IFLAGS; PACB pACB = (PACB)(host->hostdata); DC390_LOCK_IO(host); - DC390_LOCK_ACB; /* TO DO: We should check for outstanding commands first. */ dc390_shutdown (host); @@ -2957,7 +2176,6 @@ release_region(host->io_port,host->n_io_port); dc390_freeDCBs (host); - DC390_UNLOCK_ACB; DC390_UNLOCK_IO(host); scsi_unregister(host); return( 1 ); diff -Nru a/drivers/scsi/tmscsim.h b/drivers/scsi/tmscsim.h --- a/drivers/scsi/tmscsim.h 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/tmscsim.h 2004-05-26 15:01:36 -07:00 @@ -214,16 +214,12 @@ PSRB pTmpSRB; /* 0x2c: */ -ULONG QueryCnt; -struct list_head cmdq; - -/* 0x38: */ UCHAR msgin123[4]; UCHAR DCBmap[MAX_SCSI_ID]; UCHAR Connected; UCHAR pad; -/* 0x3c: */ +/* 0x30: */ #if defined(USE_SPINLOCKS) && USE_SPINLOCKS > 1 && (defined(CONFIG_SMP) || DEBUG_SPINLOCKS > 0) spinlock_t lock; #endif @@ -234,20 +230,20 @@ UCHAR Ignore_IRQ; /* Not used */ PDEVDECL1; /* Pointer to PCI cfg. space */ -/* 0x4c/0x48: */ +/* 0x40/0x3c: */ ULONG Cmds; UINT SelLost; UINT SelConn; UINT CmdInQ; UINT CmdOutOfSRB; -/* 0x60/0x5c: */ +/* 0x54/0x50: */ struct timer_list Waiting_Timer; -/* 0x74/0x70: */ +/* 0x68/0x64: */ DC390_SRB TmpSRB; -/* 0xd8/0xd4: */ +/* 0xcc/0xc8: */ DC390_SRB SRB_array[MAX_SRB_CNT]; /* 50 SRBs */ -/* 0xfb0/0xfac: */ +/* 0xfa4/0xfa0: */ }; typedef struct _ACB DC390_ACB, *PACB; @@ -406,15 +402,8 @@ * SISC query queue */ typedef struct { - struct list_head list; dma_addr_t saved_dma_handle; } dc390_cmd_scp_t; - -struct scsi_cmnd_list -{ - char dummy[offsetof(struct scsi_cmnd, SCp)]; - dc390_cmd_scp_t scp; -}; /* ** Inquiry Data format diff -Nru a/drivers/scsi/wd7000.c b/drivers/scsi/wd7000.c --- a/drivers/scsi/wd7000.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/scsi/wd7000.c 2004-05-26 15:01:36 -07:00 @@ -165,6 +165,7 @@ * Removed now obsolete wd7000.h */ +#include <linux/delay.h> #include <linux/module.h> #include <linux/interrupt.h> #include <linux/kernel.h> @@ -846,7 +847,7 @@ static inline Scb *alloc_scbs(struct Scsi_Host *host, int needed) { register Scb *scb, *p = NULL; - register unsigned long flags; + unsigned long flags; register unsigned long timeout = jiffies + WAITnexttimeout; register unsigned long now; int i; @@ -898,7 +899,7 @@ static inline void free_scb(Scb * scb) { - register unsigned long flags; + unsigned long flags; spin_lock_irqsave(&scbpool_lock, flags); @@ -936,7 +937,7 @@ */ { register int i, ogmb; - register unsigned long flags; + unsigned long flags; unchar start_ogmb; Mailbox *ogmbs = host->mb.ogmb; int *next_ogmb = &(host->next_ogmb); diff -Nru a/drivers/serial/pxa.c b/drivers/serial/pxa.c --- a/drivers/serial/pxa.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/serial/pxa.c 2004-05-26 15:01:36 -07:00 @@ -33,7 +33,6 @@ #include <linux/sysrq.h> #include <linux/serial_reg.h> #include <linux/circ_buf.h> -#include <linux/serial.h> #include <linux/delay.h> #include <linux/interrupt.h> @@ -386,9 +385,6 @@ if (retval) return retval; - CKEN |= up->cken; - udelay(1); - /* * Clear the FIFO buffers and disable them. * (they will be reenabled in set_termios()) @@ -461,8 +457,6 @@ UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); serial_out(up, UART_FCR, 0); - - CKEN &= ~up->cken; } static void @@ -576,10 +570,14 @@ serial_pxa_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) { + struct uart_pxa_port *up = (struct uart_pxa_port *)port; if (state) { /* sleep */ + CKEN &= ~up->cken; } else { /* wake */ + CKEN |= up->cken; + udelay(1); } } @@ -760,13 +758,12 @@ .cken = CKEN6_FFUART, .port = { .type = PORT_PXA, - .iotype = SERIAL_IO_MEM, + .iotype = UPIO_MEM, .membase = (void *)&FFUART, .mapbase = __PREG(FFUART), .irq = IRQ_FFUART, .uartclk = 921600 * 16, .fifosize = 64, - .flags = ASYNC_SKIP_TEST, .ops = &serial_pxa_pops, .line = 0, }, @@ -775,13 +772,12 @@ .cken = CKEN7_BTUART, .port = { .type = PORT_PXA, - .iotype = SERIAL_IO_MEM, + .iotype = UPIO_MEM, .membase = (void *)&BTUART, .mapbase = __PREG(BTUART), .irq = IRQ_BTUART, .uartclk = 921600 * 16, .fifosize = 64, - .flags = ASYNC_SKIP_TEST, .ops = &serial_pxa_pops, .line = 1, }, @@ -790,13 +786,12 @@ .cken = CKEN5_STUART, .port = { .type = PORT_PXA, - .iotype = SERIAL_IO_MEM, + .iotype = UPIO_MEM, .membase = (void *)&STUART, .mapbase = __PREG(STUART), .irq = IRQ_STUART, .uartclk = 921600 * 16, .fifosize = 64, - .flags = ASYNC_SKIP_TEST, .ops = &serial_pxa_pops, .line = 2, }, @@ -830,6 +825,10 @@ static void __exit serial_pxa_exit(void) { + int i; + + for (i = 0; i < ARRAY_SIZE(serial_pxa_ports); i++) + uart_remove_one_port(&serial_pxa_reg, &serial_pxa_ports[i].port); uart_unregister_driver(&serial_pxa_reg); } diff -Nru a/drivers/usb/gadget/pxa2xx_udc.c b/drivers/usb/gadget/pxa2xx_udc.c --- a/drivers/usb/gadget/pxa2xx_udc.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/usb/gadget/pxa2xx_udc.c 2004-05-26 15:01:36 -07:00 @@ -51,6 +51,7 @@ #include <asm/io.h> #include <asm/irq.h> #include <asm/system.h> +#include <asm/mach-types.h> #include <asm/unaligned.h> #include <asm/hardware.h> diff -Nru a/drivers/usb/input/hiddev.c b/drivers/usb/input/hiddev.c --- a/drivers/usb/input/hiddev.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/usb/input/hiddev.c 2004-05-26 15:01:35 -07:00 @@ -612,7 +612,7 @@ uref = &uref_multi->uref; if (cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) { if (copy_from_user(uref_multi, (void *) arg, - sizeof(uref_multi))) + sizeof(*uref_multi))) goto fault; } else { if (copy_from_user(uref, (void *) arg, sizeof(*uref))) diff -Nru a/drivers/usb/misc/emi26.c b/drivers/usb/misc/emi26.c --- a/drivers/usb/misc/emi26.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/usb/misc/emi26.c 2004-05-26 15:01:35 -07:00 @@ -194,7 +194,7 @@ /* return 1 to fail the driver inialization * and give real driver change to load */ - return 1; + err = 1; wraperr: kfree(buf); diff -Nru a/drivers/usb/misc/emi62.c b/drivers/usb/misc/emi62.c --- a/drivers/usb/misc/emi62.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/usb/misc/emi62.c 2004-05-26 15:01:36 -07:00 @@ -229,6 +229,8 @@ goto wraperr; } + kfree(buf); + /* return 1 to fail the driver inialization * and give real driver change to load */ return 1; diff -Nru a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c --- a/drivers/video/aty/atyfb_base.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/video/aty/atyfb_base.c 2004-05-26 15:01:36 -07:00 @@ -1938,6 +1938,19 @@ if (i < 0) continue; + rp = &pdev->resource[0]; + if (rp->flags & IORESOURCE_IO) + rp = &pdev->resource[1]; + addr = rp->start; + if (!addr) + continue; + + res_start = rp->start; + res_size = rp->end - rp->start + 1; + if (!request_mem_region + (res_start, res_size, "atyfb")) + continue; + info = kmalloc(sizeof(struct fb_info), GFP_ATOMIC); if (!info) { @@ -1960,19 +1973,6 @@ info->fix = atyfb_fix; info->par = default_par; - rp = &pdev->resource[0]; - if (rp->flags & IORESOURCE_IO) - rp = &pdev->resource[1]; - addr = rp->start; - if (!addr) - continue; - - res_start = rp->start; - res_size = rp->end - rp->start + 1; - if (!request_mem_region - (res_start, res_size, "atyfb")) - continue; - #ifdef __sparc__ /* * Map memory-mapped registers. @@ -2000,6 +2000,7 @@ if (!default_par->mmap_map) { printk ("atyfb_init: can't alloc mmap_map\n"); + kfree(default_par); kfree(info); release_mem_region(res_start, res_size); return -ENXIO; @@ -2217,6 +2218,9 @@ ioremap(info->fix.mmio_start, 0x1000); if (!default_par->ati_regbase) { +#ifdef __sparc__ + kfree(default_par->mmap_map); +#endif kfree(default_par); kfree(info); release_mem_region(res_start, res_size); @@ -2247,6 +2251,10 @@ (char *) ioremap(addr, 0x800000); if (!info->screen_base) { +#ifdef __sparc__ + kfree(default_par->mmap_map); +#endif + kfree(default_par); kfree(info); release_mem_region(res_start, res_size); return -ENXIO; @@ -2258,6 +2266,7 @@ if (default_par->mmap_map) kfree(default_par->mmap_map); #endif + kfree(default_par); kfree(info); release_mem_region(res_start, res_size); return -ENXIO; @@ -2326,6 +2335,7 @@ memset(default_par, 0, sizeof(struct atyfb_par)); info->fix = atyfb_fix; + info->par = default_par; /* * Map the video memory (physical address given) to somewhere in the @@ -2357,6 +2367,7 @@ } if (!aty_init(info, "ISA bus")) { + kfree(default_par); kfree(info); /* This is insufficient! kernel_map has added two large chunks!! */ return -ENXIO; diff -Nru a/drivers/video/matrox/matroxfb_DAC1064.c b/drivers/video/matrox/matroxfb_DAC1064.c --- a/drivers/video/matrox/matroxfb_DAC1064.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/video/matrox/matroxfb_DAC1064.c 2004-05-26 15:01:35 -07:00 @@ -660,7 +660,7 @@ ACCESS_FBINFO(features.accel.has_cacheflush) = 1; ACCESS_FBINFO(outputs[0]).output = &m1064; - ACCESS_FBINFO(outputs[0]).src = MATROXFB_SRC_CRTC1; + ACCESS_FBINFO(outputs[0]).src = ACCESS_FBINFO(outputs[0]).default_src; ACCESS_FBINFO(outputs[0]).data = MINFO; ACCESS_FBINFO(outputs[0]).mode = MATROXFB_OUTPUT_MODE_MONITOR; @@ -859,7 +859,7 @@ { ACCESS_FBINFO(outputs[0]).output = &m1064; } - ACCESS_FBINFO(outputs[0]).src = MATROXFB_SRC_CRTC1; + ACCESS_FBINFO(outputs[0]).src = ACCESS_FBINFO(outputs[0]).default_src; ACCESS_FBINFO(outputs[0]).data = MINFO; ACCESS_FBINFO(outputs[0]).mode = MATROXFB_OUTPUT_MODE_MONITOR; diff -Nru a/drivers/video/matrox/matroxfb_Ti3026.c b/drivers/video/matrox/matroxfb_Ti3026.c --- a/drivers/video/matrox/matroxfb_Ti3026.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/video/matrox/matroxfb_Ti3026.c 2004-05-26 15:01:35 -07:00 @@ -692,7 +692,7 @@ ACCESS_FBINFO(outputs[0]).data = MINFO; ACCESS_FBINFO(outputs[0]).output = &ti3026_output; - ACCESS_FBINFO(outputs[0]).src = MATROXFB_SRC_CRTC1; + ACCESS_FBINFO(outputs[0]).src = ACCESS_FBINFO(outputs[0]).default_src; ACCESS_FBINFO(outputs[0]).mode = MATROXFB_OUTPUT_MODE_MONITOR; if (ACCESS_FBINFO(devflags.noinit)) diff -Nru a/drivers/video/matrox/matroxfb_base.c b/drivers/video/matrox/matroxfb_base.c --- a/drivers/video/matrox/matroxfb_base.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/video/matrox/matroxfb_base.c 2004-05-26 15:01:36 -07:00 @@ -1272,6 +1272,7 @@ static int dfp; /* "matrox:dfp */ static int dfp_type = -1; /* "matrox:dfp:xxx */ static int memtype = -1; /* "matrox:memtype:xxx" */ +static char outputs[8]; /* "matrox:outputs:xxx" */ #ifndef MODULE static char videomode[64]; /* "matrox:mode:xxxxx" or "matrox:xxxxx" */ @@ -1537,6 +1538,39 @@ static int hotplug = 0; +static void setDefaultOutputs(WPMINFO2) { + unsigned int i; + const char* ptr; + + ACCESS_FBINFO(outputs[0]).default_src = MATROXFB_SRC_CRTC1; + if (ACCESS_FBINFO(devflags.g450dac)) { + ACCESS_FBINFO(outputs[1]).default_src = MATROXFB_SRC_CRTC1; + ACCESS_FBINFO(outputs[2]).default_src = MATROXFB_SRC_CRTC1; + } else if (dfp) { + ACCESS_FBINFO(outputs[2]).default_src = MATROXFB_SRC_CRTC1; + } + ptr = outputs; + for (i = 0; i < MATROXFB_MAX_OUTPUTS; i++) { + char c = *ptr++; + + if (c == 0) { + break; + } + if (c == '0') { + ACCESS_FBINFO(outputs[i]).default_src = MATROXFB_SRC_NONE; + } else if (c == '1') { + ACCESS_FBINFO(outputs[i]).default_src = MATROXFB_SRC_CRTC1; + } else if (c == '2' && ACCESS_FBINFO(devflags.crtc2)) { + ACCESS_FBINFO(outputs[i]).default_src = MATROXFB_SRC_CRTC2; + } else { + printk(KERN_ERR "matroxfb: Unknown outputs setting\n"); + break; + } + } + /* Nullify this option for subsequent adapters */ + outputs[0] = 0; +} + static int initMatrox2(WPMINFO struct board* b){ unsigned long ctrlptr_phys = 0; unsigned long video_base_phys = 0; @@ -1577,20 +1611,18 @@ ACCESS_FBINFO(devflags.crtc2) = (b->flags & DEVF_CRTC2) != 0; ACCESS_FBINFO(devflags.maven_capable) = (b->flags & DEVF_MAVEN_CAPABLE) != 0; ACCESS_FBINFO(devflags.dualhead) = (b->flags & DEVF_DUALHEAD) != 0; + ACCESS_FBINFO(devflags.dfp_type) = dfp_type; + ACCESS_FBINFO(devflags.g450dac) = (b->flags & DEVF_G450DAC) != 0; + ACCESS_FBINFO(devflags.textstep) = ACCESS_FBINFO(devflags.vgastep) * ACCESS_FBINFO(devflags.textmode); + ACCESS_FBINFO(devflags.textvram) = 65536 / ACCESS_FBINFO(devflags.textmode); + setDefaultOutputs(PMINFO2); if (b->flags & DEVF_PANELLINK_CAPABLE) { ACCESS_FBINFO(outputs[2]).data = MINFO; ACCESS_FBINFO(outputs[2]).output = &panellink_output; - if (dfp) - ACCESS_FBINFO(outputs[2]).src = MATROXFB_SRC_CRTC1; - else - ACCESS_FBINFO(outputs[2]).src = MATROXFB_SRC_NONE; + ACCESS_FBINFO(outputs[2]).src = ACCESS_FBINFO(outputs[2]).default_src; ACCESS_FBINFO(outputs[2]).mode = MATROXFB_OUTPUT_MODE_MONITOR; ACCESS_FBINFO(devflags.panellink) = 1; } - ACCESS_FBINFO(devflags.dfp_type) = dfp_type; - ACCESS_FBINFO(devflags.g450dac) = (b->flags & DEVF_G450DAC) != 0; - ACCESS_FBINFO(devflags.textstep) = ACCESS_FBINFO(devflags.vgastep) * ACCESS_FBINFO(devflags.textmode); - ACCESS_FBINFO(devflags.textvram) = 65536 / ACCESS_FBINFO(devflags.textmode); if (ACCESS_FBINFO(capable.cross4MB) < 0) ACCESS_FBINFO(capable.cross4MB) = b->flags & DEVF_CROSS4MB; @@ -1813,6 +1845,13 @@ to yres_virtual * xres_virtual < 2^32 */ } matroxfb_init_fix(PMINFO2); + /* Normalize values (namely yres_virtual) */ + matroxfb_check_var(&vesafb_defined, &ACCESS_FBINFO(fbcon)); + /* And put it into "current" var. Do NOT program hardware yet, or we'll not take over + * vgacon correctly. fbcon_startup will call fb_set_par for us, WITHOUT check_var, + * and unfortunately it will do it BEFORE vgacon contents is saved, so it won't work + * anyway. But we at least tried... */ + ACCESS_FBINFO(fbcon.var) = vesafb_defined; err = -EINVAL; printk(KERN_INFO "matroxfb: %dx%dx%dbpp (virtual: %dx%d)\n", @@ -1834,6 +1873,9 @@ * until someone tells me what is proper thing to do */ printk(KERN_INFO "fb%d: initializing hardware\n", ACCESS_FBINFO(fbcon.node)); + /* We have to use FB_ACTIVATE_FORCE, as we had to put vesafb_defined to the fbcon.var + * already before, so register_framebuffer works correctly. */ + vesafb_defined.activate |= FB_ACTIVATE_FORCE; fb_set_var(&ACCESS_FBINFO(fbcon), &vesafb_defined); } return 0; @@ -2288,6 +2330,8 @@ mem = simple_strtoul(this_opt+4, NULL, 0); else if (!strncmp(this_opt, "mode:", 5)) strlcpy(videomode, this_opt+5, sizeof(videomode)); + else if (!strncmp(this_opt, "outputs:", 8)) + strlcpy(outputs, this_opt+8, sizeof(outputs)); else if (!strncmp(this_opt, "dfp:", 4)) { dfp_type = simple_strtoul(this_opt+4, NULL, 0); dfp = 1; @@ -2463,6 +2507,8 @@ MODULE_PARM_DESC(dfp, "Specifies whether to use digital flat panel interface of G200/G400 (0 or 1) (default=0)"); MODULE_PARM(dfp_type, "i"); MODULE_PARM_DESC(dfp_type, "Specifies DFP interface type (0 to 255) (default=read from hardware)"); +MODULE_PARM(outputs, "c8"); +MODULE_PARM_DESC(outputs, "Specifies which CRTC is mapped to which output (string of up to three letters, consisting of 0 (disabled), 1 (CRTC1), 2 (CRTC2)) (default=111 for Gx50, 101 for G200/G400 with DFP, and 100 for all other devices)"); #ifdef CONFIG_PPC_PMAC MODULE_PARM(vmode, "i"); MODULE_PARM_DESC(vmode, "Specify the vmode mode number that should be used (640x480 default)"); diff -Nru a/drivers/video/matrox/matroxfb_base.h b/drivers/video/matrox/matroxfb_base.h --- a/drivers/video/matrox/matroxfb_base.h 2004-05-26 15:01:36 -07:00 +++ b/drivers/video/matrox/matroxfb_base.h 2004-05-26 15:01:36 -07:00 @@ -479,6 +479,7 @@ struct matrox_altout* output; void* data; unsigned int mode; + unsigned int default_src; } outputs[MATROXFB_MAX_OUTPUTS]; #define MATROXFB_MAX_FB_DRIVERS 5 diff -Nru a/drivers/video/matrox/matroxfb_crtc2.c b/drivers/video/matrox/matroxfb_crtc2.c --- a/drivers/video/matrox/matroxfb_crtc2.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/video/matrox/matroxfb_crtc2.c 2004-05-26 15:01:36 -07:00 @@ -628,15 +628,6 @@ m2info->mmio.vbase = ACCESS_FBINFO(mmio.vbase); m2info->mmio.len = ACCESS_FBINFO(mmio.len); - /* - * If we have unused output, connect CRTC2 to it... - */ - if (ACCESS_FBINFO(outputs[1]).output && - ACCESS_FBINFO(outputs[1]).src == MATROXFB_SRC_NONE && - ACCESS_FBINFO(outputs[2]).src == MATROXFB_SRC_NONE) { - ACCESS_FBINFO(outputs[1]).src = MATROXFB_SRC_CRTC2; - } - matroxfb_dh_init_fix(m2info); if (register_framebuffer(&m2info->fbcon)) { return -ENXIO; diff -Nru a/drivers/video/matrox/matroxfb_g450.c b/drivers/video/matrox/matroxfb_g450.c --- a/drivers/video/matrox/matroxfb_g450.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/video/matrox/matroxfb_g450.c 2004-05-26 15:01:36 -07:00 @@ -591,11 +591,11 @@ if (ACCESS_FBINFO(devflags.g450dac)) { down_write(&ACCESS_FBINFO(altout.lock)); tvo_fill_defaults(PMINFO2); - ACCESS_FBINFO(outputs[1]).src = MATROXFB_SRC_CRTC1; + ACCESS_FBINFO(outputs[1]).src = ACCESS_FBINFO(outputs[1]).default_src; ACCESS_FBINFO(outputs[1]).data = MINFO; ACCESS_FBINFO(outputs[1]).output = &matroxfb_g450_altout; ACCESS_FBINFO(outputs[1]).mode = MATROXFB_OUTPUT_MODE_MONITOR; - ACCESS_FBINFO(outputs[2]).src = MATROXFB_SRC_CRTC1; + ACCESS_FBINFO(outputs[2]).src = ACCESS_FBINFO(outputs[2]).default_src; ACCESS_FBINFO(outputs[2]).data = MINFO; ACCESS_FBINFO(outputs[2]).output = &matroxfb_g450_dvi; ACCESS_FBINFO(outputs[2]).mode = MATROXFB_OUTPUT_MODE_MONITOR; diff -Nru a/drivers/video/matrox/matroxfb_maven.c b/drivers/video/matrox/matroxfb_maven.c --- a/drivers/video/matrox/matroxfb_maven.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/video/matrox/matroxfb_maven.c 2004-05-26 15:01:35 -07:00 @@ -1188,7 +1188,7 @@ md->client = clnt; down_write(&ACCESS_FBINFO(altout.lock)); ACCESS_FBINFO(outputs[1]).output = &maven_altout; - ACCESS_FBINFO(outputs[1]).src = MATROXFB_SRC_NONE; + ACCESS_FBINFO(outputs[1]).src = ACCESS_FBINFO(outputs[1]).default_src; ACCESS_FBINFO(outputs[1]).data = md; ACCESS_FBINFO(outputs[1]).mode = MATROXFB_OUTPUT_MODE_MONITOR; up_write(&ACCESS_FBINFO(altout.lock)); @@ -1249,6 +1249,7 @@ err = -ENOMEM; goto ERROR0; } + memset(new_client, 0, sizeof(*new_client) + sizeof(*data)); data = (struct maven_data*)(new_client + 1); i2c_set_clientdata(new_client, data); new_client->addr = address; diff -Nru a/drivers/video/pxafb.c b/drivers/video/pxafb.c --- a/drivers/video/pxafb.c 2004-05-26 15:01:35 -07:00 +++ b/drivers/video/pxafb.c 2004-05-26 15:01:35 -07:00 @@ -153,7 +153,7 @@ * 12 or 16-bit True Colour. We encode the RGB value * according to the RGB bitfield information. */ - if (regno <= 16) { + if (regno < 16) { u32 *pal = fbi->fb.pseudo_palette; val = chan_to_field(red, &fbi->fb.var.red); @@ -448,7 +448,7 @@ { struct pxafb_lcd_reg new_regs; u_long flags; - u_int pcd = get_pcd(var->pixclock); + u_int lines_per_panel, pcd = get_pcd(var->pixclock); DPRINTK("Configuring PXA LCD\n"); @@ -509,8 +509,16 @@ LCCR1_BegLnDel(var->left_margin) + LCCR1_EndLnDel(var->right_margin); + /* + * If we have a dual scan LCD, we need to halve + * the YRES parameter. + */ + lines_per_panel = var->yres; + if (fbi->lccr0 & LCCR0_SDS) + lines_per_panel /= 2; + new_regs.lccr2 = - LCCR2_DisHght(var->yres) + + LCCR2_DisHght(lines_per_panel) + LCCR2_VrtSnchWdth(var->vsync_len) + LCCR2_BegFrmDel(var->upper_margin) + LCCR2_EndFrmDel(var->lower_margin); @@ -540,9 +548,7 @@ fbi->dmadesc_fbhigh_dma = fbi->palette_dma - 2*16; fbi->dmadesc_palette_dma = fbi->palette_dma - 1*16; - #define BYTES_PER_PANEL ((fbi->lccr0 & LCCR0_SDS) == LCCR0_Dual ? \ - (var->xres * var->yres * var->bits_per_pixel / 8 / 2) : \ - (var->xres * var->yres * var->bits_per_pixel / 8)) +#define BYTES_PER_PANEL (lines_per_panel * fbi->fb.fix.line_length) /* populate descriptors */ fbi->dmadesc_fblow_cpu->fdadr = fbi->dmadesc_fblow_dma; @@ -733,8 +739,7 @@ LCSR = 0xffffffff; /* Clear LCD Status Register */ LCCR0 &= ~LCCR0_LDM; /* Enable LCD Disable Done Interrupt */ - //TODO?enable_irq(IRQ_LCD); /* Enable LCD IRQ */ - LCCR0 &= ~LCCR0_ENB; /* Disable LCD Controller */ + LCCR0 |= LCCR0_DIS; /* Disable LCD Controller */ schedule_timeout(20 * HZ / 1000); remove_wait_queue(&fbi->ctrlr_wait, &wait); @@ -1137,25 +1142,25 @@ } } else if (!strncmp(this_opt, "pixclock:", 9)) { inf->pixclock = simple_strtoul(this_opt+9, NULL, 0); - dev_info(dev, "override pixclock: %uld\n", inf->pixclock); + dev_info(dev, "override pixclock: %u\n", inf->pixclock); } else if (!strncmp(this_opt, "left:", 5)) { inf->left_margin = simple_strtoul(this_opt+5, NULL, 0); - dev_info(dev, "override left: %d\n", inf->left_margin); + dev_info(dev, "override left: %u\n", inf->left_margin); } else if (!strncmp(this_opt, "right:", 6)) { inf->right_margin = simple_strtoul(this_opt+6, NULL, 0); - dev_info(dev, "override right: %d\n", inf->right_margin); + dev_info(dev, "override right: %u\n", inf->right_margin); } else if (!strncmp(this_opt, "upper:", 6)) { inf->upper_margin = simple_strtoul(this_opt+6, NULL, 0); - dev_info(dev, "override upper: %d\n", inf->upper_margin); + dev_info(dev, "override upper: %u\n", inf->upper_margin); } else if (!strncmp(this_opt, "lower:", 6)) { inf->lower_margin = simple_strtoul(this_opt+6, NULL, 0); - dev_info(dev, "override lower: %d\n", inf->lower_margin); + dev_info(dev, "override lower: %u\n", inf->lower_margin); } else if (!strncmp(this_opt, "hsynclen:", 9)) { inf->hsync_len = simple_strtoul(this_opt+9, NULL, 0); - dev_info(dev, "override hsynclen: %d\n", inf->hsync_len); + dev_info(dev, "override hsynclen: %u\n", inf->hsync_len); } else if (!strncmp(this_opt, "vsynclen:", 9)) { inf->vsync_len = simple_strtoul(this_opt+9, NULL, 0); - dev_info(dev, "override vsynclen: %d\n", inf->vsync_len); + dev_info(dev, "override vsynclen: %u\n", inf->vsync_len); } else if (!strncmp(this_opt, "hsync:", 6)) { if ( simple_strtoul(this_opt+6, NULL, 0) == 0 ) { dev_info(dev, "override hsync: Active Low\n"); diff -Nru a/drivers/video/tgafb.c b/drivers/video/tgafb.c --- a/drivers/video/tgafb.c 2004-05-26 15:01:36 -07:00 +++ b/drivers/video/tgafb.c 2004-05-26 15:01:36 -07:00 @@ -23,6 +23,7 @@ #include <linux/init.h> #include <linux/fb.h> #include <linux/pci.h> +#include <linux/selection.h> #include <asm/io.h> #include <video/tgafb.h> #include <linux/selection.h> diff -Nru a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c --- a/fs/befs/linuxvfs.c 2004-05-26 15:01:35 -07:00 +++ b/fs/befs/linuxvfs.c 2004-05-26 15:01:35 -07:00 @@ -571,7 +571,7 @@ } /* convert from Unicode to nls */ - unilen = nls->uni2char(uni, &result[o], 1); + unilen = nls->uni2char(uni, &result[o], in_len - o); if (unilen < 0) { goto conv_err; } @@ -584,7 +584,7 @@ return o; conv_err: - befs_error(sb, "Name using charecter set %s contains a charecter that " + befs_error(sb, "Name using character set %s contains a character that " "cannot be converted to unicode.", nls->charset); befs_debug(sb, "<--- utf2nls()"); kfree(result); diff -Nru a/fs/compat_ioctl.c b/fs/compat_ioctl.c --- a/fs/compat_ioctl.c 2004-05-26 15:01:36 -07:00 +++ b/fs/compat_ioctl.c 2004-05-26 15:01:36 -07:00 @@ -3088,6 +3088,189 @@ return -EINVAL; } +#if defined(CONFIG_NCP_FS) || defined(CONFIG_NCP_FS_MODULE) +struct ncp_ioctl_request_32 { + u32 function; + u32 size; + compat_caddr_t data; +}; + +struct ncp_fs_info_v2_32 { + s32 version; + u32 mounted_uid; + u32 connection; + u32 buffer_size; + + u32 volume_number; + u32 directory_id; + + u32 dummy1; + u32 dummy2; + u32 dummy3; +}; + +struct ncp_objectname_ioctl_32 +{ + s32 auth_type; + u32 object_name_len; + compat_caddr_t object_name; /* an userspace data, in most cases user name */ +}; + +struct ncp_privatedata_ioctl_32 +{ + u32 len; + compat_caddr_t data; /* ~1000 for NDS */ +}; + +#define NCP_IOC_NCPREQUEST_32 _IOR('n', 1, struct ncp_ioctl_request_32) +#define NCP_IOC_GETMOUNTUID2_32 _IOW('n', 2, u32) +#define NCP_IOC_GET_FS_INFO_V2_32 _IOWR('n', 4, struct ncp_fs_info_v2_32) +#define NCP_IOC_GETOBJECTNAME_32 _IOWR('n', 9, struct ncp_objectname_ioctl_32) +#define NCP_IOC_SETOBJECTNAME_32 _IOR('n', 9, struct ncp_objectname_ioctl_32) +#define NCP_IOC_GETPRIVATEDATA_32 _IOWR('n', 10, struct ncp_privatedata_ioctl_32) +#define NCP_IOC_SETPRIVATEDATA_32 _IOR('n', 10, struct ncp_privatedata_ioctl_32) + +static int do_ncp_ncprequest(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct ncp_ioctl_request_32 n32; + struct ncp_ioctl_request *p = compat_alloc_user_space(sizeof(*p)); + + if (copy_from_user(&n32, compat_ptr(arg), sizeof(n32)) || + put_user(n32.function, &p->function) || + put_user(n32.size, &p->size) || + put_user(compat_ptr(n32.data), &p->data)) + return -EFAULT; + + return sys_ioctl(fd, NCP_IOC_NCPREQUEST, (unsigned long)p); +} + +static int do_ncp_getmountuid2(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + mm_segment_t old_fs = get_fs(); + __kernel_uid_t kuid; + int err; + + cmd = NCP_IOC_GETMOUNTUID2; + + set_fs(KERNEL_DS); + err = sys_ioctl(fd, cmd, (unsigned long)&kuid); + set_fs(old_fs); + + if (!err) + err = put_user(kuid, (unsigned int *)compat_ptr(arg)); + + return err; +} + +static int do_ncp_getfsinfo2(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + mm_segment_t old_fs = get_fs(); + struct ncp_fs_info_v2_32 n32; + struct ncp_fs_info_v2 n; + int err; + + if (copy_from_user(&n32, compat_ptr(arg), sizeof(n32))) + return -EFAULT; + if (n32.version != NCP_GET_FS_INFO_VERSION_V2) + return -EINVAL; + n.version = NCP_GET_FS_INFO_VERSION_V2; + + set_fs(KERNEL_DS); + err = sys_ioctl(fd, NCP_IOC_GET_FS_INFO_V2, (unsigned long)&n); + set_fs(old_fs); + + if (!err) { + n32.version = n.version; + n32.mounted_uid = n.mounted_uid; + n32.connection = n.connection; + n32.buffer_size = n.buffer_size; + n32.volume_number = n.volume_number; + n32.directory_id = n.directory_id; + n32.dummy1 = n.dummy1; + n32.dummy2 = n.dummy2; + n32.dummy3 = n.dummy3; + err = copy_to_user(compat_ptr(arg), &n32, sizeof(n32)) ? -EFAULT : 0; + } + return err; +} + +static int do_ncp_getobjectname(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct ncp_objectname_ioctl_32 n32, *p32 = compat_ptr(arg); + struct ncp_objectname_ioctl *p = compat_alloc_user_space(sizeof(*p)); + s32 auth_type; + u32 name_len; + int err; + + if (copy_from_user(&n32, p32, sizeof(n32)) || + put_user(n32.object_name_len, &p->object_name_len) || + put_user(compat_ptr(n32.object_name), &p->object_name)) + return -EFAULT; + + err = sys_ioctl(fd, NCP_IOC_GETOBJECTNAME, (unsigned long)p); + if (err) + return err; + + if (get_user(auth_type, &p->auth_type) || + put_user(auth_type, &p32->auth_type) || + get_user(name_len, &p->object_name_len) || + put_user(name_len, &p32->object_name_len)) + return -EFAULT; + + return 0; +} + +static int do_ncp_setobjectname(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct ncp_objectname_ioctl_32 n32, *p32 = compat_ptr(arg); + struct ncp_objectname_ioctl *p = compat_alloc_user_space(sizeof(*p)); + + if (copy_from_user(&n32, p32, sizeof(n32)) || + put_user(n32.auth_type, &p->auth_type) || + put_user(n32.object_name_len, &p->object_name_len) || + put_user(compat_ptr(n32.object_name), &p->object_name)) + return -EFAULT; + + return sys_ioctl(fd, NCP_IOC_SETOBJECTNAME, (unsigned long)p); +} + +static int do_ncp_getprivatedata(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct ncp_privatedata_ioctl_32 n32, *p32 = compat_ptr(arg); + struct ncp_privatedata_ioctl *p = compat_alloc_user_space(sizeof(*p)); + u32 len; + int err; + + if (copy_from_user(&n32, p32, sizeof(n32)) || + put_user(n32.len, &p->len) || + put_user(compat_ptr(n32.data), &p->data)) + return -EFAULT; + + err = sys_ioctl(fd, NCP_IOC_GETPRIVATEDATA, (unsigned long)p); + if (err) + return err; + + if (get_user(len, &p->len) || + put_user(len, &p32->len)) + return -EFAULT; + + return 0; +} + +static int do_ncp_setprivatedata(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct ncp_privatedata_ioctl_32 n32, *p32 = compat_ptr(arg); + struct ncp_privatedata_ioctl *p = compat_alloc_user_space(sizeof(*p)); + + if (copy_from_user(&n32, p32, sizeof(n32)) || + put_user(n32.len, &p->len) || + put_user(compat_ptr(n32.data), &p->data)) + return -EFAULT; + + return sys_ioctl(fd, NCP_IOC_SETPRIVATEDATA, (unsigned long)p); +} +#endif + #undef CODE #endif @@ -3269,6 +3452,16 @@ HANDLE_IOCTL(SIOCGIWENCODE, do_wireless_ioctl) HANDLE_IOCTL(SIOCSIFBR, old_bridge_ioctl) HANDLE_IOCTL(SIOCGIFBR, old_bridge_ioctl) + +#if defined(CONFIG_NCP_FS) || defined(CONFIG_NCP_FS_MODULE) +HANDLE_IOCTL(NCP_IOC_NCPREQUEST_32, do_ncp_ncprequest) +HANDLE_IOCTL(NCP_IOC_GETMOUNTUID2_32, do_ncp_getmountuid2) +HANDLE_IOCTL(NCP_IOC_GET_FS_INFO_V2_32, do_ncp_getfsinfo2) +HANDLE_IOCTL(NCP_IOC_GETOBJECTNAME_32, do_ncp_getobjectname) +HANDLE_IOCTL(NCP_IOC_SETOBJECTNAME_32, do_ncp_setobjectname) +HANDLE_IOCTL(NCP_IOC_GETPRIVATEDATA_32, do_ncp_getprivatedata) +HANDLE_IOCTL(NCP_IOC_SETPRIVATEDATA_32, do_ncp_setprivatedata) +#endif #undef DECLARES #endif diff -Nru a/fs/eventpoll.c b/fs/eventpoll.c --- a/fs/eventpoll.c 2004-05-26 15:01:35 -07:00 +++ b/fs/eventpoll.c 2004-05-26 15:01:35 -07:00 @@ -148,14 +148,6 @@ #define EP_ITEM_FROM_EPQUEUE(p) (container_of(p, struct ep_pqueue, pt)->epi) /* - * This is used to optimize the event transfer to userspace. Since this - * is kept on stack, it should be pretty small. - */ -#define EP_MAX_BUF_EVENTS 32 - - - -/* * Node that is linked into the "wake_task_list" member of the "struct poll_safewake". * It is used to keep track on all tasks that are currently inside the wake_up() code * to 1) short-circuit the one coming from the same task and same wait queue head @@ -1430,11 +1422,10 @@ static int ep_send_events(struct eventpoll *ep, struct list_head *txlist, struct epoll_event __user *events) { - int eventcnt = 0, eventbuf = 0; + int eventcnt = 0; unsigned int revents; struct list_head *lnk; struct epitem *epi; - struct epoll_event event[EP_MAX_BUF_EVENTS]; /* * We can loop without lock because this is a task private list. @@ -1460,28 +1451,17 @@ epi->revents = revents & epi->event.events; if (epi->revents) { - event[eventbuf] = epi->event; - event[eventbuf].events &= revents; - eventbuf++; - if (eventbuf == EP_MAX_BUF_EVENTS) { - if (__copy_to_user(&events[eventcnt], event, - eventbuf * sizeof(struct epoll_event))) - return -EFAULT; - eventcnt += eventbuf; - eventbuf = 0; - } + if (__put_user(epi->event.events, + &events[eventcnt].events)) + return -EFAULT; + if (__put_user(epi->event.data, + &events[eventcnt].data)) + return -EFAULT; if (epi->event.events & EPOLLONESHOT) epi->event.events &= EP_PRIVATE_BITS; + eventcnt++; } } - - if (eventbuf) { - if (__copy_to_user(&events[eventcnt], event, - eventbuf * sizeof(struct epoll_event))) - return -EFAULT; - eventcnt += eventbuf; - } - return eventcnt; } diff -Nru a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c --- a/fs/ext2/ialloc.c 2004-05-26 15:01:36 -07:00 +++ b/fs/ext2/ialloc.c 2004-05-26 15:01:36 -07:00 @@ -663,7 +663,7 @@ } brelse(bitmap_bh); printk("ext2_count_free_inodes: stored = %lu, computed = %lu, %lu\n", - percpu_counter_read(EXT2_SB(sb)->s_freeinodes_counter), + percpu_counter_read(&EXT2_SB(sb)->s_freeinodes_counter), desc_count, bitmap_count); unlock_super(sb); return desc_count; @@ -724,7 +724,7 @@ bitmap_count += x; } brelse(bitmap_bh); - if (percpu_counter_read(EXT2_SB(sb)->s_freeinodes_counter) != + if (percpu_counter_read(&EXT2_SB(sb)->s_freeinodes_counter) != bitmap_count) ext2_error(sb, "ext2_check_inodes_bitmap", "Wrong free inodes count in super block, " diff -Nru a/fs/ext3/inode.c b/fs/ext3/inode.c --- a/fs/ext3/inode.c 2004-05-26 15:01:36 -07:00 +++ b/fs/ext3/inode.c 2004-05-26 15:01:36 -07:00 @@ -205,8 +205,6 @@ * need to make sure that the in-core orphan linked list * is properly cleaned up. */ ext3_orphan_del(NULL, inode); - - ext3_std_error(inode->i_sb, PTR_ERR(handle)); goto no_delete; } diff -Nru a/fs/fat/file.c b/fs/fat/file.c --- a/fs/fat/file.c 2004-05-26 15:01:35 -07:00 +++ b/fs/fat/file.c 2004-05-26 15:01:35 -07:00 @@ -47,7 +47,8 @@ if (!create) return 0; if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) { - BUG(); + fat_fs_panic(sb, "corrupted file size (i_pos %lld, %lld)", + MSDOS_I(inode)->i_pos, MSDOS_I(inode)->mmu_private); return -EIO; } if (!((unsigned long)iblock & (MSDOS_SB(sb)->sec_per_clus - 1))) { diff -Nru a/fs/fat/inode.c b/fs/fat/inode.c --- a/fs/fat/inode.c 2004-05-26 15:01:35 -07:00 +++ b/fs/fat/inode.c 2004-05-26 15:01:35 -07:00 @@ -1245,7 +1245,7 @@ lock_kernel(); if (!(bh = sb_bread(sb, i_pos >> MSDOS_SB(sb)->dir_per_block_bits))) { printk(KERN_ERR "FAT: unable to read inode block " - "for updating (i_pos %lld)", i_pos); + "for updating (i_pos %lld)\n", i_pos); unlock_kernel(); return /* -EIO */; } diff -Nru a/fs/hfs/catalog.c b/fs/hfs/catalog.c --- a/fs/hfs/catalog.c 2004-05-26 15:01:36 -07:00 +++ b/fs/hfs/catalog.c 2004-05-26 15:01:36 -07:00 @@ -101,11 +101,11 @@ if (err != -ENOENT) { if (!err) err = -EEXIST; - goto out; + goto err2; } err = hfs_brec_insert(&fd, &entry, entry_size); if (err) - goto out; + goto err2; hfs_cat_build_key(fd.search_key, dir->i_ino, str); entry_size = hfs_cat_build_record(&entry, cnid, inode); @@ -114,16 +114,24 @@ /* panic? */ if (!err) err = -EEXIST; - goto out; + goto err1; } err = hfs_brec_insert(&fd, &entry, entry_size); - if (!err) { - dir->i_size++; - mark_inode_dirty(dir); - } -out: + if (err) + goto err1; + + dir->i_size++; + dir->i_mtime = dir->i_ctime = CURRENT_TIME; + mark_inode_dirty(dir); hfs_find_exit(&fd); + return 0; +err1: + hfs_cat_build_key(fd.search_key, cnid, NULL); + if (!hfs_brec_find(&fd)) + hfs_brec_remove(&fd); +err2: + hfs_find_exit(&fd); return err; } @@ -240,6 +248,7 @@ } dir->i_size--; + dir->i_mtime = dir->i_ctime = CURRENT_TIME; mark_inode_dirty(dir); res = 0; out: @@ -292,6 +301,7 @@ if (err) goto out; dst_dir->i_size++; + dst_dir->i_mtime = dst_dir->i_ctime = CURRENT_TIME; mark_inode_dirty(dst_dir); /* finally remove the old entry */ @@ -303,6 +313,7 @@ if (err) goto out; src_dir->i_size--; + src_dir->i_mtime = src_dir->i_ctime = CURRENT_TIME; mark_inode_dirty(src_dir); type = entry.type; diff -Nru a/fs/hfs/inode.c b/fs/hfs/inode.c --- a/fs/hfs/inode.c 2004-05-26 15:01:36 -07:00 +++ b/fs/hfs/inode.c 2004-05-26 15:01:36 -07:00 @@ -96,7 +96,7 @@ } hfs_bnode_unhash(node); hfs_bnode_free(node); - } while (--i); + } while (--i && nidx < tree->node_count); spin_unlock(&tree->hash_lock); } //printk("releasepage: %lu,%x = %d\n", page->index, mask, res); diff -Nru a/fs/hfsplus/brec.c b/fs/hfsplus/brec.c --- a/fs/hfsplus/brec.c 2004-05-26 15:01:36 -07:00 +++ b/fs/hfsplus/brec.c 2004-05-26 15:01:36 -07:00 @@ -33,7 +33,7 @@ if ((node->type == HFS_NODE_INDEX) && !(node->tree->attributes & HFS_TREE_VARIDXKEYS)) { - retval = node->tree->max_key_len; + retval = node->tree->max_key_len + 2; } else { recoff = hfs_bnode_read_u16(node, node->tree->node_size - (rec + 1) * 2); if (!recoff) @@ -144,7 +144,7 @@ if (tree->attributes & HFS_TREE_VARIDXKEYS) key_len = be16_to_cpu(fd->search_key->key_len) + 2; else { - fd->search_key->key_len = tree->max_key_len; + fd->search_key->key_len = cpu_to_be16(tree->max_key_len); key_len = tree->max_key_len + 2; } goto again; diff -Nru a/fs/hfsplus/catalog.c b/fs/hfsplus/catalog.c --- a/fs/hfsplus/catalog.c 2004-05-26 15:01:36 -07:00 +++ b/fs/hfsplus/catalog.c 2004-05-26 15:01:36 -07:00 @@ -165,11 +165,11 @@ if (err != -ENOENT) { if (!err) err = -EEXIST; - goto out; + goto err2; } err = hfs_brec_insert(&fd, &entry, entry_size); if (err) - goto out; + goto err2; hfsplus_cat_build_key(fd.search_key, dir->i_ino, str); entry_size = hfsplus_cat_build_record(&entry, cnid, inode); @@ -178,16 +178,24 @@ /* panic? */ if (!err) err = -EEXIST; - goto out; + goto err1; } err = hfs_brec_insert(&fd, &entry, entry_size); - if (!err) { - dir->i_size++; - mark_inode_dirty(dir); - } -out: + if (err) + goto err1; + + dir->i_size++; + dir->i_mtime = dir->i_ctime = CURRENT_TIME; + mark_inode_dirty(dir); hfs_find_exit(&fd); + return 0; +err1: + hfsplus_cat_build_key(fd.search_key, cnid, NULL); + if (!hfs_brec_find(&fd)) + hfs_brec_remove(&fd); +err2: + hfs_find_exit(&fd); return err; } @@ -259,6 +267,7 @@ goto out; dir->i_size--; + dir->i_mtime = dir->i_ctime = CURRENT_TIME; mark_inode_dirty(dir); out: hfs_find_exit(&fd); @@ -304,6 +313,7 @@ if (err) goto out; dst_dir->i_size++; + dst_dir->i_mtime = dst_dir->i_ctime = CURRENT_TIME; mark_inode_dirty(dst_dir); /* finally remove the old entry */ @@ -315,6 +325,7 @@ if (err) goto out; src_dir->i_size--; + src_dir->i_mtime = src_dir->i_ctime = CURRENT_TIME; mark_inode_dirty(src_dir); /* remove old thread entry */ diff -Nru a/fs/hfsplus/dir.c b/fs/hfsplus/dir.c --- a/fs/hfsplus/dir.c 2004-05-26 15:01:35 -07:00 +++ b/fs/hfsplus/dir.c 2004-05-26 15:01:35 -07:00 @@ -18,6 +18,13 @@ #include "hfsplus_fs.h" #include "hfsplus_raw.h" +static inline void hfsplus_instantiate(struct dentry *dentry, + struct inode *inode, u32 cnid) +{ + dentry->d_fsdata = (void *)(unsigned long)cnid; + d_instantiate(dentry, inode); +} + /* Find the entry inside dir named dentry->d_name */ static struct dentry *hfsplus_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) @@ -52,6 +59,7 @@ goto fail; } cnid = be32_to_cpu(entry.folder.id); + dentry->d_fsdata = (void *)(unsigned long)cnid; } else if (type == HFSPLUS_FILE) { if (fd.entrylength < sizeof(struct hfsplus_cat_file)) { err = -EIO; @@ -233,11 +241,11 @@ res = hfsplus_create_cat(inode->i_ino, dir, &dentry->d_name, inode); if (res) { inode->i_nlink = 0; + hfsplus_delete_inode(inode); iput(inode); return res; } - dentry->d_fsdata = (void *)inode->i_ino; - d_instantiate(dentry, inode); + hfsplus_instantiate(dentry, inode, inode->i_ino); mark_inode_dirty(inode); return 0; } @@ -284,8 +292,7 @@ return res; inode->i_nlink++; - dst_dentry->d_fsdata = (void *)(unsigned long)cnid; - d_instantiate(dst_dentry, inode); + hfsplus_instantiate(dst_dentry, inode, cnid); atomic_inc(&inode->i_count); inode->i_ctime = CURRENT_TIME; mark_inode_dirty(inode); @@ -351,10 +358,11 @@ res = hfsplus_create_cat(inode->i_ino, dir, &dentry->d_name, inode); if (res) { inode->i_nlink = 0; + hfsplus_delete_inode(inode); iput(inode); return res; } - d_instantiate(dentry, inode); + hfsplus_instantiate(dentry, inode, inode->i_ino); mark_inode_dirty(inode); return 0; } @@ -391,7 +399,8 @@ res = page_symlink(inode, symname, strlen(symname) + 1); if (res) { inode->i_nlink = 0; - iput (inode); + hfsplus_delete_inode(inode); + iput(inode); return res; } @@ -399,8 +408,7 @@ res = hfsplus_create_cat(inode->i_ino, dir, &dentry->d_name, inode); if (!res) { - dentry->d_fsdata = (void *)inode->i_ino; - d_instantiate(dentry, inode); + hfsplus_instantiate(dentry, inode, inode->i_ino); mark_inode_dirty(inode); } @@ -421,12 +429,12 @@ res = hfsplus_create_cat(inode->i_ino, dir, &dentry->d_name, inode); if (res) { inode->i_nlink = 0; + hfsplus_delete_inode(inode); iput(inode); return res; } init_special_inode(inode, mode, rdev); - dentry->d_fsdata = (void *)inode->i_ino; - d_instantiate(dentry, inode); + hfsplus_instantiate(dentry, inode, inode->i_ino); mark_inode_dirty(inode); return 0; diff -Nru a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c --- a/fs/hfsplus/inode.c 2004-05-26 15:01:35 -07:00 +++ b/fs/hfsplus/inode.c 2004-05-26 15:01:35 -07:00 @@ -96,7 +96,7 @@ } hfs_bnode_unhash(node); hfs_bnode_free(node); - } while (--i); + } while (--i && nidx < tree->node_count); spin_unlock(&tree->hash_lock); } //printk("releasepage: %lu,%x = %d\n", page->index, mask, res); diff -Nru a/fs/isofs/inode.c b/fs/isofs/inode.c --- a/fs/isofs/inode.c 2004-05-26 15:01:36 -07:00 +++ b/fs/isofs/inode.c 2004-05-26 15:01:36 -07:00 @@ -1207,7 +1207,7 @@ struct iso_directory_record * tmpde = NULL; unsigned int de_len; unsigned long offset; - int volume_seq_no, i; + int i; struct iso_inode_info *ei = ISOFS_I(inode); bh = sb_bread(inode->i_sb, block); @@ -1347,9 +1347,6 @@ test_and_set_uid(&inode->i_uid, sbi->s_uid); test_and_set_gid(&inode->i_gid, sbi->s_gid); } - - /* get the volume sequence number */ - volume_seq_no = isonum_723 (de->volume_sequence_number) ; /* Install the inode operations vector */ if (S_ISREG(inode->i_mode)) { diff -Nru a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c --- a/fs/nfsd/nfs4idmap.c 2004-05-26 15:01:36 -07:00 +++ b/fs/nfsd/nfs4idmap.c 2004-05-26 15:01:36 -07:00 @@ -175,6 +175,14 @@ return 0; } +static void +warn_no_idmapd(struct cache_detail *detail) +{ + printk("nfsd: nfsv4 idmapping failing: has idmapd %s?\n", + detail->last_close? "died" : "not been started"); +} + + static int idtoname_parse(struct cache_detail *, char *, int); static struct ent *idtoname_lookup(struct ent *, int); @@ -186,6 +194,7 @@ .cache_request = idtoname_request, .cache_parse = idtoname_parse, .cache_show = idtoname_show, + .warn_no_listener = warn_no_idmapd, }; int @@ -318,6 +327,7 @@ .cache_request = nametoid_request, .cache_parse = nametoid_parse, .cache_show = nametoid_show, + .warn_no_listener = warn_no_idmapd, }; int diff -Nru a/fs/proc/array.c b/fs/proc/array.c --- a/fs/proc/array.c 2004-05-26 15:01:36 -07:00 +++ b/fs/proc/array.c 2004-05-26 15:01:36 -07:00 @@ -149,6 +149,7 @@ static inline char * task_state(struct task_struct *p, char *buffer) { + struct group_info *group_info; int g; read_lock(&tasklist_lock); @@ -174,12 +175,14 @@ "FDSize:\t%d\n" "Groups:\t", p->files ? p->files->max_fds : 0); + + group_info = p->group_info; + get_group_info(group_info); task_unlock(p); - get_group_info(p->group_info); - for (g = 0; g < min(p->group_info->ngroups,NGROUPS_SMALL); g++) - buffer += sprintf(buffer, "%d ", GROUP_AT(p->group_info,g)); - put_group_info(p->group_info); + for (g = 0; g < min(group_info->ngroups,NGROUPS_SMALL); g++) + buffer += sprintf(buffer, "%d ", GROUP_AT(group_info,g)); + put_group_info(group_info); buffer += sprintf(buffer, "\n"); return buffer; diff -Nru a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c --- a/fs/reiserfs/xattr.c 2004-05-26 15:01:36 -07:00 +++ b/fs/reiserfs/xattr.c 2004-05-26 15:01:36 -07:00 @@ -1370,13 +1370,15 @@ if (!(mode & S_IRWXG)) goto check_groups; - reiserfs_read_lock_xattr_i (inode); - if (need_lock) + if (need_lock) { + reiserfs_read_lock_xattr_i (inode); reiserfs_read_lock_xattrs (inode->i_sb); + } acl = reiserfs_get_acl (inode, ACL_TYPE_ACCESS); - if (need_lock) + if (need_lock) { reiserfs_read_unlock_xattrs (inode->i_sb); - reiserfs_read_unlock_xattr_i (inode); + reiserfs_read_unlock_xattr_i (inode); + } if (IS_ERR (acl)) { if (PTR_ERR (acl) == -ENODATA) goto check_groups; diff -Nru a/fs/udf/namei.c b/fs/udf/namei.c --- a/fs/udf/namei.c 2004-05-26 15:01:36 -07:00 +++ b/fs/udf/namei.c 2004-05-26 15:01:36 -07:00 @@ -154,8 +154,8 @@ { struct fileIdentDesc *fi=NULL; loff_t f_pos; - int block, namelen; - char name[UDF_NAME_LEN], fname[UDF_NAME_LEN]; + int block, flen; + char fname[UDF_NAME_LEN]; char *nameptr; uint8_t lfi; uint16_t liu; @@ -167,9 +167,6 @@ if (!dir) return NULL; - if ( !(namelen = udf_put_filename(dir->i_sb, dentry->d_name.name, name, dentry->d_name.len))) - return NULL; - f_pos = (udf_ext0_offset(dir) >> 2); fibh->soffset = fibh->eoffset = (f_pos & ((dir->i_sb->s_blocksize - 1) >> 2)) << 2; @@ -253,10 +250,13 @@ if (!lfi) continue; - if (udf_match(namelen, name, lfi, nameptr)) + if ((flen = udf_get_filename(dir->i_sb, nameptr, fname, lfi))) { - udf_release_data(bh); - return fi; + if (udf_match(flen, fname, dentry->d_name.len, dentry->d_name.name)) + { + udf_release_data(bh); + return fi; + } } } if (fibh->sbh != fibh->ebh) @@ -353,6 +353,7 @@ char name[UDF_NAME_LEN], fname[UDF_NAME_LEN]; int namelen; loff_t f_pos; + int flen; char *nameptr; loff_t size = (udf_ext0_offset(dir) + dir->i_size) >> 2; int nfidlen; @@ -480,7 +481,8 @@ if (!lfi || !dentry) continue; - if (udf_match(namelen, name, lfi, nameptr)) + if ((flen = udf_get_filename(dir->i_sb, nameptr, fname, lfi)) && + udf_match(flen, fname, dentry->d_name.len, dentry->d_name.name)) { if (fibh->sbh != fibh->ebh) udf_release_data(fibh->ebh); diff -Nru a/include/asm-arm/arch-ixp4xx/uncompress.h b/include/asm-arm/arch-ixp4xx/uncompress.h --- a/include/asm-arm/arch-ixp4xx/uncompress.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-arm/arch-ixp4xx/uncompress.h 2004-05-26 15:01:35 -07:00 @@ -48,7 +48,7 @@ /* * Coyote only has UART2 connected */ - if (__machine_arch_type == MACH_TYPE_ADI_COYOTE) + if (machine_is_adi_coyote()) uart_base = (volatile u32*) IXP4XX_UART2_BASE_PHYS; else uart_base = (volatile u32*) IXP4XX_UART1_BASE_PHYS; diff -Nru a/include/asm-arm/arch-lh7a40x/hardware.h b/include/asm-arm/arch-lh7a40x/hardware.h --- a/include/asm-arm/arch-lh7a40x/hardware.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-arm/arch-lh7a40x/hardware.h 2004-05-26 15:01:35 -07:00 @@ -13,8 +13,6 @@ #ifndef __ASM_ARCH_HARDWARE_H #define __ASM_ARCH_HARDWARE_H -#include <asm/mach-types.h> - #define io_p2v(x) (0xf0000000 | (((x) & 0xfff00000) >> 4) | ((x) & 0x0000ffff)) #define io_v2p(x) ( (((x) & 0x0fff0000) << 4) | ((x) & 0x0000ffff)) diff -Nru a/include/asm-arm/arch-omap/hardware.h b/include/asm-arm/arch-omap/hardware.h --- a/include/asm-arm/arch-omap/hardware.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-arm/arch-omap/hardware.h 2004-05-26 15:01:35 -07:00 @@ -40,7 +40,6 @@ #ifndef __ASSEMBLER__ #include <asm/types.h> #endif -#include <asm/mach-types.h> /* * ---------------------------------------------------------------------------- diff -Nru a/include/asm-arm/arch-omap/uncompress.h b/include/asm-arm/arch-omap/uncompress.h --- a/include/asm-arm/arch-omap/uncompress.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-arm/arch-omap/uncompress.h 2004-05-26 15:01:36 -07:00 @@ -20,7 +20,6 @@ #include <linux/config.h> #include <linux/types.h> #include <linux/serial_reg.h> -#include <asm/mach-types.h> #include <asm/hardware.h> #include <asm/arch/serial.h> diff -Nru a/include/asm-arm/arch-pxa/hardware.h b/include/asm-arm/arch-pxa/hardware.h --- a/include/asm-arm/arch-pxa/hardware.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-arm/arch-pxa/hardware.h 2004-05-26 15:01:35 -07:00 @@ -13,9 +13,6 @@ #ifndef __ASM_ARCH_HARDWARE_H #define __ASM_ARCH_HARDWARE_H -#include <asm/mach-types.h> - - /* * We requires absolute addresses. */ diff -Nru a/include/asm-arm/arch-pxa/lubbock.h b/include/asm-arm/arch-pxa/lubbock.h --- a/include/asm-arm/arch-pxa/lubbock.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-arm/arch-pxa/lubbock.h 2004-05-26 15:01:35 -07:00 @@ -35,3 +35,6 @@ #define LUB_IRQ_SET_CLR __LUB_REG(LUBBOCK_FPGA_PHYS + 0x0d0) #define LUB_GP __LUB_REG(LUBBOCK_FPGA_PHYS + 0x100) +#ifndef __ASSEMBLY__ +extern void lubbock_set_misc_wr(unsigned int mask, unsigned int set); +#endif diff -Nru a/include/asm-arm/hardware/sa1111.h b/include/asm-arm/hardware/sa1111.h --- a/include/asm-arm/hardware/sa1111.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-arm/hardware/sa1111.h 2004-05-26 15:01:36 -07:00 @@ -405,22 +405,6 @@ #define GPIO_C6 (1 << 22) #define GPIO_C7 (1 << 23) -#define PA_DDR __CCREG(0x1000) -#define PA_DRR __CCREG(0x1004) -#define PA_DWR __CCREG(0x1004) -#define PA_SDR __CCREG(0x1008) -#define PA_SSR __CCREG(0x100c) -#define PB_DDR __CCREG(0x1010) -#define PB_DRR __CCREG(0x1014) -#define PB_DWR __CCREG(0x1014) -#define PB_SDR __CCREG(0x1018) -#define PB_SSR __CCREG(0x101c) -#define PC_DDR __CCREG(0x1020) -#define PC_DRR __CCREG(0x1024) -#define PC_DWR __CCREG(0x1024) -#define PC_SDR __CCREG(0x1028) -#define PC_SSR __CCREG(0x102c) - /* * Interrupt Controller * diff -Nru a/include/asm-arm/system.h b/include/asm-arm/system.h --- a/include/asm-arm/system.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-arm/system.h 2004-05-26 15:01:35 -07:00 @@ -137,22 +137,48 @@ #define set_wmb(var, value) do { var = value; wmb(); } while (0) #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); -#define prepare_to_switch() do { } while(0) +#ifdef CONFIG_SMP +/* + * Define our own context switch locking. This allows us to enable + * interrupts over the context switch, otherwise we end up with high + * interrupt latency. The real problem area is switch_mm() which may + * do a full cache flush. + */ +#define prepare_arch_switch(rq,next) \ +do { \ + spin_lock(&(next)->switch_lock); \ + spin_unlock_irq(&(rq)->lock); \ +} while (0) + +#define finish_arch_switch(rq,prev) \ + spin_unlock(&(prev)->switch_lock) + +#define task_running(rq,p) \ + ((rq)->curr == (p) || spin_is_locked(&(p)->switch_lock)) +#else +/* + * Our UP-case is more simple, but we assume knowledge of how + * spin_unlock_irq() and friends are implemented. This avoids + * us needlessly decrementing and incrementing the preempt count. + */ +#define prepare_arch_switch(rq,next) local_irq_enable() +#define finish_arch_switch(rq,prev) spin_unlock(&(rq)->lock) +#define task_running(rq,p) ((rq)->curr == (p)) +#endif /* * switch_to(prev, next) should switch from task `prev' to `next' - * `prev' will never be the same as `next'. - * The `mb' is to tell GCC not to cache `current' across this call. + * `prev' will never be the same as `next'. schedule() itself + * contains the memory barrier to tell GCC not to cache `current'. */ struct thread_info; struct task_struct; extern struct task_struct *__switch_to(struct task_struct *, struct thread_info *, struct thread_info *); -#define switch_to(prev,next,last) \ - do { \ - last = __switch_to(prev,prev->thread_info,next->thread_info); \ - mb(); \ - } while (0) +#define switch_to(prev,next,last) \ +do { \ + last = __switch_to(prev,prev->thread_info,next->thread_info); \ +} while (0) /* * CPU interrupt mask handling. diff -Nru a/include/asm-arm/unistd.h b/include/asm-arm/unistd.h --- a/include/asm-arm/unistd.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-arm/unistd.h 2004-05-26 15:01:36 -07:00 @@ -454,6 +454,7 @@ #define __ARCH_WANT_STAT64 #define __ARCH_WANT_SYS_ALARM #define __ARCH_WANT_SYS_GETHOSTNAME +#define __ARCH_WANT_SYS_PAUSE #define __ARCH_WANT_SYS_TIME #define __ARCH_WANT_SYS_UTIME #define __ARCH_WANT_SYS_SOCKETCALL diff -Nru a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h --- a/include/asm-generic/pgtable.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-generic/pgtable.h 2004-05-26 15:01:35 -07:00 @@ -2,6 +2,11 @@ #define _ASM_GENERIC_PGTABLE_H #ifndef __HAVE_ARCH_PTEP_ESTABLISH + +#ifndef ptep_update_dirty_accessed +#define ptep_update_dirty_accessed(__ptep, __entry, __dirty) set_pte(__ptep, __entry) +#endif + /* * Establish a new mapping: * - flush the old one @@ -10,9 +15,9 @@ * * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock */ -#define ptep_establish(__vma, __address, __ptep, __entry) \ +#define ptep_establish(__vma, __address, __ptep, __entry, __dirty) \ do { \ - set_pte(__ptep, __entry); \ + ptep_update_dirty_accessed(__ptep, __entry, __dirty); \ flush_tlb_page(__vma, __address); \ } while (0) #endif diff -Nru a/include/asm-h8300/module.h b/include/asm-h8300/module.h --- a/include/asm-h8300/module.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-h8300/module.h 2004-05-26 15:01:35 -07:00 @@ -8,4 +8,6 @@ #define Elf_Sym Elf32_Sym #define Elf_Ehdr Elf32_Ehdr +#define MODULE_SYMBOL_PREFIX "_" + #endif /* _ASM_H8/300_MODULE_H */ diff -Nru a/include/asm-i386/dma-mapping.h b/include/asm-i386/dma-mapping.h --- a/include/asm-i386/dma-mapping.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-i386/dma-mapping.h 2004-05-26 15:01:36 -07:00 @@ -2,6 +2,8 @@ #define _ASM_I386_DMA_MAPPING_H #include <asm/cache.h> +#include <asm/io.h> +#include <asm/scatterlist.h> #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) diff -Nru a/include/asm-i386/hw_irq.h b/include/asm-i386/hw_irq.h --- a/include/asm-i386/hw_irq.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-i386/hw_irq.h 2004-05-26 15:01:36 -07:00 @@ -59,7 +59,7 @@ void print_IO_APIC(void); int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn); void send_IPI(int dest, int vector); -void setup_ioapic_dest(cpumask_t mask); +void setup_ioapic_dest(void); extern unsigned long io_apic_irqs; diff -Nru a/include/asm-i386/mach-bigsmp/mach_apic.h b/include/asm-i386/mach-bigsmp/mach_apic.h --- a/include/asm-i386/mach-bigsmp/mach_apic.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-i386/mach-bigsmp/mach_apic.h 2004-05-26 15:01:36 -07:00 @@ -22,13 +22,21 @@ } #define APIC_DFR_VALUE (APIC_DFR_CLUSTER) +/* Round robin the irqs amoung the online cpus */ static inline cpumask_t target_cpus(void) { - return cpu_online_map; + static unsigned long cpu = NR_CPUS; + do { + if (cpu >= NR_CPUS) + cpu = first_cpu_const(cpu_online_map); + else + cpu = next_cpu_const(cpu, cpu_online_map); + } while (cpu >= NR_CPUS); + return mk_cpumask_const(cpumask_of_cpu(cpu)); } #define TARGET_CPUS (target_cpus()) -#define INT_DELIVERY_MODE dest_LowestPrio +#define INT_DELIVERY_MODE dest_Fixed #define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */ #define APIC_BROADCAST_ID (0xff) @@ -141,36 +149,14 @@ return (1); } +/* As we are using single CPU as destination, pick only one CPU here */ static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask) { - int num_bits_set; - int cpus_found = 0; int cpu; int apicid; - num_bits_set = cpus_weight_const(cpumask); - /* Return id to all */ - if (num_bits_set == NR_CPUS) - return (int) 0xFF; - /* - * The cpus in the mask must all be on the apic cluster. If are not - * on the same apicid cluster return default value of TARGET_CPUS. - */ cpu = first_cpu_const(cpumask); apicid = cpu_to_logical_apicid(cpu); - while (cpus_found < num_bits_set) { - if (cpu_isset_const(cpu, cpumask)) { - int new_apicid = cpu_to_logical_apicid(cpu); - if (apicid_cluster(apicid) != - apicid_cluster(new_apicid)){ - printk ("%s: Not a valid mask!\n",__FUNCTION__); - return 0xFF; - } - apicid = apicid | new_apicid; - cpus_found++; - } - cpu++; - } return apicid; } diff -Nru a/include/asm-i386/pgtable.h b/include/asm-i386/pgtable.h --- a/include/asm-i386/pgtable.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-i386/pgtable.h 2004-05-26 15:01:36 -07:00 @@ -317,8 +317,18 @@ /* * The i386 doesn't have any external MMU info: the kernel page * tables contain all the necessary information. + * + * Also, we only update the dirty/accessed state if we set + * the dirty bit by hand in the kernel, since the hardware + * will do the accessed bit for us, and we don't want to + * race with other CPU's that might be updating the dirty + * bit at the same time. */ #define update_mmu_cache(vma,address,pte) do { } while (0) +#define ptep_update_dirty_accessed(__ptep, __entry, __dirty) \ + do { \ + if (__dirty) set_pte(__ptep, __entry); \ + } while (0) /* Encode and de-code a swap entry */ #define __swp_type(x) (((x).val >> 1) & 0x1f) diff -Nru a/include/asm-ppc64/bitops.h b/include/asm-ppc64/bitops.h --- a/include/asm-ppc64/bitops.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-ppc64/bitops.h 2004-05-26 15:01:36 -07:00 @@ -154,6 +154,20 @@ return (old & mask) != 0; } +static __inline__ void set_bits(unsigned long mask, unsigned long *addr) +{ + unsigned long old; + + __asm__ __volatile__( +"1: ldarx %0,0,%3 # set_bit\n\ + or %0,%0,%2\n\ + stdcx. %0,0,%3\n\ + bne- 1b" + : "=&r" (old), "=m" (*addr) + : "r" (mask), "r" (addr), "m" (*addr) + : "cc"); +} + /* * non-atomic versions */ diff -Nru a/include/asm-ppc64/eeh.h b/include/asm-ppc64/eeh.h --- a/include/asm-ppc64/eeh.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-ppc64/eeh.h 2004-05-26 15:01:36 -07:00 @@ -215,7 +215,7 @@ static inline void eeh_outb(u8 val, unsigned long port) { if (_IO_IS_VALID(port)) - return out_8((u8 *)(port+pci_io_base), val); + out_8((u8 *)(port+pci_io_base), val); } static inline u16 eeh_inw(unsigned long port) { @@ -230,7 +230,7 @@ static inline void eeh_outw(u16 val, unsigned long port) { if (_IO_IS_VALID(port)) - return out_le16((u16 *)(port+pci_io_base), val); + out_le16((u16 *)(port+pci_io_base), val); } static inline u32 eeh_inl(unsigned long port) { @@ -245,7 +245,7 @@ static inline void eeh_outl(u32 val, unsigned long port) { if (_IO_IS_VALID(port)) - return out_le32((u32 *)(port+pci_io_base), val); + out_le32((u32 *)(port+pci_io_base), val); } /* in-string eeh macros */ diff -Nru a/include/asm-ppc64/iommu.h b/include/asm-ppc64/iommu.h --- a/include/asm-ppc64/iommu.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-ppc64/iommu.h 2004-05-26 15:01:36 -07:00 @@ -29,10 +29,10 @@ /* * IOMAP_MAX_ORDER defines the largest contiguous block - * of dma (tce) space we can get. IOMAP_MAX_ORDER = 10 - * allows up to 2**9 pages (512 * 4096) = 2 MB + * of dma (tce) space we can get. IOMAP_MAX_ORDER = 13 + * allows up to 2**12 pages (4096 * 4096) = 16 MB */ -#define IOMAP_MAX_ORDER 10 +#define IOMAP_MAX_ORDER 13 /* * Tces come in two formats, one for the virtual bus and a different diff -Nru a/include/asm-ppc64/irq.h b/include/asm-ppc64/irq.h --- a/include/asm-ppc64/irq.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-ppc64/irq.h 2004-05-26 15:01:36 -07:00 @@ -9,6 +9,7 @@ * 2 of the License, or (at your option) any later version. */ +#include <linux/threads.h> #include <asm/atomic.h> /* @@ -77,7 +78,26 @@ struct irqaction; struct pt_regs; -int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); +int handle_irq_event(int, struct pt_regs *, struct irqaction *); + +#ifdef CONFIG_IRQSTACKS +/* + * Per-cpu stacks for handling hard and soft interrupts. + */ +extern struct thread_info *hardirq_ctx[NR_CPUS]; +extern struct thread_info *softirq_ctx[NR_CPUS]; + +extern void irq_ctx_init(void); +extern void call_do_softirq(struct thread_info *tp); +extern int call_handle_irq_event(int irq, struct pt_regs *regs, + struct irqaction *action, struct thread_info *tp); + +#define __ARCH_HAS_DO_SOFTIRQ + +#else +#define irq_ctx_init() + +#endif /* CONFIG_IRQSTACKS */ #endif /* _ASM_IRQ_H */ #endif /* __KERNEL__ */ diff -Nru a/include/asm-ppc64/mmu.h b/include/asm-ppc64/mmu.h --- a/include/asm-ppc64/mmu.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-ppc64/mmu.h 2004-05-26 15:01:36 -07:00 @@ -204,7 +204,7 @@ page = vpn & 0xffff; } - return (vsid & 0x7fffffffff) ^ page; + return (vsid & 0x7fffffffffUL) ^ page; } static inline void __tlbie(unsigned long va, int large) diff -Nru a/include/asm-ppc64/mmu_context.h b/include/asm-ppc64/mmu_context.h --- a/include/asm-ppc64/mmu_context.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-ppc64/mmu_context.h 2004-05-26 15:01:35 -07:00 @@ -175,8 +175,8 @@ #define activate_mm(active_mm, mm) \ switch_mm(active_mm, mm, current); -#define VSID_RANDOMIZER 42470972311 -#define VSID_MASK 0xfffffffff +#define VSID_RANDOMIZER 42470972311UL +#define VSID_MASK 0xfffffffffUL /* This is only valid for kernel (including vmalloc, imalloc and bolted) EA's diff -Nru a/include/asm-ppc64/mmzone.h b/include/asm-ppc64/mmzone.h --- a/include/asm-ppc64/mmzone.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-ppc64/mmzone.h 2004-05-26 15:01:36 -07:00 @@ -23,7 +23,6 @@ extern cpumask_t numa_cpumask_lookup_table[]; extern int nr_cpus_in_node[]; -#define MAX_MEMORY (1UL << 41) /* 16MB regions */ #define MEMORY_INCREMENT_SHIFT 24 #define MEMORY_INCREMENT (1UL << MEMORY_INCREMENT_SHIFT) diff -Nru a/include/asm-ppc64/page.h b/include/asm-ppc64/page.h --- a/include/asm-ppc64/page.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-ppc64/page.h 2004-05-26 15:01:35 -07:00 @@ -12,18 +12,20 @@ #include <linux/config.h> -/* PAGE_SHIFT determines the page size */ -#define PAGE_SHIFT 12 -#ifndef __ASSEMBLY__ -# define PAGE_SIZE (1UL << PAGE_SHIFT) +#ifdef __ASSEMBLY__ + #define ASM_CONST(x) x #else -# define PAGE_SIZE (1 << PAGE_SHIFT) + #define ASM_CONST(x) x##UL #endif + +/* PAGE_SHIFT determines the page size */ +#define PAGE_SHIFT 12 +#define PAGE_SIZE (ASM_CONST(1) << PAGE_SHIFT) #define PAGE_MASK (~(PAGE_SIZE-1)) #define PAGE_OFFSET_MASK (PAGE_SIZE-1) #define SID_SHIFT 28 -#define SID_MASK 0xfffffffff +#define SID_MASK 0xfffffffffUL #define GET_ESID(x) (((x) >> SID_SHIFT) & SID_MASK) #ifdef CONFIG_HUGETLB_PAGE @@ -196,11 +198,11 @@ /* KERNELBASE is defined for performance reasons. */ /* When KERNELBASE moves, those macros may have */ /* to change! */ -#define PAGE_OFFSET 0xC000000000000000 +#define PAGE_OFFSET ASM_CONST(0xC000000000000000) #define KERNELBASE PAGE_OFFSET -#define VMALLOCBASE 0xD000000000000000 -#define IOREGIONBASE 0xE000000000000000 -#define EEHREGIONBASE 0xA000000000000000 +#define VMALLOCBASE 0xD000000000000000UL +#define IOREGIONBASE 0xE000000000000000UL +#define EEHREGIONBASE 0xA000000000000000UL #define IO_REGION_ID (IOREGIONBASE>>REGION_SHIFT) #define EEH_REGION_ID (EEHREGIONBASE>>REGION_SHIFT) diff -Nru a/include/asm-ppc64/spinlock.h b/include/asm-ppc64/spinlock.h --- a/include/asm-ppc64/spinlock.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-ppc64/spinlock.h 2004-05-26 15:01:35 -07:00 @@ -103,7 +103,7 @@ unsigned long tmp2; __asm__ __volatile__( - "b 2f # spin_lock\n\ + "b 3f # spin_lock\n\ 1: mfmsr %1\n\ mtmsrd %3,1\n\ 2:" HMT_LOW diff -Nru a/include/asm-ppc64/thread_info.h b/include/asm-ppc64/thread_info.h --- a/include/asm-ppc64/thread_info.h 2004-05-26 15:01:35 -07:00 +++ b/include/asm-ppc64/thread_info.h 2004-05-26 15:01:35 -07:00 @@ -69,10 +69,6 @@ #define get_thread_info(ti) get_task_struct((ti)->task) #define put_thread_info(ti) put_task_struct((ti)->task) -#if THREAD_SIZE != (4*PAGE_SIZE) -#error update vmlinux.lds and current_thread_info to match -#endif - /* how to get the thread information struct from C */ static inline struct thread_info *current_thread_info(void) { diff -Nru a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h --- a/include/asm-s390/pgtable.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-s390/pgtable.h 2004-05-26 15:01:36 -07:00 @@ -580,7 +580,8 @@ static inline void ptep_establish(struct vm_area_struct *vma, - unsigned long address, pte_t *ptep, pte_t entry) + unsigned long address, pte_t *ptep, + pte_t entry, int dirty) { ptep_clear_flush(vma, address, ptep); set_pte(ptep, entry); diff -Nru a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h --- a/include/asm-x86_64/processor.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-x86_64/processor.h 2004-05-26 15:01:36 -07:00 @@ -345,17 +345,7 @@ /* '6' because it used to be for P6 only (but now covers Pentium 4 as well) */ #define MICROCODE_IOCFREE _IO('6',0) -/* generic versions from gas */ -#define GENERIC_NOP1 ".byte 0x90\n" -#define GENERIC_NOP2 ".byte 0x89,0xf6\n" -#define GENERIC_NOP3 ".byte 0x8d,0x76,0x00\n" -#define GENERIC_NOP4 ".byte 0x8d,0x74,0x26,0x00\n" -#define GENERIC_NOP5 GENERIC_NOP1 GENERIC_NOP4 -#define GENERIC_NOP6 ".byte 0x8d,0xb6,0x00,0x00,0x00,0x00\n" -#define GENERIC_NOP7 ".byte 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00\n" -#define GENERIC_NOP8 GENERIC_NOP1 GENERIC_NOP7 -#ifdef CONFIG_MK8 #define ASM_NOP1 K8_NOP1 #define ASM_NOP2 K8_NOP2 #define ASM_NOP3 K8_NOP3 @@ -364,16 +354,6 @@ #define ASM_NOP6 K8_NOP6 #define ASM_NOP7 K8_NOP7 #define ASM_NOP8 K8_NOP8 -#else -#define ASM_NOP1 GENERIC_NOP1 -#define ASM_NOP2 GENERIC_NOP2 -#define ASM_NOP3 GENERIC_NOP3 -#define ASM_NOP4 GENERIC_NOP4 -#define ASM_NOP5 GENERIC_NOP5 -#define ASM_NOP6 GENERIC_NOP6 -#define ASM_NOP7 GENERIC_NOP7 -#define ASM_NOP8 GENERIC_NOP8 -#endif /* Opteron nops */ #define K8_NOP1 ".byte 0x90\n" diff -Nru a/include/asm-x86_64/unistd.h b/include/asm-x86_64/unistd.h --- a/include/asm-x86_64/unistd.h 2004-05-26 15:01:36 -07:00 +++ b/include/asm-x86_64/unistd.h 2004-05-26 15:01:36 -07:00 @@ -535,11 +535,11 @@ #define __NR_vserver 236 __SYSCALL(__NR_vserver, sys_ni_syscall) #define __NR_mbind 237 -__SYSCALL(__NR_mbind, sys_ni_syscall) +__SYSCALL(__NR_mbind, sys_mbind) #define __NR_set_mempolicy 238 -__SYSCALL(__NR_set_mempolicy, sys_ni_syscall) +__SYSCALL(__NR_set_mempolicy, sys_set_mempolicy) #define __NR_get_mempolicy 239 -__SYSCALL(__NR_get_mempolicy, sys_ni_syscall) +__SYSCALL(__NR_get_mempolicy, sys_get_mempolicy) #define __NR_mq_open 240 __SYSCALL(__NR_mq_open, sys_mq_open) #define __NR_mq_unlink 241 diff -Nru a/include/linux/compat_ioctl.h b/include/linux/compat_ioctl.h --- a/include/linux/compat_ioctl.h 2004-05-26 15:01:36 -07:00 +++ b/include/linux/compat_ioctl.h 2004-05-26 15:01:36 -07:00 @@ -138,6 +138,7 @@ COMPATIBLE_IOCTL(DM_TABLE_STATUS_32) COMPATIBLE_IOCTL(DM_LIST_VERSIONS_32) COMPATIBLE_IOCTL(DM_VERSION) +COMPATIBLE_IOCTL(DM_REMOVE_ALL) COMPATIBLE_IOCTL(DM_LIST_DEVICES) COMPATIBLE_IOCTL(DM_DEV_CREATE) COMPATIBLE_IOCTL(DM_DEV_REMOVE) diff -Nru a/include/linux/fs.h b/include/linux/fs.h --- a/include/linux/fs.h 2004-05-26 15:01:35 -07:00 +++ b/include/linux/fs.h 2004-05-26 15:01:35 -07:00 @@ -13,15 +13,12 @@ #include <linux/types.h> #include <linux/kdev_t.h> #include <linux/ioctl.h> -#include <linux/list.h> #include <linux/dcache.h> #include <linux/stat.h> #include <linux/cache.h> -#include <linux/radix-tree.h> #include <linux/prio_tree.h> #include <linux/kobject.h> #include <asm/atomic.h> -#include <linux/audit.h> struct iovec; struct nameidata; @@ -214,6 +211,9 @@ #ifdef __KERNEL__ +#include <linux/list.h> +#include <linux/radix-tree.h> +#include <linux/audit.h> #include <asm/semaphore.h> #include <asm/byteorder.h> @@ -532,8 +532,8 @@ rwlock_t lock; /* protects pid, uid, euid fields */ int pid; /* pid or -pgrp where SIGIO should be sent */ uid_t uid, euid; /* uid/euid of process setting the owner */ - int signum; /* posix.1b rt signal to be delivered on IO */ void *security; + int signum; /* posix.1b rt signal to be delivered on IO */ }; /* @@ -561,10 +561,10 @@ atomic_t f_count; unsigned int f_flags; mode_t f_mode; + int f_error; loff_t f_pos; struct fown_struct f_owner; unsigned int f_uid, f_gid; - int f_error; struct file_ra_state f_ra; unsigned long f_version; diff -Nru a/include/linux/idr.h b/include/linux/idr.h --- a/include/linux/idr.h 2004-05-26 15:01:35 -07:00 +++ b/include/linux/idr.h 2004-05-26 15:01:35 -07:00 @@ -15,10 +15,10 @@ #if BITS_PER_LONG == 32 # define IDR_BITS 5 -# define IDR_FULL 0xffffffff +# define IDR_FULL 0xfffffffful #elif BITS_PER_LONG == 64 # define IDR_BITS 6 -# define IDR_FULL 0xffffffffffffffff +# define IDR_FULL 0xfffffffffffffffful #else # error "BITS_PER_LONG is not 32 or 64" #endif diff -Nru a/include/linux/mm.h b/include/linux/mm.h --- a/include/linux/mm.h 2004-05-26 15:01:35 -07:00 +++ b/include/linux/mm.h 2004-05-26 15:01:35 -07:00 @@ -189,13 +189,6 @@ * it to keep track of whatever it is we are using the page for at the * moment. Note that we have no way to track which tasks are using * a page. - * - * Try to keep the most commonly accessed fields in single cache lines - * here (16 bytes or greater). This ordering should be particularly - * beneficial on 32-bit processors. - * - * The first line is data used in page cache lookup, the second line - * is used for linear searches (eg. clock algorithm scans). */ struct page { page_flags_t flags; /* Atomic flags, some possibly diff -Nru a/include/linux/pci_ids.h b/include/linux/pci_ids.h --- a/include/linux/pci_ids.h 2004-05-26 15:01:35 -07:00 +++ b/include/linux/pci_ids.h 2004-05-26 15:01:35 -07:00 @@ -1648,8 +1648,8 @@ #define PCI_SUBDEVICE_ID_CHASE_PCIRAS8 0xF010 #define PCI_VENDOR_ID_AUREAL 0x12eb -#define PCI_DEVICE_ID_AUREAL_VORTEX 0x0001 -#define PCI_DEVICE_ID_AUREAL_VORTEX2 0x0002 +#define PCI_DEVICE_ID_AUREAL_VORTEX_1 0x0001 +#define PCI_DEVICE_ID_AUREAL_VORTEX_2 0x0002 #define PCI_DEVICE_ID_AUREAL_ADVANTAGE 0x0003 #define PCI_VENDOR_ID_ELECTRONICDESIGNGMBH 0x12f8 diff -Nru a/include/linux/sched.h b/include/linux/sched.h --- a/include/linux/sched.h 2004-05-26 15:01:35 -07:00 +++ b/include/linux/sched.h 2004-05-26 15:01:35 -07:00 @@ -293,7 +293,7 @@ * in the range MAX_RT_PRIO..MAX_PRIO-1. Priority values * are inverted: lower p->prio value means higher priority. * - * The MAX_RT_USER_PRIO value allows the actual maximum + * The MAX_USER_RT_PRIO value allows the actual maximum * RT priority to be separate from the value exported to * user-space. This allows kernel threads to set their * priority to a value higher than any user task. Note: diff -Nru a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h --- a/include/linux/sunrpc/cache.h 2004-05-26 15:01:36 -07:00 +++ b/include/linux/sunrpc/cache.h 2004-05-26 15:01:36 -07:00 @@ -99,6 +99,7 @@ atomic_t readers; /* how many time is /chennel open */ time_t last_close; /* if no readers, when did last close */ time_t last_warn; /* when we last warned about no readers */ + void (*warn_no_listener)(struct cache_detail *cd); }; diff -Nru a/include/linux/syscalls.h b/include/linux/syscalls.h --- a/include/linux/syscalls.h 2004-05-26 15:01:36 -07:00 +++ b/include/linux/syscalls.h 2004-05-26 15:01:36 -07:00 @@ -256,7 +256,7 @@ asmlinkage unsigned long sys_mremap(unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr); -long sys_remap_file_pages(unsigned long start, unsigned long size, +asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long flags); asmlinkage long sys_msync(unsigned long start, size_t len, int flags); diff -Nru a/include/pcmcia/ss.h b/include/pcmcia/ss.h --- a/include/pcmcia/ss.h 2004-05-26 15:01:36 -07:00 +++ b/include/pcmcia/ss.h 2004-05-26 15:01:36 -07:00 @@ -145,6 +145,7 @@ u_int Attributes; ioaddr_t BasePort, NumPorts; ioaddr_t InUse, Config; + struct resource *res; } io_window_t; #define WINDOW_MAGIC 0xB35C diff -Nru a/include/scsi/scsi_devinfo.h b/include/scsi/scsi_devinfo.h --- a/include/scsi/scsi_devinfo.h 2004-05-26 15:01:35 -07:00 +++ b/include/scsi/scsi_devinfo.h 2004-05-26 15:01:35 -07:00 @@ -4,7 +4,8 @@ * Flags for SCSI devices that need special treatment */ #define BLIST_NOLUN 0x001 /* Only scan LUN 0 */ -#define BLIST_FORCELUN 0x002 /* Known to have LUNs, force scanning */ +#define BLIST_FORCELUN 0x002 /* Known to have LUNs, force scanning, + deprecated: Use max_luns=N */ #define BLIST_BORKEN 0x004 /* Flag for broken handshaking */ #define BLIST_KEY 0x008 /* unlock by special command */ #define BLIST_SINGLELUN 0x010 /* Do not use LUNs in parallel */ @@ -20,4 +21,7 @@ #define BLIST_MS_SKIP_PAGE_3F 0x4000 /* do not send ms page 0x3f */ #define BLIST_USE_10_BYTE_MS 0x8000 /* use 10 byte ms before 6 byte ms */ #define BLIST_MS_192_BYTES_FOR_3F 0x10000 /* 192 byte ms page 0x3f request */ +#define BLIST_REPORTLUN2 0x20000 /* try REPORT_LUNS even for SCSI-2 devs + (if HBA supports more than 8 LUNs) */ +#define BLIST_NOREPORTLUN 0x40000 /* don't try REPORT_LUNS scan (SCSI-3 devs) */ #endif diff -Nru a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h --- a/include/sound/ac97_codec.h 2004-05-26 15:01:36 -07:00 +++ b/include/sound/ac97_codec.h 2004-05-26 15:01:36 -07:00 @@ -51,7 +51,7 @@ #define AC97_REC_GAIN_MIC 0x1e /* Record Gain MIC (optional) */ #define AC97_GENERAL_PURPOSE 0x20 /* General Purpose (optional) */ #define AC97_3D_CONTROL 0x22 /* 3D Control (optional) */ -#define AC97_RESERVED 0x24 /* Reserved */ +#define AC97_INT_PAGING 0x24 /* Audio Interrupt & Paging (AC'97 2.3) */ #define AC97_POWERDOWN 0x26 /* Powerdown control / status */ /* range 0x28-0x3a - AUDIO AC'97 2.0 extensions */ #define AC97_EXTENDED_ID 0x28 /* Extended Audio ID */ @@ -82,6 +82,13 @@ /* range 0x5a-0x7b - Vendor Specific */ #define AC97_VENDOR_ID1 0x7c /* Vendor ID1 */ #define AC97_VENDOR_ID2 0x7e /* Vendor ID2 / revision */ +/* range 0x60-0x6f (page 1) - extended codec registers */ +#define AC97_CODEC_CLASS_REV 0x60 /* Codec Class/Revision */ +#define AC97_PCI_SVID 0x62 /* PCI Subsystem Vendor ID */ +#define AC97_PCI_SID 0x64 /* PCI Subsystem ID */ +#define AC97_FUNC_SELECT 0x66 /* Function Select */ +#define AC97_FUNC_INFO 0x68 /* Function Information */ +#define AC97_SENSE_INFO 0x6a /* Sense Details */ /* slot allocation */ #define AC97_SLOT_TAG 0 @@ -139,6 +146,7 @@ #define AC97_EI_AMAP 0x0200 /* indicates optional slot/DAC mapping based on codec ID */ #define AC97_EI_REV_MASK 0x0c00 /* AC'97 revision mask */ #define AC97_EI_REV_22 0x0400 /* AC'97 revision 2.2 */ +#define AC97_EI_REV_23 0x0800 /* AC'97 revision 2.3 */ #define AC97_EI_REV_SHIFT 10 #define AC97_EI_ADDR_MASK 0xc000 /* physical codec ID (address) */ #define AC97_EI_ADDR_SHIFT 14 @@ -179,6 +187,16 @@ #define AC97_SC_SPSR_32K 0x3000 /* Use 32kHz Sample rate */ #define AC97_SC_DRS 0x4000 /* Double Rate S/PDIF */ #define AC97_SC_V 0x8000 /* Validity status */ + +/* Interrupt and Paging bit defines (AC'97 2.3) */ +#define AC97_PAGE_MASK 0x000f /* Page Selector */ +#define AC97_PAGE_VENDOR 0 /* Vendor-specific registers */ +#define AC97_PAGE_1 1 /* Extended Codec Registers page 1 */ +#define AC97_INT_ENABLE 0x0800 /* Interrupt Enable */ +#define AC97_INT_SENSE 0x1000 /* Sense Cycle */ +#define AC97_INT_CAUSE_SENSE 0x2000 /* Sense Cycle Completed (RO) */ +#define AC97_INT_CAUSE_GPIO 0x4000 /* GPIO bits changed (RO) */ +#define AC97_INT_STATUS 0x8000 /* Interrupt Status */ /* extended modem ID bit defines */ #define AC97_MEI_LINE1 0x0001 /* Line1 present */ diff -Nru a/include/sound/ad1848.h b/include/sound/ad1848.h --- a/include/sound/ad1848.h 2004-05-26 15:01:35 -07:00 +++ b/include/sound/ad1848.h 2004-05-26 15:01:35 -07:00 @@ -147,9 +147,6 @@ int calibrate_mute; int dma_size; int thinkpad_flag; /* Thinkpad CS4248 needs some extra help */ -#ifdef CONFIG_PM - struct pm_dev *thinkpad_pmstate; -#endif spinlock_t reg_lock; struct semaphore open_mutex; diff -Nru a/include/sound/asound.h b/include/sound/asound.h --- a/include/sound/asound.h 2004-05-26 15:01:36 -07:00 +++ b/include/sound/asound.h 2004-05-26 15:01:36 -07:00 @@ -153,7 +153,7 @@ * * *****************************************************************************/ -#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6) +#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7) typedef unsigned long sndrv_pcm_uframes_t; typedef long sndrv_pcm_sframes_t; @@ -428,6 +428,22 @@ sndrv_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */ }; +#define SNDRV_PCM_SYNC_PTR_HWSYNC (1<<0) /* execute hwsync */ +#define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */ +#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */ + +struct sndrv_pcm_sync_ptr { + unsigned int flags; + union { + struct sndrv_pcm_mmap_status status; + unsigned char reserved[64]; + } s; + union { + struct sndrv_pcm_mmap_control control; + unsigned char reserved[64]; + } c; +}; + struct sndrv_xferi { sndrv_pcm_sframes_t result; void *buf; @@ -451,6 +467,7 @@ SNDRV_PCM_IOCTL_STATUS = _IOR('A', 0x20, struct sndrv_pcm_status), SNDRV_PCM_IOCTL_DELAY = _IOR('A', 0x21, sndrv_pcm_sframes_t), SNDRV_PCM_IOCTL_HWSYNC = _IO('A', 0x22), + SNDRV_PCM_IOCTL_SYNC_PTR = _IOWR('A', 0x23, struct sndrv_pcm_sync_ptr), SNDRV_PCM_IOCTL_CHANNEL_INFO = _IOR('A', 0x32, struct sndrv_pcm_channel_info), SNDRV_PCM_IOCTL_PREPARE = _IO('A', 0x40), SNDRV_PCM_IOCTL_RESET = _IO('A', 0x41), @@ -538,7 +555,7 @@ * Timer section - /dev/snd/timer */ -#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 1) +#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 2) enum sndrv_timer_class { SNDRV_TIMER_CLASS_NONE = -1, @@ -619,6 +636,7 @@ #define SNDRV_TIMER_PSFLG_AUTO (1<<0) /* auto start, otherwise one-shot */ #define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1) /* exclusive use, precise start/stop/pause/continue */ +#define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2) /* write early event to the poll queue */ struct sndrv_timer_params { unsigned int flags; /* flags - SNDRV_MIXER_PSFLG_* */ @@ -667,6 +685,7 @@ SNDRV_TIMER_EVENT_STOP, /* val = 0 */ SNDRV_TIMER_EVENT_CONTINUE, /* val = resolution in ns */ SNDRV_TIMER_EVENT_PAUSE, /* val = 0 */ + SNDRV_TIMER_EVENT_EARLY, /* val = 0, early event */ /* master timer events for slave timer instances */ SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10, SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10, diff -Nru a/include/sound/core.h b/include/sound/core.h --- a/include/sound/core.h 2004-05-26 15:01:36 -07:00 +++ b/include/sound/core.h 2004-05-26 15:01:36 -07:00 @@ -163,8 +163,10 @@ struct device *dev; #ifdef CONFIG_PM - int (*set_power_state) (snd_card_t *card, unsigned int state); - void *power_state_private_data; + int (*pm_suspend)(snd_card_t *card, unsigned int state); + int (*pm_resume)(snd_card_t *card, unsigned int state); + struct pm_dev *pm_dev; /* for ISA */ + void *pm_private_data; unsigned int power_state; /* power state */ struct semaphore power_lock; /* power lock */ wait_queue_head_t power_sleep; @@ -199,12 +201,32 @@ card->power_state = state; wake_up(&card->power_sleep); } +int snd_card_set_pm_callback(snd_card_t *card, + int (*suspend)(snd_card_t *, unsigned int), + int (*resume)(snd_card_t *, unsigned int), + void *private_data); +int snd_card_set_dev_pm_callback(snd_card_t *card, int type, + int (*suspend)(snd_card_t *, unsigned int), + int (*resume)(snd_card_t *, unsigned int), + void *private_data); +#define snd_card_set_isa_pm_callback(card,suspend,resume,data) \ + snd_card_set_dev_pm_callback(card, PM_ISA_DEV, suspend, resume, data) +#ifndef SND_PCI_PM_CALLBACKS +int snd_card_pci_suspend(struct pci_dev *dev, u32 state); +int snd_card_pci_resume(struct pci_dev *dev); +#define SND_PCI_PM_CALLBACKS \ + .suspend = snd_card_pci_suspend, .resume = snd_card_pci_resume +#endif #else #define snd_power_lock(card) do { (void)(card); } while (0) #define snd_power_unlock(card) do { (void)(card); } while (0) static inline int snd_power_wait(snd_card_t *card, unsigned int state, struct file *file) { return 0; } #define snd_power_get_state(card) SNDRV_CTL_POWER_D0 #define snd_power_change_state(card, state) do { (void)(card); } while (0) +#define snd_card_set_pm_callback(card,suspend,resume,data) -EINVAL +#define snd_card_set_dev_pm_callback(card,suspend,resume,data) -EINVAL +#define snd_card_set_isa_pm_callback(card,suspend,resume,data) -EINVAL +#define SND_PCI_PM_CALLBACKS #endif /* device.c */ diff -Nru a/include/sound/cs4231.h b/include/sound/cs4231.h --- a/include/sound/cs4231.h 2004-05-26 15:01:36 -07:00 +++ b/include/sound/cs4231.h 2004-05-26 15:01:36 -07:00 @@ -295,7 +295,6 @@ void (*set_capture_format) (cs4231_t *chip, snd_pcm_hw_params_t *hw_params, unsigned char cdfr); void (*trigger) (cs4231_t *chip, unsigned int what, int start); #ifdef CONFIG_PM - struct pm_dev *pm_dev; void (*suspend) (cs4231_t *chip); void (*resume) (cs4231_t *chip); #endif diff -Nru a/include/sound/cs46xx.h b/include/sound/cs46xx.h --- a/include/sound/cs46xx.h 2004-05-26 15:01:35 -07:00 +++ b/include/sound/cs46xx.h 2004-05-26 15:01:35 -07:00 @@ -1737,9 +1737,6 @@ struct snd_cs46xx_gameport *gameport; -#ifdef CONFIG_PM - struct pm_dev *pm_dev; -#endif #ifdef CONFIG_SND_CS46XX_DEBUG_GPIO int current_gpio; #endif @@ -1770,10 +1767,5 @@ int snd_cs46xx_midi(cs46xx_t *chip, int device, snd_rawmidi_t **rmidi); int snd_cs46xx_start_dsp(cs46xx_t *chip); void snd_cs46xx_gameport(cs46xx_t *chip); - -#ifdef CONFIG_PM -void snd_cs46xx_suspend(cs46xx_t *chip); -void snd_cs46xx_resume(cs46xx_t *chip); -#endif #endif /* __SOUND_CS46XX_H */ diff -Nru a/include/sound/emu10k1.h b/include/sound/emu10k1.h --- a/include/sound/emu10k1.h 2004-05-26 15:01:35 -07:00 +++ b/include/sound/emu10k1.h 2004-05-26 15:01:35 -07:00 @@ -650,7 +650,8 @@ #define SPBYPASS_FORMAT 0x00000f00 /* If 1, SPDIF XX uses 24 bit, if 0 - 20 bit */ #define AC97SLOT 0x5f /* additional AC97 slots enable bits */ -#define AC97SLOT_10K2 0x03 +#define AC97SLOT_REAR_RIGHT 0x01 /* Rear left */ +#define AC97SLOT_REAR_LEFT 0x02 /* Rear right */ #define AC97SLOT_CNTR 0x10 /* Center enable */ #define AC97SLOT_LFE 0x20 /* LFE enable */ @@ -937,7 +938,8 @@ struct resource *res_port; int APS: 1, /* APS flag */ no_ac97: 1, /* no AC'97 */ - tos_link: 1; /* tos link detected */ + tos_link: 1, /* tos link detected */ + rear_ac97: 1; /* rear channels are on AC'97 */ unsigned int audigy; /* is Audigy? */ unsigned int revision; /* chip revision */ unsigned int serial; /* serial number */ @@ -1184,8 +1186,8 @@ #define EXTOUT_AC97_R 0x01 /* AC'97 playback channel - right */ #define EXTOUT_TOSLINK_L 0x02 /* LiveDrive - TOSLink Optical - left */ #define EXTOUT_TOSLINK_R 0x03 /* LiveDrive - TOSLink Optical - right */ -#define EXTOUT_CENTER 0x04 /* SB Live 5.1 - center */ -#define EXTOUT_LFE 0x05 /* SB Live 5.1 - LFE */ +#define EXTOUT_AC97_CENTER 0x04 /* SB Live 5.1 - center */ +#define EXTOUT_AC97_LFE 0x05 /* SB Live 5.1 - LFE */ #define EXTOUT_HEADPHONE_L 0x06 /* LiveDrive - Headphone - left */ #define EXTOUT_HEADPHONE_R 0x07 /* LiveDrive - Headphone - right */ #define EXTOUT_REAR_L 0x08 /* Rear channel - left */ @@ -1193,6 +1195,8 @@ #define EXTOUT_ADC_CAP_L 0x0a /* ADC Capture buffer - left */ #define EXTOUT_ADC_CAP_R 0x0b /* ADC Capture buffer - right */ #define EXTOUT_MIC_CAP 0x0c /* MIC Capture buffer */ +#define EXTOUT_AC97_REAR_L 0x0d /* SB Live 5.1 (c) 2003 - Rear Left */ +#define EXTOUT_AC97_REAR_R 0x0e /* SB Live 5.1 (c) 2003 - Rear Right */ #define EXTOUT_ACENTER 0x11 /* Analog Center */ #define EXTOUT_ALFE 0x12 /* Analog LFE */ diff -Nru a/include/sound/initval.h b/include/sound/initval.h --- a/include/sound/initval.h 2004-05-26 15:01:35 -07:00 +++ b/include/sound/initval.h 2004-05-26 15:01:35 -07:00 @@ -133,44 +133,4 @@ } #endif -#if defined(SNDRV_GET_ID) && !defined(MODULE) -#include <linux/ctype.h> -#include <linux/init.h> -#include <linux/bootmem.h> -static int __init get_id(char **str, char **dst) -{ - char *s; - - if (!(*str) || !(**str)) - return 0; - for (s = *str; isalpha(*s) || isdigit(*s) || *s == '_'; s++); - if (s != *str) { - int len = s - *str; - char *d = (char *)alloc_bootmem(len + 1); - if (d != NULL) { - memcpy(*dst = d, *str, len); - d[len] = '\0'; - } - } - if (*s == ',') { - *str = s + 1; - return 2; - } - *str = s; - return 1; -} -#endif - -/* simple wrapper for long variable. - * the value more than 32bit won't work! - */ -inline static int get_option_long(char **str, long *valp) -{ - int val, ret; - ret = get_option(str, &val); - if (ret) - *valp = val; - return ret; -} - #endif /* __SOUND_INITVAL_H */ diff -Nru a/include/sound/timer.h b/include/sound/timer.h --- a/include/sound/timer.h 2004-05-26 15:01:36 -07:00 +++ b/include/sound/timer.h 2004-05-26 15:01:36 -07:00 @@ -60,6 +60,7 @@ #define SNDRV_TIMER_IFLG_FAST 0x00000010 /* fast callback (do not use tasklet) */ #define SNDRV_TIMER_IFLG_CALLBACK 0x00000020 /* timer callback is active */ #define SNDRV_TIMER_IFLG_EXCLUSIVE 0x00000040 /* exclusive owner - no more instances */ +#define SNDRV_TIMER_IFLG_EARLY_EVENT 0x00000080 /* write early event to the poll queue */ #define SNDRV_TIMER_FLG_CHANGE 0x00000001 #define SNDRV_TIMER_FLG_RESCHED 0x00000002 /* need reschedule */ diff -Nru a/include/sound/trident.h b/include/sound/trident.h --- a/include/sound/trident.h 2004-05-26 15:01:36 -07:00 +++ b/include/sound/trident.h 2004-05-26 15:01:36 -07:00 @@ -54,13 +54,6 @@ #define TRIDENT_DEVICE_ID_NX ((PCI_VENDOR_ID_TRIDENT<<16)|PCI_DEVICE_ID_TRIDENT_4DWAVE_NX) #define TRIDENT_DEVICE_ID_SI7018 ((PCI_VENDOR_ID_SI<<16)|PCI_DEVICE_ID_SI_7018) -/* Trident chipsets have 1GB memory limit */ -#ifdef __alpha__ -#define TRIDENT_DMA_TYPE SNDRV_DMA_TYPE_PCI_16MB -#else -#define TRIDENT_DMA_TYPE SNDRV_DMA_TYPE_PCI -#endif - #define SNDRV_SEQ_DEV_ID_TRIDENT "trident-synth" #define SNDRV_TRIDENT_VOICE_TYPE_PCM 0 @@ -487,11 +480,5 @@ int snd_trident_synth_free(trident_t *trident, snd_util_memblk_t *blk); int snd_trident_synth_bzero(trident_t *trident, snd_util_memblk_t *blk, int offset, int size); int snd_trident_synth_copy_from_user(trident_t *trident, snd_util_memblk_t *blk, int offset, const char *data, int size); - -/* Power Management */ -#ifdef CONFIG_PM -void snd_trident_suspend(trident_t *trident); -void snd_trident_resume(trident_t *trident); -#endif #endif /* __SOUND_TRIDENT_H */ diff -Nru a/include/sound/uda1341.h b/include/sound/uda1341.h --- a/include/sound/uda1341.h 2004-05-26 15:01:36 -07:00 +++ b/include/sound/uda1341.h 2004-05-26 15:01:36 -07:00 @@ -15,7 +15,7 @@ * features support */ -/* $Id: uda1341.h,v 1.5 2003/04/19 13:34:32 perex Exp $ */ +/* $Id: uda1341.h,v 1.6 2004/05/03 17:36:50 tiwai Exp $ */ #define UDA1341_ALSA_NAME "snd-uda1341" diff -Nru a/include/sound/version.h b/include/sound/version.h --- a/include/sound/version.h 2004-05-26 15:01:35 -07:00 +++ b/include/sound/version.h 2004-05-26 15:01:35 -07:00 @@ -1,3 +1,3 @@ /* include/version.h. Generated by configure. */ -#define CONFIG_SND_VERSION "1.0.4rc2" -#define CONFIG_SND_DATE " (Tue Mar 30 08:19:30 2004 UTC)" +#define CONFIG_SND_VERSION "1.0.4" +#define CONFIG_SND_DATE " (Mon May 17 14:31:44 2004 UTC)" diff -Nru a/include/sound/ymfpci.h b/include/sound/ymfpci.h --- a/include/sound/ymfpci.h 2004-05-26 15:01:35 -07:00 +++ b/include/sound/ymfpci.h 2004-05-26 15:01:35 -07:00 @@ -393,11 +393,6 @@ int snd_ymfpci_voice_alloc(ymfpci_t *chip, ymfpci_voice_type_t type, int pair, ymfpci_voice_t **rvoice); int snd_ymfpci_voice_free(ymfpci_t *chip, ymfpci_voice_t *pvoice); -#ifdef CONFIG_PM -void snd_ymfpci_suspend(ymfpci_t *chip); -void snd_ymfpci_resume(ymfpci_t *chip); -#endif - #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE)) #define SUPPORT_JOYSTICK #endif diff -Nru a/init/initramfs.c b/init/initramfs.c --- a/init/initramfs.c 2004-05-26 15:01:35 -07:00 +++ b/init/initramfs.c 2004-05-26 15:01:35 -07:00 @@ -207,7 +207,7 @@ static int __init do_skip(void) { - if (this_header + count <= next_header) { + if (this_header + count < next_header) { eat(count); return 1; } else { diff -Nru a/kernel/fork.c b/kernel/fork.c --- a/kernel/fork.c 2004-05-26 15:01:35 -07:00 +++ b/kernel/fork.c 2004-05-26 15:01:35 -07:00 @@ -333,9 +333,9 @@ /* insert tmp into the share list, just after mpnt */ spin_lock(&file->f_mapping->i_mmap_lock); - flush_dcache_mmap_lock(mapping); + flush_dcache_mmap_lock(file->f_mapping); vma_prio_tree_add(tmp, mpnt); - flush_dcache_mmap_unlock(mapping); + flush_dcache_mmap_unlock(file->f_mapping); spin_unlock(&file->f_mapping->i_mmap_lock); } diff -Nru a/kernel/printk.c b/kernel/printk.c --- a/kernel/printk.c 2004-05-26 15:01:36 -07:00 +++ b/kernel/printk.c 2004-05-26 15:01:36 -07:00 @@ -472,6 +472,27 @@ } /* + * Zap console related locks when oopsing. Only zap at most once + * every 10 seconds, to leave time for slow consoles to print a + * full oops. + */ +static void zap_locks(void) +{ + static unsigned long oops_timestamp; + + if (time_after_eq(jiffies, oops_timestamp) && + !time_after(jiffies, oops_timestamp + 30*HZ)) + return; + + oops_timestamp = jiffies; + + /* If a crash is occurring, make sure we can't deadlock */ + spin_lock_init(&logbuf_lock); + /* And make sure that we print immediately */ + init_MUTEX(&console_sem); +} + +/* * This is printk. It can be called from any context. We want it to work. * * We try to grab the console_sem. If we succeed, it's easy - we log the output and @@ -493,12 +514,8 @@ static char printk_buf[1024]; static int log_level_unknown = 1; - if (oops_in_progress) { - /* If a crash is occurring, make sure we can't deadlock */ - spin_lock_init(&logbuf_lock); - /* And make sure that we print immediately */ - init_MUTEX(&console_sem); - } + if (unlikely(oops_in_progress)) + zap_locks(); /* This stops the holder of console_sem just where we want him */ spin_lock_irqsave(&logbuf_lock, flags); diff -Nru a/kernel/sched.c b/kernel/sched.c --- a/kernel/sched.c 2004-05-26 15:01:36 -07:00 +++ b/kernel/sched.c 2004-05-26 15:01:36 -07:00 @@ -141,8 +141,7 @@ (v1) * (v2_max) / (v1_max) #define DELTA(p) \ - (SCALE(TASK_NICE(p), 40, MAX_USER_PRIO*PRIO_BONUS_RATIO/100) + \ - INTERACTIVE_DELTA) + (SCALE(TASK_NICE(p), 40, MAX_BONUS) + INTERACTIVE_DELTA) #define TASK_INTERACTIVE(p) \ ((p)->prio <= (p)->static_prio - DELTA(p)) @@ -2991,10 +2990,9 @@ /* * Since we are going to call schedule() anyway, there's - * no need to preempt: + * no need to preempt or enable interrupts: */ _raw_spin_unlock(&rq->lock); - local_irq_enable(); preempt_enable_no_resched(); schedule(); diff -Nru a/kernel/sys.c b/kernel/sys.c --- a/kernel/sys.c 2004-05-26 15:01:35 -07:00 +++ b/kernel/sys.c 2004-05-26 15:01:35 -07:00 @@ -1281,8 +1281,12 @@ groups_sort(group_info); get_group_info(group_info); + + task_lock(current); old_info = current->group_info; current->group_info = group_info; + task_unlock(current); + put_group_info(old_info); return 0; @@ -1302,6 +1306,7 @@ if (gidsetsize < 0) return -EINVAL; + /* no need to grab task_lock here; it cannot change */ get_group_info(current->group_info); i = current->group_info->ngroups; if (gidsetsize) { diff -Nru a/mm/memory.c b/mm/memory.c --- a/mm/memory.c 2004-05-26 15:01:35 -07:00 +++ b/mm/memory.c 2004-05-26 15:01:35 -07:00 @@ -1004,7 +1004,7 @@ flush_cache_page(vma, address); entry = maybe_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot)), vma); - ptep_establish(vma, address, page_table, entry); + ptep_establish(vma, address, page_table, entry, 1); update_mmu_cache(vma, address, entry); } @@ -1056,7 +1056,7 @@ flush_cache_page(vma, address); entry = maybe_mkwrite(pte_mkyoung(pte_mkdirty(pte)), vma); - ptep_establish(vma, address, page_table, entry); + ptep_establish(vma, address, page_table, entry, 1); update_mmu_cache(vma, address, entry); pte_unmap(page_table); spin_unlock(&mm->page_table_lock); @@ -1646,7 +1646,7 @@ entry = pte_mkdirty(entry); } entry = pte_mkyoung(entry); - ptep_establish(vma, address, pte, entry); + ptep_establish(vma, address, pte, entry, write_access); update_mmu_cache(vma, address, entry); pte_unmap(pte); spin_unlock(&mm->page_table_lock); diff -Nru a/mm/mempolicy.c b/mm/mempolicy.c --- a/mm/mempolicy.c 2004-05-26 15:01:36 -07:00 +++ b/mm/mempolicy.c 2004-05-26 15:01:36 -07:00 @@ -444,17 +444,16 @@ /* Copy a kernel node mask to user space */ static int copy_nodes_to_user(unsigned long *user_mask, unsigned long maxnode, - unsigned long *nodes) + void *nodes, unsigned nbytes) { unsigned long copy = ALIGN(maxnode-1, 64) / 8; - if (copy > sizeof(nodes)) { + if (copy > nbytes) { if (copy > PAGE_SIZE) return -EINVAL; - if (clear_user((char*)user_mask + sizeof(nodes), - copy - sizeof(nodes))) + if (clear_user((char*)user_mask + nbytes, copy - nbytes)) return -EFAULT; - copy = sizeof(nodes); + copy = nbytes; } return copy_to_user(user_mask, nodes, copy) ? -EFAULT : 0; } @@ -514,7 +513,7 @@ if (nmask) { DECLARE_BITMAP(nodes, MAX_NUMNODES); get_zonemask(pol, nodes); - err = copy_nodes_to_user(nmask, maxnode, nodes); + err = copy_nodes_to_user(nmask, maxnode, nodes, sizeof(nodes)); } out: diff -Nru a/mm/mmap.c b/mm/mmap.c --- a/mm/mmap.c 2004-05-26 15:01:36 -07:00 +++ b/mm/mmap.c 2004-05-26 15:01:36 -07:00 @@ -951,7 +951,7 @@ } if (flags & MAP_POPULATE) { up_write(&mm->mmap_sem); - sys_remap_file_pages(addr, len, prot, + sys_remap_file_pages(addr, len, 0, pgoff, flags & MAP_NONBLOCK); down_write(&mm->mmap_sem); } diff -Nru a/mm/prio_tree.c b/mm/prio_tree.c --- a/mm/prio_tree.c 2004-05-26 15:01:36 -07:00 +++ b/mm/prio_tree.c 2004-05-26 15:01:36 -07:00 @@ -661,4 +661,3 @@ } else return NULL; } -EXPORT_SYMBOL(vma_prio_tree_next); diff -Nru a/mm/rmap.c b/mm/rmap.c --- a/mm/rmap.c 2004-05-26 15:01:36 -07:00 +++ b/mm/rmap.c 2004-05-26 15:01:36 -07:00 @@ -537,11 +537,7 @@ * there there won't be many ptes located within the scan cluster. In this case * maybe we could scan further - to the end of the pte page, perhaps. */ -#define CLUSTER_SIZE (32 * PAGE_SIZE) -#if CLUSTER_SIZE > PMD_SIZE -#undef CLUSTER_SIZE -#define CLUSTER_SIZE PMD_SIZE -#endif +#define CLUSTER_SIZE min(32*PAGE_SIZE, PMD_SIZE) #define CLUSTER_MASK (~(CLUSTER_SIZE - 1)) static int try_to_unmap_cluster(unsigned long cursor, diff -Nru a/net/8021q/vlan.h b/net/8021q/vlan.h --- a/net/8021q/vlan.h 2004-05-26 15:01:36 -07:00 +++ b/net/8021q/vlan.h 2004-05-26 15:01:36 -07:00 @@ -7,7 +7,7 @@ /* #define VLAN_DEBUG */ #define VLAN_ERR KERN_ERR -#define VLAN_INF KERN_ALERT +#define VLAN_INF KERN_INFO #define VLAN_DBG KERN_ALERT /* change these... to debug, having a hard time * changing the log level at run-time..for some reason. */ diff -Nru a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c --- a/net/bluetooth/rfcomm/core.c 2004-05-26 15:01:35 -07:00 +++ b/net/bluetooth/rfcomm/core.c 2004-05-26 15:01:35 -07:00 @@ -470,32 +470,33 @@ if (!s) return NULL; memset(s, 0, sizeof(*s)); - + BT_DBG("session %p sock %p", s, sock); INIT_LIST_HEAD(&s->dlcs); s->state = state; s->sock = sock; - s->mtu = RFCOMM_DEFAULT_MTU; - s->cfc = RFCOMM_CFC_UNKNOWN; - - list_add(&s->list, &session_list); + s->mtu = RFCOMM_DEFAULT_MTU; + s->cfc = RFCOMM_CFC_UNKNOWN; - /* Do not increment module usage count for listeting sessions. - * Otherwise we won't be able to unload the module. - * Non listening session are added either by a socket or a TTYs - * which means that we already hold refcount to this module. - */ + /* Do not increment module usage count for listening sessions. + * Otherwise we won't be able to unload the module. */ if (state != BT_LISTEN) - __module_get(THIS_MODULE); + if (!try_module_get(THIS_MODULE)) { + kfree(s); + return NULL; + } + + list_add(&s->list, &session_list); + return s; } void rfcomm_session_del(struct rfcomm_session *s) { int state = s->state; - + BT_DBG("session %p state %ld", s, s->state); list_del(&s->list); diff -Nru a/net/core/net-sysfs.c b/net/core/net-sysfs.c --- a/net/core/net-sysfs.c 2004-05-26 15:01:36 -07:00 +++ b/net/core/net-sysfs.c 2004-05-26 15:01:36 -07:00 @@ -20,9 +20,9 @@ #define to_class_dev(obj) container_of(obj,struct class_device,kobj) #define to_net_dev(class) container_of(class, struct net_device, class_dev) -static const char *fmt_hex = "%#x\n"; -static const char *fmt_dec = "%d\n"; -static const char *fmt_ulong = "%lu\n"; +static const char fmt_hex[] = "%#x\n"; +static const char fmt_dec[] = "%d\n"; +static const char fmt_ulong[] = "%lu\n"; static inline int dev_isalive(const struct net_device *dev) { diff -Nru a/net/ipv4/xfrm4_state.c b/net/ipv4/xfrm4_state.c --- a/net/ipv4/xfrm4_state.c 2004-05-26 15:01:35 -07:00 +++ b/net/ipv4/xfrm4_state.c 2004-05-26 15:01:35 -07:00 @@ -83,9 +83,7 @@ break; } } - if (x0) { - xfrm_state_hold(x0); - } else if (create && (x0 = xfrm_state_alloc()) != NULL) { + if (!x0 && create && (x0 = xfrm_state_alloc()) != NULL) { x0->sel.daddr.a4 = daddr->a4; x0->sel.saddr.a4 = saddr->a4; x0->sel.prefixlen_d = 32; @@ -100,11 +98,14 @@ x0->props.family = AF_INET; x0->lft.hard_add_expires_seconds = XFRM_ACQ_EXPIRES; xfrm_state_hold(x0); - mod_timer(&x0->timer, jiffies + XFRM_ACQ_EXPIRES*HZ); + x0->timer.expires = jiffies + XFRM_ACQ_EXPIRES*HZ; + add_timer(&x0->timer); xfrm_state_hold(x0); list_add_tail(&x0->bydst, xfrm4_state_afinfo.state_bydst+h); wake_up(&km_waitq); } + if (x0) + xfrm_state_hold(x0); return x0; } diff -Nru a/net/ipv6/xfrm6_state.c b/net/ipv6/xfrm6_state.c --- a/net/ipv6/xfrm6_state.c 2004-05-26 15:01:35 -07:00 +++ b/net/ipv6/xfrm6_state.c 2004-05-26 15:01:35 -07:00 @@ -90,9 +90,7 @@ break; } } - if (x0) { - xfrm_state_hold(x0); - } else if (create && (x0 = xfrm_state_alloc()) != NULL) { + if (!x0 && create && (x0 = xfrm_state_alloc()) != NULL) { ipv6_addr_copy((struct in6_addr *)x0->sel.daddr.a6, (struct in6_addr *)daddr); ipv6_addr_copy((struct in6_addr *)x0->sel.saddr.a6, @@ -110,11 +108,14 @@ x0->props.reqid = reqid; x0->lft.hard_add_expires_seconds = XFRM_ACQ_EXPIRES; xfrm_state_hold(x0); - mod_timer(&x0->timer, jiffies + XFRM_ACQ_EXPIRES*HZ); + x0->timer.expires = jiffies + XFRM_ACQ_EXPIRES*HZ; + add_timer(&x0->timer); xfrm_state_hold(x0); list_add_tail(&x0->bydst, xfrm6_state_afinfo.state_bydst+h); wake_up(&km_waitq); } + if (x0) + xfrm_state_hold(x0); return x0; } diff -Nru a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c --- a/net/irda/ircomm/ircomm_tty.c 2004-05-26 15:01:35 -07:00 +++ b/net/irda/ircomm/ircomm_tty.c 2004-05-26 15:01:35 -07:00 @@ -721,8 +721,10 @@ kbuf = kmalloc(count, GFP_KERNEL); if (kbuf == NULL) return -ENOMEM; - if (copy_from_user(kbuf, ubuf, count)) + if (copy_from_user(kbuf, ubuf, count)) { + kfree(kbuf); return -EFAULT; + } } else /* The buffer is already in kernel space */ kbuf = (unsigned char *) ubuf; @@ -779,6 +781,8 @@ self->max_header_size); if (!skb) { spin_unlock_irqrestore(&self->spinlock, flags); + if (from_user) + kfree(kbuf); return -ENOBUFS; } skb_reserve(skb, self->max_header_size); diff -Nru a/net/key/af_key.c b/net/key/af_key.c --- a/net/key/af_key.c 2004-05-26 15:01:35 -07:00 +++ b/net/key/af_key.c 2004-05-26 15:01:35 -07:00 @@ -1976,7 +1976,7 @@ memset(&sel, 0, sizeof(sel)); sa = ext_hdrs[SADB_EXT_ADDRESS_SRC-1], - pfkey_sadb_addr2xfrm_addr(sa, &sel.saddr); + sel.family = pfkey_sadb_addr2xfrm_addr(sa, &sel.saddr); sel.prefixlen_s = sa->sadb_address_prefixlen; sel.proto = pfkey_proto_to_xfrm(sa->sadb_address_proto); sel.sport = ((struct sockaddr_in *)(sa+1))->sin_port; diff -Nru a/net/sunrpc/cache.c b/net/sunrpc/cache.c --- a/net/sunrpc/cache.c 2004-05-26 15:01:36 -07:00 +++ b/net/sunrpc/cache.c 2004-05-26 15:01:36 -07:00 @@ -910,9 +910,8 @@ { if (detail->last_warn != detail->last_close) { detail->last_warn = detail->last_close; - printk(KERN_WARNING "nfsd: nobody listening for %s upcall;" - " has some daemon %s?\n", detail->name, - detail->last_close?"died" : "not been started"); + if (detail->warn_no_listener) + detail->warn_no_listener(detail); } } diff -Nru a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c --- a/net/xfrm/xfrm_state.c 2004-05-26 15:01:36 -07:00 +++ b/net/xfrm/xfrm_state.c 2004-05-26 15:01:36 -07:00 @@ -221,13 +221,9 @@ if (atomic_read(&x->refcnt) > 2) xfrm_flush_bundles(); - /* All xfrm_state objects are created by one of two possible - * paths: - * - * 2) xfrm_state_lookup --> xfrm_state_insert - * - * The xfrm_state_lookup or xfrm_state_alloc call gives a - * reference, and that is what we are dropping here. + /* All xfrm_state objects are created by xfrm_state_alloc. + * The xfrm_state_alloc call gives a reference, and that + * is what we are dropping here. */ atomic_dec(&x->refcnt); } @@ -331,14 +327,8 @@ } } - if (best) { - xfrm_state_hold(best); - spin_unlock_bh(&xfrm_state_lock); - return best; - } - - x = NULL; - if (!error && !acquire_in_progress && + x = best; + if (!x && !error && !acquire_in_progress && ((x = xfrm_state_alloc()) != NULL)) { /* Initialize temporary selector matching only * to current session. */ @@ -355,7 +345,8 @@ } x->lft.hard_add_expires_seconds = XFRM_ACQ_EXPIRES; xfrm_state_hold(x); - mod_timer(&x->timer, XFRM_ACQ_EXPIRES*HZ); + x->timer.expires = jiffies + XFRM_ACQ_EXPIRES*HZ; + add_timer(&x->timer); } else { x->km.state = XFRM_STATE_DEAD; xfrm_state_put(x); @@ -363,10 +354,12 @@ error = 1; } } - spin_unlock_bh(&xfrm_state_lock); - if (!x) + if (x) + xfrm_state_hold(x); + else *err = acquire_in_progress ? -EAGAIN : (error ? -ESRCH : -ENOMEM); + spin_unlock_bh(&xfrm_state_lock); return x; } diff -Nru a/scripts/mk_elfconfig.c b/scripts/mk_elfconfig.c --- a/scripts/mk_elfconfig.c 2004-05-26 15:01:36 -07:00 +++ b/scripts/mk_elfconfig.c 2004-05-26 15:01:36 -07:00 @@ -55,7 +55,7 @@ else abort(); - if (strcmp(argv[1], "v850") == 0) + if ((strcmp(argv[1], "v850") == 0) || (strcmp(argv[1], "h8300") == 0)) printf("#define MODULE_SYMBOL_PREFIX \"_\"\n"); else printf("#define MODULE_SYMBOL_PREFIX \"\"\n"); diff -Nru a/sound/arm/sa11xx-uda1341.c b/sound/arm/sa11xx-uda1341.c --- a/sound/arm/sa11xx-uda1341.c 2004-05-26 15:01:35 -07:00 +++ b/sound/arm/sa11xx-uda1341.c 2004-05-26 15:01:35 -07:00 @@ -21,7 +21,7 @@ * merged HAL layer (patches from Brian) */ -/* $Id: sa11xx-uda1341.c,v 1.13 2004/03/02 15:32:35 perex Exp $ */ +/* $Id: sa11xx-uda1341.c,v 1.15 2004/05/03 17:36:50 tiwai Exp $ */ /*************************************************************************************************** * @@ -62,6 +62,7 @@ #include <linux/config.h> #include <sound/driver.h> #include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/init.h> #include <linux/errno.h> #include <linux/ioctl.h> @@ -112,7 +113,7 @@ static char *id = NULL; /* ID for this card */ -MODULE_PARM(id, "s"); +module_param(id, charp, 0444); MODULE_PARM_DESC(id, "ID string for SA1100/SA1111 + UDA1341TS soundcard."); #define chip_t sa11xx_uda1341_t @@ -136,7 +137,6 @@ }audio_stream_t; typedef struct snd_card_sa11xx_uda1341 { - struct pm_dev *pm_dev; snd_card_t *card; struct l3_client *uda1341; snd_pcm_t *pcm; @@ -867,12 +867,10 @@ #ifdef CONFIG_PM -static void snd_sa11xx_uda1341_suspend(sa11xx_uda1341_t *chip) +static int snd_sa11xx_uda1341_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + sa11xx_uda1341_t *chip = snd_magic_cast(sa11x_uda1341_t, card->pm_private_data, return -EINVAL); - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; snd_pcm_suspend_all(chip->pcm); #ifdef HH_VERSION sa1100_dma_sleep(chip->s[SNDRV_PCM_STREAM_PLAYBACK].dmach); @@ -883,14 +881,13 @@ l3_command(chip->uda1341, CMD_SUSPEND, NULL); sa11xx_uda1341_audio_shutdown(chip); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void snd_sa11xx_uda1341_resume(sa11xx_uda1341_t *chip) +static int snd_sa11xx_uda1341_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + sa11xx_uda1341_t *chip = snd_magic_cast(sa11x_uda1341_t, card->pm_private_data, return -EINVAL); - if (card->power_state == SNDRV_CTL_POWER_D0) - return; sa11xx_uda1341_audio_init(chip); l3_command(chip->uda1341, CMD_RESUME, NULL); #ifdef HH_VERSION @@ -900,50 +897,14 @@ //FIXME #endif snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int sa11xx_uda1341_pm_callback(struct pm_dev *pm_dev, pm_request_t req, void *data) -{ - sa11xx_uda1341_t *chip = pm_dev->data; - - switch (req) { - case PM_SUSPEND: /* enter D1-D3 */ - snd_sa11xx_uda1341_suspend(chip); - break; - case PM_RESUME: /* enter D0 */ - snd_sa11xx_uda1341_resume(chip); - break; - } - return 0; -} - -static int sa11xx_uda1341_set_power_state(snd_card_t *card, unsigned int power_state) -{ - sa11xx_uda1341_t *chip = snd_magic_cast(sa11xx_uda1341_t, card->power_state_private_data, return); - - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_sa11xx_uda1341_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_sa11xx_uda1341_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } - #endif /* COMFIG_PM */ void snd_sa11xx_uda1341_free(snd_card_t *card) { sa11xx_uda1341_t *chip = snd_magic_cast(sa11xx_uda1341_t, card->private_data, return); - pm_unregister(chip->pm_dev); audio_dma_free(&chip->s[SNDRV_PCM_STREAM_PLAYBACK]); audio_dma_free(&chip->s[SNDRV_PCM_STREAM_CAPTURE]); sa11xx_uda1341 = NULL; @@ -984,15 +945,10 @@ if ((err = snd_card_sa11xx_uda1341_pcm(sa11xx_uda1341, 0)) < 0) goto nodev; - -#ifdef CONFIG_PM - card->power_state_private_data = sa11xx_uda1341; - card->set_power_state = sa11xx_uda1341_set_power_state; - sa11xx_uda1341->pm_dev = pm_register(PM_SYS_DEV, 0, sa11xx_uda1341_pm_callback); - if (sa11xx_uda1341->pm_dev) - sa11xx_uda1341->pm_dev->data = sa11xx_uda1341; -#endif - + snd_card_set_dev_pm_callback(card, PM_SYS_DEV, + snd_sa11xx_uda1341_suspend, snd_sa11_uda1341_resume, + sa11xx_uda1341); + strcpy(card->driver, "UDA1341"); strcpy(card->shortname, "H3600 UDA1341TS"); sprintf(card->longname, "Compaq iPAQ H3600 with Philips UDA1341TS"); diff -Nru a/sound/core/Kconfig b/sound/core/Kconfig --- a/sound/core/Kconfig 2004-05-26 15:01:36 -07:00 +++ b/sound/core/Kconfig 2004-05-26 15:01:36 -07:00 @@ -1,8 +1,4 @@ # ALSA soundcard-configuration -config SND_BIT32_EMUL - tristate "Emulation for 32-bit applications" - depends on SND && SND_PCM && (MIPS64 || SPARC64 || PPC64 || X86_64 && IA32_EMULATION) - config SND_TIMER tristate @@ -58,6 +54,17 @@ help Say 'Y' to enable OSS sequencer emulation (both /dev/sequencer and /dev/music interfaces). + +config SND_BIT32_EMUL + tristate "Emulation for 32-bit applications" + depends on SND && (MIPS64 || SPARC64 || PPC64 || X86_64 && IA32_EMULATION) + select SND_PCM + select SND_RAWMIDI + select SND_TIMER + select SND_HWDEP + help + Say 'Y' or 'M' to enable the emulation for 32-bit ALSA-native + applications. config SND_RTCTIMER tristate "RTC Timer support" diff -Nru a/sound/core/control.c b/sound/core/control.c --- a/sound/core/control.c 2004-05-26 15:01:35 -07:00 +++ b/sound/core/control.c 2004-05-26 15:01:35 -07:00 @@ -995,6 +995,33 @@ return 0; } +#ifdef CONFIG_PM +/* + * change the power state + */ +static int snd_ctl_set_power_state(snd_card_t *card, unsigned int power_state) +{ + switch (power_state) { + case SNDRV_CTL_POWER_D0: + case SNDRV_CTL_POWER_D1: + case SNDRV_CTL_POWER_D2: + if (card->power_state != power_state) + /* FIXME: pass the correct state value */ + card->pm_resume(card, 0); + break; + case SNDRV_CTL_POWER_D3hot: + case SNDRV_CTL_POWER_D3cold: + if (card->power_state != power_state) + /* FIXME: pass the correct state value */ + card->pm_suspend(card, 0); + break; + default: + return -EINVAL; + } + return 0; +} +#endif + static int snd_ctl_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { @@ -1038,9 +1065,9 @@ if (!capable(CAP_SYS_ADMIN)) return -EPERM; #ifdef CONFIG_PM - if (card->set_power_state) { + if (card->pm_suspend && card->pm_resume) { snd_power_lock(card); - err = card->set_power_state(card, err); + err = snd_ctl_set_power_state(card, err); snd_power_unlock(card); } else #endif diff -Nru a/sound/core/init.c b/sound/core/init.c --- a/sound/core/init.c 2004-05-26 15:01:35 -07:00 +++ b/sound/core/init.c 2004-05-26 15:01:35 -07:00 @@ -26,6 +26,8 @@ #include <linux/slab.h> #include <linux/time.h> #include <linux/ctype.h> +#include <linux/pci.h> +#include <linux/pm.h> #include <sound/core.h> #include <sound/control.h> #include <sound/info.h> @@ -254,6 +256,12 @@ #ifdef CONFIG_PM wake_up(&card->power_sleep); +#ifdef CONFIG_ISA + if (card->pm_dev) { + pm_unregister(card->pm_dev); + card->pm_dev = NULL; + } +#endif #endif /* wait, until all devices are ready for the free operation */ @@ -708,4 +716,93 @@ remove_wait_queue(&card->power_sleep, &wait); return result; } + +/** + * snd_card_set_pm_callback - set the PCI power-management callbacks + * @card: soundcard structure + * @suspend: suspend callback function + * @resume: resume callback function + * @private_data: private data to pass to the callback functions + * + * Sets the power-management callback functions of the card. + * These callbacks are called from ALSA's common PCI suspend/resume + * handler and from the control API. + */ +int snd_card_set_pm_callback(snd_card_t *card, + int (*suspend)(snd_card_t *, unsigned int), + int (*resume)(snd_card_t *, unsigned int), + void *private_data) +{ + card->pm_suspend = suspend; + card->pm_resume = resume; + card->pm_private_data = private_data; + return 0; +} + +static int snd_generic_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data) +{ + snd_card_t *card = dev->data; + + switch (rqst) { + case PM_SUSPEND: + /* FIXME: the correct state value? */ + card->pm_suspend(card, 0); + break; + case PM_RESUME: + /* FIXME: the correct state value? */ + card->pm_resume(card, 0); + break; + } + return 0; +} + +/** + * snd_card_set_dev_pm_callback - set the generic power-management callbacks + * @card: soundcard structure + * @type: PM device type (PM_XXX) + * @suspend: suspend callback function + * @resume: resume callback function + * @private_data: private data to pass to the callback functions + * + * Registers the power-management and sets the lowlevel callbacks for + * the given card with the given PM type. These callbacks are called + * from the ALSA's common PM handler and from the control API. + */ +int snd_card_set_dev_pm_callback(snd_card_t *card, int type, + int (*suspend)(snd_card_t *, unsigned int), + int (*resume)(snd_card_t *, unsigned int), + void *private_data) +{ + card->pm_dev = pm_register(type, 0, snd_generic_pm_callback); + if (! card->pm_dev) + return -ENOMEM; + card->pm_dev->data = card; + snd_card_set_pm_callback(card, suspend, resume, private_data); + return 0; +} + +#ifdef CONFIG_PCI +int snd_card_pci_suspend(struct pci_dev *dev, u32 state) +{ + snd_card_t *card = pci_get_drvdata(dev); + if (! card || ! card->pm_suspend) + return 0; + if (card->power_state == SNDRV_CTL_POWER_D3hot) + return 0; + /* FIXME: correct state value? */ + return card->pm_suspend(card, 0); +} + +int snd_card_pci_resume(struct pci_dev *dev) +{ + snd_card_t *card = pci_get_drvdata(dev); + if (! card || ! card->pm_resume) + return 0; + if (card->power_state == SNDRV_CTL_POWER_D0) + return 0; + /* FIXME: correct state value? */ + return card->pm_resume(card, 0); +} +#endif + #endif /* CONFIG_PM */ diff -Nru a/sound/core/memalloc.c b/sound/core/memalloc.c --- a/sound/core/memalloc.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/memalloc.c 2004-05-26 15:01:36 -07:00 @@ -29,6 +29,7 @@ #include <linux/slab.h> #include <linux/mm.h> #include <linux/dma-mapping.h> +#include <linux/moduleparam.h> #include <asm/semaphore.h> #include <sound/memalloc.h> #ifdef CONFIG_SBUS @@ -45,7 +46,8 @@ #define SNDRV_CARDS 8 #endif static int enable[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 1}; -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +static int boot_devs; +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable cards to allocate buffers."); /* @@ -89,32 +91,7 @@ * Hacks */ -static void *snd_dma_alloc_coherent1(struct device *dev, size_t size, - dma_addr_t *dma_handle, int flags) -{ - if (dev) - return dma_alloc_coherent(dev, size, dma_handle, flags); - else /* FIXME: dma_alloc_coherent does't always accept dev=NULL */ - return pci_alloc_consistent(NULL, size, dma_handle); -} - -static void snd_dma_free_coherent1(struct device *dev, size_t size, void *dma_addr, - dma_addr_t dma_handle) -{ - if (dev) - return dma_free_coherent(dev, size, dma_addr, dma_handle); - else - return pci_free_consistent(NULL, size, dma_addr, dma_handle); -} - -#undef dma_alloc_coherent -#define dma_alloc_coherent snd_dma_alloc_coherent1 -#undef dma_free_coherent -#define dma_free_coherent snd_dma_free_coherent1 - - #if defined(__i386__) || defined(__ppc__) || defined(__x86_64__) - /* * A hack to allocate large buffers via dma_alloc_coherent() * @@ -135,14 +112,17 @@ dma_addr_t *dma_handle, int flags) { void *ret; - u64 dma_mask; + u64 dma_mask, coherent_dma_mask; if (dev == NULL || !dev->dma_mask) return dma_alloc_coherent(dev, size, dma_handle, flags); dma_mask = *dev->dma_mask; + coherent_dma_mask = dev->coherent_dma_mask; *dev->dma_mask = 0xffffffff; /* do without masking */ + dev->coherent_dma_mask = 0xffffffff; /* do without masking */ ret = dma_alloc_coherent(dev, size, dma_handle, flags); *dev->dma_mask = dma_mask; /* restore */ + dev->coherent_dma_mask = coherent_dma_mask; /* restore */ if (ret) { /* obtained address is out of range? */ if (((unsigned long)*dma_handle + size - 1) & ~dma_mask) { @@ -152,8 +132,12 @@ } } else { /* wish to success now with the proper mask... */ - if (dma_mask != 0xffffffffUL) + if (dma_mask != 0xffffffffUL) { + /* allocation with GFP_ATOMIC to avoid the long stall */ + flags &= ~GFP_KERNEL; + flags |= GFP_ATOMIC; ret = dma_alloc_coherent(dev, size, dma_handle, flags); + } } return ret; } @@ -841,25 +825,6 @@ module_init(snd_mem_init) module_exit(snd_mem_exit) - -#ifndef MODULE - -/* format is: snd-page-alloc=enable */ - -static int __init snd_mem_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-page-alloc=", snd_mem_setup); - -#endif /* * exports diff -Nru a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c --- a/sound/core/oss/pcm_oss.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/oss/pcm_oss.c 2004-05-26 15:01:36 -07:00 @@ -31,6 +31,7 @@ #include <linux/slab.h> #include <linux/time.h> #include <linux/vmalloc.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/minors.h> #include <sound/pcm.h> @@ -45,17 +46,18 @@ static int dsp_map[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 0}; static int adsp_map[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 1}; static int nonblock_open; +static int boot_devs; MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, Abramo Bagnara <abramo@alsa-project.org>"); MODULE_DESCRIPTION("PCM OSS emulation for ALSA."); MODULE_LICENSE("GPL"); -MODULE_PARM(dsp_map, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dsp_map, int, boot_devs, 0444); MODULE_PARM_DESC(dsp_map, "PCM device number assigned to 1st OSS device."); MODULE_PARM_SYNTAX(dsp_map, "default:0,skill:advanced"); -MODULE_PARM(adsp_map, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(adsp_map, int, boot_devs, 0444); MODULE_PARM_DESC(adsp_map, "PCM device number assigned to 2nd OSS device."); MODULE_PARM_SYNTAX(adsp_map, "default:1,skill:advanced"); -MODULE_PARM(nonblock_open, "i"); +module_param(nonblock_open, bool, 0644); MODULE_PARM_DESC(nonblock_open, "Don't block opening busy PCM devices."); MODULE_PARM_SYNTAX(nonblock_open, "default:0,skill:advanced"); MODULE_ALIAS_SNDRV_MINOR(SNDRV_MINOR_OSS_PCM); @@ -1514,14 +1516,14 @@ runtime->oss.prev_hw_ptr_interrupt = delay; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) snd_pcm_oss_simulate_fill(substream, delay); - info.bytes = snd_pcm_oss_bytes(substream, runtime->status->hw_ptr); + info.bytes = snd_pcm_oss_bytes(substream, runtime->status->hw_ptr) & INT_MAX; } else { delay = snd_pcm_oss_bytes(substream, delay) + fixup; info.blocks = delay / runtime->oss.period_bytes; if (stream == SNDRV_PCM_STREAM_PLAYBACK) - info.bytes = runtime->oss.bytes - delay; + info.bytes = (runtime->oss.bytes - delay) & INT_MAX; else - info.bytes = runtime->oss.bytes + delay; + info.bytes = (runtime->oss.bytes + delay) & INT_MAX; } if (copy_to_user(_info, &info, sizeof(info))) return -EFAULT; @@ -2510,24 +2512,3 @@ module_init(alsa_pcm_oss_init) module_exit(alsa_pcm_oss_exit) - -#ifndef MODULE - -/* format is: snd-pcm-oss=dsp_map,adsp_map[,nonblock_open] */ - -static int __init alsa_pcm_oss_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&dsp_map[nr_dev]) == 2 && - get_option(&str,&adsp_map[nr_dev]) == 2); - (void)(get_option(&str,&nonblock_open) == 2); - nr_dev++; - return 1; -} - -__setup("snd-pcm-oss=", alsa_pcm_oss_setup); - -#endif /* !MODULE */ diff -Nru a/sound/core/pcm_memory.c b/sound/core/pcm_memory.c --- a/sound/core/pcm_memory.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/pcm_memory.c 2004-05-26 15:01:36 -07:00 @@ -23,18 +23,19 @@ #include <asm/io.h> #include <linux/time.h> #include <linux/init.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/info.h> #include <sound/initval.h> static int preallocate_dma = 1; -MODULE_PARM(preallocate_dma, "i"); +module_param(preallocate_dma, int, 0444); MODULE_PARM_DESC(preallocate_dma, "Preallocate DMA memory when the PCM devices are initialized."); MODULE_PARM_SYNTAX(preallocate_dma, SNDRV_BOOLEAN_TRUE_DESC); static int maximum_substreams = 4; -MODULE_PARM(maximum_substreams, "i"); +module_param(maximum_substreams, int, 0444); MODULE_PARM_DESC(maximum_substreams, "Maximum substreams with preallocated DMA memory."); MODULE_PARM_SYNTAX(maximum_substreams, SNDRV_BOOLEAN_TRUE_DESC); @@ -223,9 +224,13 @@ */ static inline void setup_pcm_id(snd_pcm_substream_t *subs) { - if (! subs->dma_device.id) + if (! subs->dma_device.id) { subs->dma_device.id = subs->pcm->device << 16 | subs->stream << 8 | (subs->number + 1); + if (subs->dma_device.type == SNDRV_DMA_TYPE_CONTINUOUS || + subs->dma_device.dev == NULL) + subs->dma_device.id |= (subs->pcm->card->number + 1) << 24; + } } /** diff -Nru a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c --- a/sound/core/pcm_misc.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/pcm_misc.c 2004-05-26 15:01:36 -07:00 @@ -230,7 +230,7 @@ return 64; case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE: case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE: - return 24; + return 32; case SNDRV_PCM_FORMAT_MU_LAW: case SNDRV_PCM_FORMAT_A_LAW: return 8; diff -Nru a/sound/core/pcm_native.c b/sound/core/pcm_native.c --- a/sound/core/pcm_native.c 2004-05-26 15:01:35 -07:00 +++ b/sound/core/pcm_native.c 2004-05-26 15:01:35 -07:00 @@ -1038,7 +1038,7 @@ snd_power_lock(card); if ((res = snd_power_wait(card, SNDRV_CTL_POWER_D0, substream->ffile)) >= 0) - return snd_pcm_action_lock_irq(&snd_pcm_action_resume, substream, 0, 0); + res = snd_pcm_action_lock_irq(&snd_pcm_action_resume, substream, 0, 0); snd_power_unlock(card); return res; } @@ -2335,6 +2335,45 @@ return err; } +static int snd_pcm_sync_ptr(snd_pcm_substream_t *substream, struct sndrv_pcm_sync_ptr *_sync_ptr) +{ + snd_pcm_runtime_t *runtime = substream->runtime; + struct sndrv_pcm_sync_ptr sync_ptr; + volatile struct sndrv_pcm_mmap_status *status; + volatile struct sndrv_pcm_mmap_control *control; + int err; + + memset(&sync_ptr, 0, sizeof(sync_ptr)); + if (get_user(sync_ptr.flags, (unsigned int *) &(_sync_ptr->flags))) + return -EFAULT; + if (copy_from_user(&sync_ptr.c.control, &(_sync_ptr->c.control), sizeof(struct sndrv_pcm_mmap_control))) + return -EFAULT; + status = runtime->status; + control = runtime->control; + if (sync_ptr.flags & SNDRV_PCM_SYNC_PTR_HWSYNC) { + err = snd_pcm_hwsync(substream); + if (err < 0) + return err; + } + snd_pcm_stream_lock_irq(substream); + if (!(sync_ptr.flags & SNDRV_PCM_SYNC_PTR_APPL)) + control->appl_ptr = sync_ptr.c.control.appl_ptr; + else + sync_ptr.c.control.appl_ptr = control->appl_ptr; + if (!(sync_ptr.flags & SNDRV_PCM_SYNC_PTR_AVAIL_MIN)) + control->avail_min = sync_ptr.c.control.avail_min; + else + sync_ptr.c.control.avail_min = control->avail_min; + sync_ptr.s.status.state = status->state; + sync_ptr.s.status.hw_ptr = status->hw_ptr; + sync_ptr.s.status.tstamp = status->tstamp; + sync_ptr.s.status.suspended_state = status->suspended_state; + snd_pcm_stream_unlock_irq(substream); + if (copy_to_user(_sync_ptr, &sync_ptr, sizeof(sync_ptr))) + return -EFAULT; + return 0; +} + static int snd_pcm_playback_ioctl1(snd_pcm_substream_t *substream, unsigned int cmd, void *arg); static int snd_pcm_capture_ioctl1(snd_pcm_substream_t *substream, @@ -2388,6 +2427,8 @@ return snd_pcm_hwsync(substream); case SNDRV_PCM_IOCTL_DELAY: return snd_pcm_delay(substream, (snd_pcm_sframes_t *) arg); + case SNDRV_PCM_IOCTL_SYNC_PTR: + return snd_pcm_sync_ptr(substream, (struct sndrv_pcm_sync_ptr *) arg); case SNDRV_PCM_IOCTL_HW_REFINE_OLD: return snd_pcm_hw_refine_old_user(substream, (struct sndrv_pcm_hw_params_old *) arg); case SNDRV_PCM_IOCTL_HW_PARAMS_OLD: diff -Nru a/sound/core/rawmidi.c b/sound/core/rawmidi.c --- a/sound/core/rawmidi.c 2004-05-26 15:01:35 -07:00 +++ b/sound/core/rawmidi.c 2004-05-26 15:01:35 -07:00 @@ -27,6 +27,7 @@ #include <linux/slab.h> #include <linux/time.h> #include <linux/wait.h> +#include <linux/moduleparam.h> #include <sound/rawmidi.h> #include <sound/info.h> #include <sound/control.h> @@ -40,10 +41,11 @@ #ifdef CONFIG_SND_OSSEMUL static int midi_map[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 0}; static int amidi_map[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 1}; -MODULE_PARM(midi_map, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +static int boot_devs; +module_param_array(midi_map, int, boot_devs, 0444); MODULE_PARM_DESC(midi_map, "Raw MIDI device number assigned to 1st OSS device."); MODULE_PARM_SYNTAX(midi_map, "default:0,skill:advanced"); -MODULE_PARM(amidi_map, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(amidi_map, int, boot_devs, 0444); MODULE_PARM_DESC(amidi_map, "Raw MIDI device number assigned to 2nd OSS device."); MODULE_PARM_SYNTAX(amidi_map, "default:1,skill:advanced"); #endif /* CONFIG_SND_OSSEMUL */ @@ -1636,26 +1638,6 @@ module_init(alsa_rawmidi_init) module_exit(alsa_rawmidi_exit) - -#ifndef MODULE -#ifdef CONFIG_SND_OSSEMUL -/* format is: snd-rawmidi=midi_map,amidi_map */ - -static int __init alsa_rawmidi_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&midi_map[nr_dev]) == 2 && - get_option(&str,&amidi_map[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-rawmidi=", alsa_rawmidi_setup); -#endif /* CONFIG_SND_OSSEMUL */ -#endif /* ifndef MODULE */ EXPORT_SYMBOL(snd_rawmidi_output_params); EXPORT_SYMBOL(snd_rawmidi_input_params); diff -Nru a/sound/core/rtctimer.c b/sound/core/rtctimer.c --- a/sound/core/rtctimer.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/rtctimer.c 2004-05-26 15:01:36 -07:00 @@ -25,6 +25,7 @@ #include <linux/time.h> #include <linux/threads.h> #include <linux/interrupt.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/timer.h> #include <sound/info.h> @@ -177,21 +178,9 @@ module_init(rtctimer_init) module_exit(rtctimer_exit) -MODULE_PARM(rtctimer_freq, "i"); +module_param(rtctimer_freq, int, 0444); MODULE_PARM_DESC(rtctimer_freq, "timer frequency in Hz"); MODULE_LICENSE("GPL"); - -#ifndef MODULE -/* format is: snd-rtctimer=freq */ - -static int __init rtctimer_setup(char *str) -{ - (void)(get_option(&str,&rtctimer_freq) == 2); - return 1; -} - -__setup("snd-rtctimer=", rtctimer_setup); -#endif /* ifndef MODULE */ #endif /* CONFIG_RTC || CONFIG_RTC_MODULE */ diff -Nru a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c --- a/sound/core/seq/oss/seq_oss.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/seq/oss/seq_oss.c 2004-05-26 15:01:36 -07:00 @@ -22,6 +22,7 @@ #include <sound/driver.h> #include <linux/init.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/minors.h> #include <sound/initval.h> @@ -40,7 +41,7 @@ MODULE_ALIAS_SNDRV_MINOR(SNDRV_MINOR_OSS_MUSIC); #ifdef SNDRV_SEQ_OSS_DEBUG -MODULE_PARM(seq_oss_debug, "i"); +module_param(seq_oss_debug, int, 0644); MODULE_PARM_DESC(seq_oss_debug, "debug option"); int seq_oss_debug = 0; #endif diff -Nru a/sound/core/seq/oss/seq_oss_init.c b/sound/core/seq/oss/seq_oss_init.c --- a/sound/core/seq/oss/seq_oss_init.c 2004-05-26 15:01:35 -07:00 +++ b/sound/core/seq/oss/seq_oss_init.c 2004-05-26 15:01:35 -07:00 @@ -28,17 +28,18 @@ #include "seq_oss_timer.h" #include "seq_oss_event.h" #include <linux/init.h> +#include <linux/moduleparam.h> /* * common variables */ -MODULE_PARM(maxqlen, "i"); +static int maxqlen = SNDRV_SEQ_OSS_MAX_QLEN; +module_param(maxqlen, int, 0444); MODULE_PARM_DESC(maxqlen, "maximum queue length"); static int system_client = -1; /* ALSA sequencer client number */ static int system_port = -1; -int maxqlen = SNDRV_SEQ_OSS_MAX_QLEN; static int num_clients; static seq_oss_devinfo_t *client_table[SNDRV_SEQ_OSS_MAX_CLIENTS]; diff -Nru a/sound/core/seq/seq.c b/sound/core/seq/seq.c --- a/sound/core/seq/seq.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/seq/seq.c 2004-05-26 15:01:36 -07:00 @@ -21,6 +21,7 @@ #include <sound/driver.h> #include <linux/init.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/initval.h> @@ -34,7 +35,11 @@ #include "seq_info.h" #include <sound/seq_device.h> +#if defined(CONFIG_SND_SEQ_DUMMY_MODULE) +int seq_client_load[64] = {[0] = SNDRV_SEQ_CLIENT_DUMMY, [1 ... 63] = -1}; +#else int seq_client_load[64] = {[0 ... 63] = -1}; +#endif int seq_default_timer_class = SNDRV_TIMER_CLASS_GLOBAL; int seq_default_timer_sclass = SNDRV_TIMER_SCLASS_NONE; int seq_default_timer_card = -1; @@ -48,19 +53,20 @@ MODULE_CLASSES("{sound}"); MODULE_SUPPORTED_DEVICE("sound"); -MODULE_PARM(seq_client_load, "1-64i"); +static int boot_devs; +module_param_array(seq_client_load, int, boot_devs, 0444); MODULE_PARM_DESC(seq_client_load, "The numbers of global (system) clients to load through kmod."); -MODULE_PARM(seq_default_timer_class, "i"); +module_param(seq_default_timer_class, int, 0644); MODULE_PARM_DESC(seq_default_timer_class, "The default timer class."); -MODULE_PARM(seq_default_timer_sclass, "i"); +module_param(seq_default_timer_sclass, int, 0644); MODULE_PARM_DESC(seq_default_timer_sclass, "The default timer slave class."); -MODULE_PARM(seq_default_timer_card, "i"); +module_param(seq_default_timer_card, int, 0644); MODULE_PARM_DESC(seq_default_timer_card, "The default timer card number."); -MODULE_PARM(seq_default_timer_device, "i"); +module_param(seq_default_timer_device, int, 0644); MODULE_PARM_DESC(seq_default_timer_device, "The default timer device number."); -MODULE_PARM(seq_default_timer_subdevice, "i"); +module_param(seq_default_timer_subdevice, int, 0644); MODULE_PARM_DESC(seq_default_timer_subdevice, "The default timer subdevice number."); -MODULE_PARM(seq_default_timer_resolution, "i"); +module_param(seq_default_timer_resolution, int, 0644); MODULE_PARM_DESC(seq_default_timer_resolution, "The default timer resolution in Hz."); /* diff -Nru a/sound/core/seq/seq_dummy.c b/sound/core/seq/seq_dummy.c --- a/sound/core/seq/seq_dummy.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/seq/seq_dummy.c 2004-05-26 15:01:36 -07:00 @@ -21,6 +21,7 @@ #include <sound/driver.h> #include <linux/init.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include "seq_clientmgr.h" #include <sound/initval.h> @@ -64,12 +65,14 @@ MODULE_LICENSE("GPL"); MODULE_CLASSES("{sound}"); MODULE_SUPPORTED_DEVICE("sound"); -MODULE_PARM(ports, "i"); + +static int ports = 1; +static int duplex = 0; + +module_param(ports, int, 0444); MODULE_PARM_DESC(ports, "number of ports to be created"); -MODULE_PARM(duplex, "i"); +module_param(duplex, bool, 0444); MODULE_PARM_DESC(duplex, "create DUPLEX ports"); -int ports = 1; -int duplex = 0; typedef struct snd_seq_dummy_port { int client; diff -Nru a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c --- a/sound/core/seq/seq_midi.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/seq/seq_midi.c 2004-05-26 15:01:36 -07:00 @@ -31,6 +31,7 @@ #include <linux/slab.h> #include <linux/errno.h> #include <linux/string.h> +#include <linux/moduleparam.h> #include <asm/semaphore.h> #include <sound/core.h> #include <sound/rawmidi.h> @@ -45,10 +46,10 @@ MODULE_CLASSES("{sound}"); MODULE_SUPPORTED_DEVICE("sound"); int output_buffer_size = PAGE_SIZE; -MODULE_PARM(output_buffer_size, "i"); +module_param(output_buffer_size, int, 0644); MODULE_PARM_DESC(output_buffer_size, "Output buffer size in bytes."); int input_buffer_size = PAGE_SIZE; -MODULE_PARM(input_buffer_size, "i"); +module_param(input_buffer_size, int, 0644); MODULE_PARM_DESC(input_buffer_size, "Input buffer size in bytes."); /* data for this midi synth driver */ diff -Nru a/sound/core/sound.c b/sound/core/sound.c --- a/sound/core/sound.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/sound.c 2004-05-26 15:01:36 -07:00 @@ -23,6 +23,7 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/time.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/minors.h> #include <sound/info.h> @@ -45,15 +46,15 @@ MODULE_LICENSE("GPL"); MODULE_CLASSES("{sound}"); MODULE_SUPPORTED_DEVICE("sound"); -MODULE_PARM(major, "i"); +module_param(major, int, 0444); MODULE_PARM_DESC(major, "Major # for sound driver."); MODULE_PARM_SYNTAX(major, "default:116,skill:devel"); -MODULE_PARM(cards_limit, "i"); +module_param(cards_limit, int, 0444); MODULE_PARM_DESC(cards_limit, "Count of auto-loadable soundcards."); MODULE_PARM_SYNTAX(cards_limit, "default:8,skill:advanced"); MODULE_ALIAS_CHARDEV_MAJOR(CONFIG_SND_MAJOR); #ifdef CONFIG_DEVFS_FS -MODULE_PARM(device_mode, "i"); +module_param(device_mode, int, 0444); MODULE_PARM_DESC(device_mode, "Device file permission mask for devfs."); MODULE_PARM_SYNTAX(device_mode, "default:0666,base:8"); #endif @@ -465,6 +466,12 @@ EXPORT_SYMBOL(snd_card_file_remove); #ifdef CONFIG_PM EXPORT_SYMBOL(snd_power_wait); +EXPORT_SYMBOL(snd_card_set_pm_callback); +EXPORT_SYMBOL(snd_card_set_dev_pm_callback); +#ifdef CONFIG_PCI +EXPORT_SYMBOL(snd_card_pci_suspend); +EXPORT_SYMBOL(snd_card_pci_resume); +#endif #endif /* device.c */ EXPORT_SYMBOL(snd_device_new); diff -Nru a/sound/core/timer.c b/sound/core/timer.c --- a/sound/core/timer.c 2004-05-26 15:01:36 -07:00 +++ b/sound/core/timer.c 2004-05-26 15:01:36 -07:00 @@ -24,6 +24,7 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/time.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/timer.h> #include <sound/control.h> @@ -46,7 +47,7 @@ MODULE_DESCRIPTION("ALSA timer interface"); MODULE_LICENSE("GPL"); MODULE_CLASSES("{sound}"); -MODULE_PARM(timer_limit, "i"); +module_param(timer_limit, int, 0444); MODULE_PARM_DESC(timer_limit, "Maximum global timers in system."); typedef struct { @@ -1512,7 +1513,6 @@ static int snd_timer_user_params(struct file *file, snd_timer_params_t *_params) { - unsigned long flags; snd_timer_user_t *tu; snd_timer_params_t params; snd_timer_t *t; @@ -1548,18 +1548,17 @@ goto _end; } snd_timer_stop(tu->timeri); - spin_lock_irqsave(&t->lock, flags); - if (params.flags & SNDRV_TIMER_PSFLG_AUTO) { + spin_lock_irq(&t->lock); + tu->timeri->flags &= ~(SNDRV_TIMER_IFLG_AUTO| + SNDRV_TIMER_IFLG_EXCLUSIVE| + SNDRV_TIMER_IFLG_EARLY_EVENT); + if (params.flags & SNDRV_TIMER_PSFLG_AUTO) tu->timeri->flags |= SNDRV_TIMER_IFLG_AUTO; - } else { - tu->timeri->flags &= ~SNDRV_TIMER_IFLG_AUTO; - } - if (params.flags & SNDRV_TIMER_PSFLG_EXCLUSIVE) { + if (params.flags & SNDRV_TIMER_PSFLG_EXCLUSIVE) tu->timeri->flags |= SNDRV_TIMER_IFLG_EXCLUSIVE; - } else { - tu->timeri->flags &= ~SNDRV_TIMER_IFLG_EXCLUSIVE; - } - spin_unlock_irqrestore(&t->lock, flags); + if (params.flags & SNDRV_TIMER_PSFLG_EARLY_EVENT) + tu->timeri->flags |= SNDRV_TIMER_IFLG_EARLY_EVENT; + spin_unlock_irq(&t->lock); if (params.queue_size > 0 && (unsigned int)tu->queue_size != params.queue_size) { if (tu->tread) { ttr = (snd_timer_tread_t *)kmalloc(params.queue_size * sizeof(snd_timer_tread_t), GFP_KERNEL); @@ -1577,6 +1576,24 @@ } } } + tu->qhead = tu->qtail = tu->qused = 0; + if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) { + if (tu->tread) { + snd_timer_tread_t tread; + tread.event = SNDRV_TIMER_EVENT_EARLY; + tread.tstamp.tv_sec = 0; + tread.tstamp.tv_nsec = 0; + tread.val = 0; + snd_timer_user_append_to_tqueue(tu, &tread); + } else { + snd_timer_read_t *r = &tu->queue[0]; + r->resolution = 0; + r->ticks = 0; + tu->qused++; + tu->qtail++; + } + + } tu->filter = params.filter; tu->ticks = params.ticks; err = 0; @@ -1588,7 +1605,6 @@ static int snd_timer_user_status(struct file *file, snd_timer_status_t *_status) { - unsigned long flags; snd_timer_user_t *tu; snd_timer_status_t status; @@ -1599,9 +1615,9 @@ status.resolution = snd_timer_resolution(tu->timeri); status.lost = tu->timeri->lost; status.overrun = tu->overrun; - spin_lock_irqsave(&tu->qlock, flags); + spin_lock_irq(&tu->qlock); status.queue = tu->qused; - spin_unlock_irqrestore(&tu->qlock, flags); + spin_unlock_irq(&tu->qlock); if (copy_to_user(_status, &status, sizeof(status))) return -EFAULT; return 0; @@ -1847,18 +1863,6 @@ module_init(alsa_timer_init) module_exit(alsa_timer_exit) - -#ifndef MODULE -/* format is: snd-timer=timer_limit */ - -static int __init alsa_timer_setup(char *str) -{ - (void)(get_option(&str,&timer_limit) == 2); - return 1; -} - -__setup("snd-timer=", alsa_timer_setup); -#endif /* ifndef MODULE */ EXPORT_SYMBOL(snd_timer_open); EXPORT_SYMBOL(snd_timer_close); diff -Nru a/sound/drivers/dummy.c b/sound/drivers/dummy.c --- a/sound/drivers/dummy.c 2004-05-26 15:01:36 -07:00 +++ b/sound/drivers/dummy.c 2004-05-26 15:01:36 -07:00 @@ -24,11 +24,11 @@ #include <linux/slab.h> #include <linux/time.h> #include <linux/wait.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/rawmidi.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -129,23 +129,24 @@ static int pcm_devs[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; static int pcm_substreams[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 8}; //static int midi_devs[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for dummy soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for dummy soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable this dummy soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(pcm_devs, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_devs, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_devs, "PCM devices # (0-4) for dummy driver."); MODULE_PARM_SYNTAX(pcm_devs, SNDRV_ENABLED ",allows:{{0,4}},default:1,dialog:list"); -MODULE_PARM(pcm_substreams, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_substreams, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_substreams, "PCM substreams # (1-16) for dummy driver."); MODULE_PARM_SYNTAX(pcm_substreams, SNDRV_ENABLED ",allows:{{1,16}},default:8,dialog:list"); -//MODULE_PARM(midi_devs, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +//module_param_array(midi_devs, int, boot_devs, 0444); //MODULE_PARM_DESC(midi_devs, "MIDI devices # (0-2) for dummy driver."); //MODULE_PARM_SYNTAX(midi_devs, SNDRV_ENABLED ",allows:{{0,2}},default:8,dialog:list"); @@ -661,27 +662,3 @@ module_init(alsa_card_dummy_init) module_exit(alsa_card_dummy_exit) - -#ifndef MODULE - -/* format is: snd-dummy=enable,index,id, - pcm_devs,pcm_substreams */ - -static int __init alsa_card_dummy_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pcm_devs[nr_dev]) == 2 && - get_option(&str,&pcm_substreams[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-dummy=", alsa_card_dummy_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c --- a/sound/drivers/mpu401/mpu401.c 2004-05-26 15:01:36 -07:00 +++ b/sound/drivers/mpu401/mpu401.c 2004-05-26 15:01:36 -07:00 @@ -30,9 +30,9 @@ #ifdef CONFIG_ACPI_BUS #include <acpi/acpi_bus.h> #endif +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> #ifdef CONFIG_ACPI_BUS @@ -55,29 +55,30 @@ #ifdef CONFIG_X86_PC9800 static int pc98ii[SNDRV_CARDS]; /* PC98-II dauther board */ #endif +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for MPU-401 device."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for MPU-401 device."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable MPU-401 device."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef USE_ACPI_PNP -MODULE_PARM(acpipnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(acpipnp, bool, boot_devs, 0444); MODULE_PARM_DESC(acpipnp, "ACPI PnP detection for MPU-401 device."); MODULE_PARM_SYNTAX(acpipnp, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); #endif -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for MPU-401 device."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for MPU-401 device."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); #ifdef CONFIG_X86_PC9800 -MODULE_PARM(pc98ii, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pc98ii, bool, boot_devs, 0444); MODULE_PARM_DESC(pc98ii, "Roland MPU-PC98II support."); MODULE_PARM_SYNTAX(pc98ii, SNDRV_BOOLEAN_FALSE_DESC); #endif @@ -303,35 +304,3 @@ module_init(alsa_card_mpu401_init) module_exit(alsa_card_mpu401_exit) - -#ifndef MODULE - -/* format is: snd-mpu401=enable,index,id,acpipnp[,pc98ii],port,irq */ - -static int __init alsa_card_mpu401_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - int __attribute__ ((__unused__)) pnp = INT_MAX; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pnp) == 2 && -#ifdef CONFIG_X86_PC9800 - get_option(&str,&pc98ii[nr_dev]) == 2 && -#endif - get_option_long(&str,&port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2); -#ifdef USE_ACPI_PNP - if (pnp != INT_MAX) - acpipnp[nr_dev] = pnp; -#endif - nr_dev++; - return 1; -} - -__setup("snd-mpu401=", alsa_card_mpu401_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/drivers/mtpav.c b/sound/drivers/mtpav.c --- a/sound/drivers/mtpav.c 2004-05-26 15:01:36 -07:00 +++ b/sound/drivers/mtpav.c 2004-05-26 15:01:36 -07:00 @@ -55,8 +55,8 @@ #include <linux/interrupt.h> #include <linux/slab.h> #include <linux/ioport.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/rawmidi.h> #include <linux/delay.h> @@ -83,19 +83,19 @@ static int irq = MTPAV_IRQ; /* 7, 5 */ static int hwports = MTPAV_MAX_PORTS; /* use hardware ports 1-8 */ -MODULE_PARM(index, "i"); +module_param(index, int, 0444); MODULE_PARM_DESC(index, "Index value for MotuMTPAV MIDI."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "s"); +module_param(id, charp, 0444); MODULE_PARM_DESC(id, "ID string for MotuMTPAV MIDI."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(port, "l"); +module_param(port, long, 0444); MODULE_PARM_DESC(port, "Parallel port # for MotuMTPAV MIDI."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x378},{0x278}},dialog:list"); -MODULE_PARM(irq, "i"); +module_param(irq, int, 0444); MODULE_PARM_DESC(irq, "Parallel IRQ # for MotuMTPAV MIDI."); MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{7},{5}},dialog:list"); -MODULE_PARM(hwports, "i"); +module_param(hwports, int, 0444); MODULE_PARM_DESC(hwports, "Hardware ports # for MotuMTPAV MIDI."); MODULE_PARM_SYNTAX(hwports, SNDRV_ENABLED ",allows:{{1,8}},dialog:list"); @@ -800,25 +800,3 @@ module_init(alsa_card_mtpav_init) module_exit(alsa_card_mtpav_exit) - -#ifndef MODULE - -/* format is: snd-mtpav=enable,index,id, - port,irq,hwports */ - -static int __init alsa_card_mtpav_setup(char *str) -{ - int __attribute__ ((__unused__)) enable = 1; - - (void)(get_option(&str,&enable) == 2 && - get_option(&str,&index) == 2 && - get_id(&str,&id) == 2 && - get_option_long(&str,&port) == 2 && - get_option(&str,&irq) == 2 && - get_option(&str,&hwports) == 2); - return 1; -} - -__setup("snd-mtpav=", alsa_card_mtpav_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/drivers/opl3/opl3_seq.c b/sound/drivers/opl3/opl3_seq.c --- a/sound/drivers/opl3/opl3_seq.c 2004-05-26 15:01:36 -07:00 +++ b/sound/drivers/opl3/opl3_seq.c 2004-05-26 15:01:36 -07:00 @@ -24,6 +24,7 @@ #include "opl3_voice.h" #include <linux/init.h> +#include <linux/moduleparam.h> #include <sound/initval.h> MODULE_AUTHOR("Uros Bizjak <uros@kss-loka.si>"); @@ -32,7 +33,7 @@ MODULE_CLASSES("{sound}"); int use_internal_drums = 0; -MODULE_PARM(use_internal_drums, "i"); +module_param(use_internal_drums, bool, 0444); MODULE_PARM_DESC(use_internal_drums, "Enable internal OPL2/3 drums."); int snd_opl3_synth_use_inc(opl3_t * opl3) diff -Nru a/sound/drivers/opl4/opl4_seq.c b/sound/drivers/opl4/opl4_seq.c --- a/sound/drivers/opl4/opl4_seq.c 2004-05-26 15:01:36 -07:00 +++ b/sound/drivers/opl4/opl4_seq.c 2004-05-26 15:01:36 -07:00 @@ -33,6 +33,7 @@ #include "opl4_local.h" #include <linux/init.h> +#include <linux/moduleparam.h> #include <sound/initval.h> MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>"); @@ -42,7 +43,7 @@ int volume_boost = 8; -MODULE_PARM(volume_boost, "i"); +module_param(volume_boost, int, 0644); MODULE_PARM_DESC(volume_boost, "Additional volume for OPL4 wavetable sounds."); MODULE_PARM_SYNTAX(volume_boost, "default:8"); diff -Nru a/sound/drivers/serial-u16550.c b/sound/drivers/serial-u16550.c --- a/sound/drivers/serial-u16550.c 2004-05-26 15:01:35 -07:00 +++ b/sound/drivers/serial-u16550.c 2004-05-26 15:01:35 -07:00 @@ -35,9 +35,9 @@ #include <linux/interrupt.h> #include <linux/slab.h> #include <linux/ioport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/rawmidi.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <linux/serial_reg.h> @@ -77,39 +77,40 @@ static int ins[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; /* 1 to 16 */ static int adaptor[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = SNDRV_SERIAL_SOUNDCANVAS}; static int droponfull[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS -1)] = SNDRV_SERIAL_NORMALBUFF }; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Serial MIDI."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Serial MIDI."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable UART16550A chip."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for UART16550A chip."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for UART16550A chip."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(speed, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(speed, int, boot_devs, 0444); MODULE_PARM_DESC(speed, "Speed in bauds."); MODULE_PARM_SYNTAX(speed, SNDRV_ENABLED ",allows:{9600,19200,38400,57600,115200},dialog:list"); -MODULE_PARM(base, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(base, int, boot_devs, 0444); MODULE_PARM_DESC(base, "Base for divisor in bauds."); MODULE_PARM_SYNTAX(base, SNDRV_ENABLED ",allows:{57600,115200,230400,460800},dialog:list"); -MODULE_PARM(outs, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(outs, int, boot_devs, 0444); MODULE_PARM_DESC(outs, "Number of MIDI outputs."); -MODULE_PARM(ins, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ins, int, boot_devs, 0444); MODULE_PARM_DESC(ins, "Number of MIDI inputs."); -MODULE_PARM(droponfull, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(droponfull, bool, boot_devs, 0444); MODULE_PARM_DESC(droponfull, "Flag to enable drop-on-full buffer mode"); MODULE_PARM_SYNTAX(droponfull, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); MODULE_PARM_SYNTAX(outs, SNDRV_ENABLED ",allows:{{1,16}},dialog:list"); MODULE_PARM_SYNTAX(ins, SNDRV_ENABLED ",allows:{{1,16}},dialog:list"); -MODULE_PARM(adaptor, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(adaptor, int, boot_devs, 0444); MODULE_PARM_DESC(adaptor, "Type of adaptor."); MODULE_PARM_SYNTAX(adaptor, SNDRV_ENABLED ",allows:{{0=Soundcanvas,1=MS-124T,2=MS-124W S/A,3=MS-124W M/B,4=Generic}},dialog:list"); @@ -987,34 +988,3 @@ module_init(alsa_card_serial_init) module_exit(alsa_card_serial_exit) - -#ifndef MODULE - -/* format is: snd-serial=enable,index,id, - port,irq,speed,base,outs, - ins,adaptor,droponfull */ - -static int __init alsa_card_serial_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&speed[nr_dev]) == 2 && - get_option(&str,&base[nr_dev]) == 2 && - get_option(&str,&outs[nr_dev]) == 2 && - get_option(&str,&ins[nr_dev]) == 2 && - get_option(&str,&adaptor[nr_dev]) == 2 && - get_option(&str,&droponfull[nr_dev]) == 2 ); - nr_dev++; - return 1; -} - -__setup("snd-serial=", alsa_card_serial_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/drivers/virmidi.c b/sound/drivers/virmidi.c --- a/sound/drivers/virmidi.c 2004-05-26 15:01:35 -07:00 +++ b/sound/drivers/virmidi.c 2004-05-26 15:01:35 -07:00 @@ -45,10 +45,10 @@ #include <linux/init.h> #include <linux/wait.h> #include <linux/sched.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/seq_kernel.h> #include <sound/seq_virmidi.h> -#define SNDRV_GET_ID #include <sound/initval.h> /* hack: OSS defines midi_devs, so undefine it (versioned symbols) */ @@ -66,17 +66,18 @@ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = {1, [1 ... (SNDRV_CARDS - 1)] = 0}; static int midi_devs[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for virmidi soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for virmidi soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable this soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(midi_devs, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(midi_devs, int, boot_devs, 0444); MODULE_PARM_DESC(midi_devs, "MIDI devices # (1-8)"); MODULE_PARM_SYNTAX(midi_devs, SNDRV_ENABLED ",allows:{{1,8}}"); @@ -162,25 +163,3 @@ module_init(alsa_card_virmidi_init) module_exit(alsa_card_virmidi_exit) - -#ifndef MODULE - -/* format is: snd-virmidi=enable,index,id,midi_devs */ - -static int __init alsa_card_virmidi_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&midi_devs[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-virmidi=", alsa_card_virmidi_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/ad1816a/ad1816a.c b/sound/isa/ad1816a/ad1816a.c --- a/sound/isa/ad1816a/ad1816a.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/ad1816a/ad1816a.c 2004-05-26 15:01:35 -07:00 @@ -23,8 +23,8 @@ #include <linux/time.h> #include <linux/wait.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/ad1816a.h> #include <sound/mpu401.h> @@ -56,35 +56,36 @@ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* Pnp setup */ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* PnP setup */ static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* PnP setup */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ad1816a based soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ad1816a based soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ad1816a based soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for ad1816a driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for ad1816a driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for ad1816a driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for ad1816a driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for ad1816a driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "1st DMA # for ad1816a driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "2nd DMA # for ad1816a driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); @@ -323,33 +324,3 @@ module_init(alsa_card_ad1816a_init) module_exit(alsa_card_ad1816a_exit) - -#ifndef MODULE - -/* format is: snd-ad1816a=enable,index,id,port, - mpu_port,fm_port,irq,mpu_irq, - dma1,dma2 */ - -static int __init alsa_card_ad1816a_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-ad1816a=", alsa_card_ad1816a_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/ad1848/ad1848.c b/sound/isa/ad1848/ad1848.c --- a/sound/isa/ad1848/ad1848.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/ad1848/ad1848.c 2004-05-26 15:01:36 -07:00 @@ -25,9 +25,9 @@ #include <linux/init.h> #include <linux/time.h> #include <linux/wait.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/ad1848.h> -#define SNDRV_GET_ID #include <sound/initval.h> #define chip_t ad1848_t @@ -47,26 +47,27 @@ static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,11,12,15 */ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ static int thinkpad[SNDRV_CARDS]; /* Thinkpad special case */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for AD1848 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for AD1848 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable AD1848 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for AD1848 driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for AD1848 driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for AD1848 driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(thinkpad, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(thinkpad, bool, boot_devs, 0444); MODULE_PARM_DESC(thinkpad, "Enable only for the onboard CS4248 of IBM Thinkpad 360/750/755 series."); MODULE_PARM_SYNTAX(thinkpad, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); @@ -159,29 +160,3 @@ module_init(alsa_card_ad1848_init) module_exit(alsa_card_ad1848_exit) - -#ifndef MODULE - -/* format is: snd-ad1848=enable,index,id,port, - irq,dma1 */ - -static int __init alsa_card_ad1848_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&thinkpad[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-ad1848=", alsa_card_ad1848_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/ad1848/ad1848_lib.c b/sound/isa/ad1848/ad1848_lib.c --- a/sound/isa/ad1848/ad1848_lib.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/ad1848/ad1848_lib.c 2004-05-26 15:01:36 -07:00 @@ -647,12 +647,12 @@ } #ifdef CONFIG_PM -static void snd_ad1848_suspend(ad1848_t *chip) { - - snd_card_t *card = chip->card; +static int snd_ad1848_suspend(snd_card_t *card, unsigned int state) +{ + ad1848_t *chip = snd_magic_cast(ad1848_t, card->pm_private_data, return -EINVAL); if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; + return 0; snd_pcm_suspend_all(chip->pcm); /* FIXME: save registers? */ @@ -661,14 +661,15 @@ snd_ad1848_thinkpad_twiddle(chip, 0); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void snd_ad1848_resume(ad1848_t *chip) { - - snd_card_t *card = chip->card; +static int snd_ad1848_resume(snd_card_t *card, unsigned int state) +{ + ad1848_t *chip = snd_magic_cast(ad1848_t, card->pm_private_data, return -EINVAL); if (card->power_state == SNDRV_CTL_POWER_D0) - return; + return 0; if (chip->thinkpad_flag) snd_ad1848_thinkpad_twiddle(chip, 1); @@ -676,43 +677,8 @@ /* FIXME: restore registers? */ snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -/* callback for control API */ -static int snd_ad1848_set_power_state(snd_card_t *card, unsigned int power_state) -{ - ad1848_t *chip = (ad1848_t *) card->power_state_private_data; - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_ad1848_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_ad1848_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } - -static int snd_ad1848_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data) -{ - ad1848_t *chip = snd_magic_cast(ad1848_t, dev->data, return 0); - - switch (rqst) { - case PM_SUSPEND: - snd_ad1848_suspend(chip); - break; - case PM_RESUME: - snd_ad1848_resume(chip); - break; - } - return 0; -} - #endif /* CONFIG_PM */ static int snd_ad1848_probe(ad1848_t * chip) @@ -891,10 +857,6 @@ static int snd_ad1848_free(ad1848_t *chip) { -#ifdef CONFIG_PM - if (chip->thinkpad_pmstate) - pm_unregister(chip->thinkpad_pmstate); -#endif if (chip->res_port) { release_resource(chip->res_port); kfree_nocheck(chip->res_port); @@ -973,14 +935,7 @@ chip->thinkpad_flag = 1; chip->hardware = AD1848_HW_DETECT; /* reset */ snd_ad1848_thinkpad_twiddle(chip, 1); -#ifdef CONFIG_PM - chip->thinkpad_pmstate = pm_register(PM_ISA_DEV, 0, snd_ad1848_pm_callback); - if (chip->thinkpad_pmstate) { - chip->thinkpad_pmstate->data = chip; - card->set_power_state = snd_ad1848_set_power_state; /* callback */ - card->power_state_private_data = chip; - } -#endif + snd_card_set_isa_pm_callback(card, snd_ad1848_suspend, snd_ad1848_resume, chip); } if (snd_ad1848_probe(chip) < 0) { diff -Nru a/sound/isa/als100.c b/sound/isa/als100.c --- a/sound/isa/als100.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/als100.c 2004-05-26 15:01:35 -07:00 @@ -25,8 +25,8 @@ #include <linux/wait.h> #include <linux/time.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/mpu401.h> #include <sound/opl3.h> @@ -59,35 +59,36 @@ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* PnP setup */ static int dma8[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* PnP setup */ static int dma16[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* PnP setup */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for als100 based soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for als100 based soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable als100 based soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for als100 driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for als100 driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for als100 driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for als100 driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for als100 driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma8, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma8, int, boot_devs, 0444); MODULE_PARM_DESC(dma8, "8-bit DMA # for als100 driver."); MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC); -MODULE_PARM(dma16, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma16, int, boot_devs, 0444); MODULE_PARM_DESC(dma16, "16-bit DMA # for als100 driver."); MODULE_PARM_SYNTAX(dma16, SNDRV_DMA16_DESC); @@ -345,33 +346,3 @@ module_init(alsa_card_als100_init) module_exit(alsa_card_als100_exit) - -#ifndef MODULE - -/* format is: snd-als100=enable,index,id,port, - mpu_port,fm_port,irq,mpu_irq, - dma8,dma16 */ - -static int __init alsa_card_als100_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma8[nr_dev]) == 2 && - get_option(&str,&dma16[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-als100=", alsa_card_als100_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/azt2320.c b/sound/isa/azt2320.c --- a/sound/isa/azt2320.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/azt2320.c 2004-05-26 15:01:36 -07:00 @@ -36,8 +36,8 @@ #include <linux/time.h> #include <linux/wait.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/cs4231.h> #include <sound/mpu401.h> @@ -68,38 +68,39 @@ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* Pnp setup */ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* PnP setup */ static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* PnP setup */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for azt2320 based soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for azt2320 based soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable azt2320 based soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for azt2320 driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(wss_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(wss_port, long, boot_devs, 0444); MODULE_PARM_DESC(wss_port, "WSS Port # for azt2320 driver."); MODULE_PARM_SYNTAX(wss_port, SNDRV_PORT12_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for azt2320 driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for azt2320 driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for azt2320 driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for azt2320 driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "1st DMA # for azt2320 driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "2nd DMA # for azt2320 driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); @@ -378,33 +379,3 @@ module_init(alsa_card_azt2320_init) module_exit(alsa_card_azt2320_exit) - -#ifndef MODULE - -/* format is: snd-azt2320=enable,index,id,port, - wss_port,mpu_port,fm_port, - irq,mpu_irq,dma1,dma2 */ - -static int __init alsa_card_azt2320_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&wss_port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-azt2320=", alsa_card_azt2320_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c --- a/sound/isa/cmi8330.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/cmi8330.c 2004-05-26 15:01:35 -07:00 @@ -47,10 +47,10 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/ad1848.h> #include <sound/sb.h> -#define SNDRV_GET_ID #include <sound/initval.h> /* @@ -79,42 +79,43 @@ static long wssport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; static int wssirq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; static int wssdma[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for CMI8330 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for CMI8330 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable CMI8330 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef CONFIG_PNP -MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(isapnp, bool, boot_devs, 0444); MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif -MODULE_PARM(sbport, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(sbport, long, boot_devs, 0444); MODULE_PARM_DESC(sbport, "Port # for CMI8330 SB driver."); MODULE_PARM_SYNTAX(sbport, SNDRV_ENABLED ",allows:{{0x220,0x280,0x20}},prefers:{0x220},base:16,dialog:list"); -MODULE_PARM(sbirq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(sbirq, int, boot_devs, 0444); MODULE_PARM_DESC(sbirq, "IRQ # for CMI8330 SB driver."); MODULE_PARM_SYNTAX(sbirq, SNDRV_ENABLED ",allows:{{5},{7},{9},{10},{11},{12}},prefers:{5},dialog:list"); -MODULE_PARM(sbdma8, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(sbdma8, int, boot_devs, 0444); MODULE_PARM_DESC(sbdma8, "DMA8 for CMI8330 SB driver."); MODULE_PARM_SYNTAX(sbdma8, SNDRV_DMA8_DESC ",prefers:{1}"); -MODULE_PARM(sbdma16, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(sbdma16, int, boot_devs, 0444); MODULE_PARM_DESC(sbdma16, "DMA16 for CMI8330 SB driver."); MODULE_PARM_SYNTAX(sbdma16, SNDRV_ENABLED ",allows:{{5},{7}},prefers:{5},dialog:list"); -MODULE_PARM(wssport, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(wssport, long, boot_devs, 0444); MODULE_PARM_DESC(wssport, "Port # for CMI8330 WSS driver."); MODULE_PARM_SYNTAX(wssport, SNDRV_ENABLED ",allows:{{0x530},{0xe80,0xf40,0xc0}},prefers:{0x530},base:16,dialog:list"); -MODULE_PARM(wssirq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(wssirq, int, boot_devs, 0444); MODULE_PARM_DESC(wssirq, "IRQ # for CMI8330 WSS driver."); MODULE_PARM_SYNTAX(wssirq, SNDRV_ENABLED ",allows:{{5},{7},{9},{10},{11},{12}},prefers:{11},dialog:list"); -MODULE_PARM(wssdma, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(wssdma, int, boot_devs, 0444); MODULE_PARM_DESC(wssdma, "DMA for CMI8330 WSS driver."); MODULE_PARM_SYNTAX(wssdma, SNDRV_DMA8_DESC ",prefers:{0}"); @@ -643,41 +644,3 @@ module_init(alsa_card_cmi8330_init) module_exit(alsa_card_cmi8330_exit) - -#ifndef MODULE - -/* format is: snd-cmi8330=enable,index,id,isapnp, - sbport,sbirq, - sbdma8,sbdma16, - wssport,wssirq, - wssdma */ - -static int __init alsa_card_cmi8330_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - int __attribute__ ((__unused__)) pnp = INT_MAX; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pnp) == 2 && - get_option_long(&str,&sbport[nr_dev]) == 2 && - get_option(&str,&sbirq[nr_dev]) == 2 && - get_option(&str,&sbdma8[nr_dev]) == 2 && - get_option(&str,&sbdma16[nr_dev]) == 2 && - get_option_long(&str,&wssport[nr_dev]) == 2 && - get_option(&str,&wssirq[nr_dev]) == 2 && - get_option(&str,&wssdma[nr_dev]) == 2); -#ifdef CONFIG_PNP - if (pnp != INT_MAX) - isapnp[nr_dev] = pnp; -#endif - nr_dev++; - return 1; -} - -__setup("snd-cmi8330=", alsa_card_cmi8330_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c --- a/sound/isa/cs423x/cs4231.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/cs423x/cs4231.c 2004-05-26 15:01:35 -07:00 @@ -24,10 +24,10 @@ #include <linux/init.h> #include <linux/time.h> #include <linux/wait.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/cs4231.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> #define chip_t cs4231_t @@ -47,32 +47,33 @@ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 9,11,12,15 */ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for CS4231 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for CS4231 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable CS4231 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for CS4231 driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for CS4231 driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for CS4231 driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for CS4231 driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for CS4231 driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA2 # for CS4231 driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); @@ -179,34 +180,3 @@ module_init(alsa_card_cs4231_init) module_exit(alsa_card_cs4231_exit) - -#ifndef MODULE - -/* format is: snd-cs4231=enable,index,id, - port,mpu_port,irq,mpu_irq, - dma1,dma2 */ - -static int __init alsa_card_cs4231_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - int __attribute__ ((__unused__)) pnp = INT_MAX; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pnp) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-cs4231=", alsa_card_cs4231_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/cs423x/cs4231_lib.c b/sound/isa/cs423x/cs4231_lib.c --- a/sound/isa/cs423x/cs4231_lib.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/cs423x/cs4231_lib.c 2004-05-26 15:01:35 -07:00 @@ -979,19 +979,27 @@ } if (chip->single_dma && chip->hardware != CS4231_HW_INTERWAVE) { if (status & CS4231_PLAYBACK_IRQ) { - if (chip->mode & CS4231_MODE_PLAY) - snd_pcm_period_elapsed(chip->playback_substream); + if (chip->mode & CS4231_MODE_PLAY) { + if (chip->playback_substream) + snd_pcm_period_elapsed(chip->playback_substream); + } if (chip->mode & CS4231_MODE_RECORD) { - snd_cs4231_overrange(chip); - snd_pcm_period_elapsed(chip->capture_substream); + if (chip->capture_substream) { + snd_cs4231_overrange(chip); + snd_pcm_period_elapsed(chip->capture_substream); + } } } } else { - if (status & CS4231_PLAYBACK_IRQ) - snd_pcm_period_elapsed(chip->playback_substream); + if (status & CS4231_PLAYBACK_IRQ) { + if (chip->playback_substream) + snd_pcm_period_elapsed(chip->playback_substream); + } if (status & CS4231_RECORD_IRQ) { - snd_cs4231_overrange(chip); - snd_pcm_period_elapsed(chip->capture_substream); + if (chip->capture_substream) { + snd_cs4231_overrange(chip); + snd_pcm_period_elapsed(chip->capture_substream); + } } } @@ -1343,6 +1351,7 @@ #ifdef CONFIG_PM +/* lowlevel suspend callback for CS4231 */ static void snd_cs4231_suspend(cs4231_t *chip) { int reg; @@ -1354,6 +1363,7 @@ spin_unlock_irqrestore(&chip->reg_lock, flags); } +/* lowlevel resume callback for CS4231 */ static void snd_cs4231_resume(cs4231_t *chip) { int reg; @@ -1395,25 +1405,25 @@ #endif } -static int snd_cs4231_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data) +static int snd_cs4231_pm_suspend(snd_card_t *card, unsigned int state) { - cs4231_t *chip = snd_magic_cast(cs4231_t, dev->data, return 0); - - switch (rqst) { - case PM_SUSPEND: - if (chip->suspend) { - snd_pcm_suspend_all(chip->pcm); - (*chip->suspend)(chip); - } - break; - case PM_RESUME: - if (chip->resume) - (*chip->resume)(chip); - break; + cs4231_t *chip = snd_magic_cast(cs4231_t, card->pm_private_data, return -EINVAL); + if (chip->suspend) { + chip->suspend(chip); + snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); } return 0; } +static int snd_cs4231_pm_resume(snd_card_t *card, unsigned int state) +{ + cs4231_t *chip = snd_magic_cast(cs4231_t, card->pm_private_data, return -EINVAL); + if (chip->resume) { + chip->resume(chip); + snd_power_change_state(card, SNDRV_CTL_POWER_D0); + } + return 0; +} #endif /* CONFIG_PM */ #ifdef LEGACY_SUPPORT @@ -1441,10 +1451,6 @@ snd_dma_disable(chip->dma2); free_dma(chip->dma2); } -#ifdef CONFIG_PM - if (chip->pm_dev) - pm_unregister(chip->pm_dev); -#endif if (chip->timer) snd_device_free(chip->card, chip->timer); snd_magic_kfree(chip); @@ -1587,9 +1593,7 @@ /* Power Management */ chip->suspend = snd_cs4231_suspend; chip->resume = snd_cs4231_resume; - chip->pm_dev = pm_register(PM_ISA_DEV, 0, snd_cs4231_pm_callback); - if (chip->pm_dev) - chip->pm_dev->data = chip; + snd_card_set_isa_pm_callback(card, snd_cs4231_pm_suspend, snd_cs4231_pm_resume, chip); #endif *rchip = chip; @@ -1659,7 +1663,7 @@ #else # ifdef EBUS_SUPPORT if (chip->ebus_flag) { - snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_PCI, + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, chip->dev_u.pdev, 64*1024, 128*1024); } else { diff -Nru a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c --- a/sound/isa/cs423x/cs4236.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/cs423x/cs4236.c 2004-05-26 15:01:35 -07:00 @@ -23,11 +23,11 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/cs4231.h> #include <sound/mpu401.h> #include <sound/opl3.h> -#define SNDRV_GET_ID #include <sound/initval.h> #define chip_t cs4231_t @@ -95,46 +95,47 @@ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 9,11,12,15 */ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " IDENT " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " IDENT " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable " IDENT " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef CONFIG_PNP -MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(isapnp, bool, boot_devs, 0444); MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for " IDENT " driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(cport, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(cport, long, boot_devs, 0444); MODULE_PARM_DESC(cport, "Control port # for " IDENT " driver."); MODULE_PARM_SYNTAX(cport, SNDRV_PORT12_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " IDENT " driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for " IDENT " driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC); -MODULE_PARM(sb_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(sb_port, long, boot_devs, 0444); MODULE_PARM_DESC(sb_port, "SB port # for " IDENT " driver (optional)."); MODULE_PARM_SYNTAX(sb_port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for " IDENT " driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " IDENT " driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for " IDENT " driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); @@ -198,6 +199,8 @@ { .id = "CSC0225", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Intel Marlin Spike Motherboard (#2) - CS4235 */ { .id = "CSC0225", .devs = { { "CSC0100" }, { "CSC0110" }, { "CSC0103" } } }, + /* Unknown Intel mainboard - CS4235 */ + { .id = "CSC0225", .devs = { { "CSC0100" }, { "CSC0110" } } }, /* Genius Sound Maker 3DJ - CS4237B */ { .id = "CSC0437", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Digital PC 5000 Onboard - CS4236B */ @@ -618,48 +621,3 @@ module_init(alsa_card_cs423x_init) module_exit(alsa_card_cs423x_exit) - -#ifndef MODULE - -/* format is: snd-cs4232=enable,index,id,isapnp,port, - cport,mpu_port,fm_port,sb_port, - irq,mpu_irq,dma1,dma2 */ -/* format is: snd-cs4236=enable,index,id,isapnp,port, - cport,mpu_port,fm_port,sb_port, - irq,mpu_irq,dma1,dma2 */ - -static int __init alsa_card_cs423x_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - int __attribute__ ((__unused__)) pnp = INT_MAX; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pnp) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&cport[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option_long(&str,&sb_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2); -#ifdef CONFIG_PNP - if (pnp != INT_MAX) - isapnp[nr_dev] = pnp; -#endif - nr_dev++; - return 1; -} - -#ifdef CS4232 -__setup("snd-cs4232=", alsa_card_cs423x_setup); -#else /* CS4236 */ -__setup("snd-cs4236=", alsa_card_cs423x_setup); -#endif - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/cs423x/pc98.c b/sound/isa/cs423x/pc98.c --- a/sound/isa/cs423x/pc98.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/cs423x/pc98.c 2004-05-26 15:01:35 -07:00 @@ -25,11 +25,11 @@ #include <sound/driver.h> #include <linux/init.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/cs4231.h> #include <sound/mpu401.h> #include <sound/opl3.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include "sound_pc9800.h" @@ -57,43 +57,44 @@ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ static int pc98ii[SNDRV_CARDS]; /* PC98II */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " IDENT " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " IDENT " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable " IDENT " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for " IDENT " driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); #if 0 /* NOT USED */ -MODULE_PARM(cport, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(cport, long, boot_devs, 0444); MODULE_PARM_DESC(cport, "Control port # for " IDENT " driver."); MODULE_PARM_SYNTAX(cport, SNDRV_PORT12_DESC); #endif -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " IDENT " driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for " IDENT " driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for " IDENT " driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " IDENT " driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for " IDENT " driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); -MODULE_PARM(pc98ii, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pc98ii, bool, boot_devs, 0444); MODULE_PARM_DESC(pc98ii, "Roland MPU-PC98II support."); MODULE_PARM_SYNTAX(pc98ii, SNDRV_BOOLEAN_FALSE_DESC); @@ -435,34 +436,3 @@ module_init(alsa_card_pc98_init) module_exit(alsa_card_pc98_exit) - -#ifndef MODULE - -/* format is: snd-pc98-cs4232=enable,index,id,port, - mpu_port,fm_port, - irq,mpu_irq,dma1,dma2,pc98ii */ - -static int __init alsa_card_pc98_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2 && - get_option(&str,&pc98ii[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-pc98-cs4232=", alsa_card_pc98_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/dt019x.c b/sound/isa/dt019x.c --- a/sound/isa/dt019x.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/dt019x.c 2004-05-26 15:01:35 -07:00 @@ -26,8 +26,8 @@ #include <linux/sched.h> #include <linux/wait.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/mpu401.h> #include <sound/opl3.h> @@ -53,32 +53,33 @@ static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* PnP setup */ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* PnP setup */ static int dma8[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* PnP setup */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for DT-019X based soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for DT-019X based soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable DT-019X based soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for dt019x driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for dt019x driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for dt019x driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for dt019x driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for dt019x driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma8, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma8, int, boot_devs, 0444); MODULE_PARM_DESC(dma8, "8-bit DMA # for dt019x driver."); MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC); @@ -337,32 +338,3 @@ module_init(alsa_card_dt019x_init) module_exit(alsa_card_dt019x_exit) - -#ifndef MODULE - -/* format is: snd-dt019x=enable,index,id, - port,mpu_port,fm_port, - irq,mpu_irq,dma8,dma8_size */ - -static int __init alsa_card_dt019x_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma8[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-dt019x=", alsa_card_dt019x_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/es1688/es1688.c b/sound/isa/es1688/es1688.c --- a/sound/isa/es1688/es1688.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/es1688/es1688.c 2004-05-26 15:01:35 -07:00 @@ -24,6 +24,7 @@ #include <linux/init.h> #include <linux/time.h> #include <linux/wait.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/es1688.h> #include <sound/mpu401.h> @@ -31,7 +32,6 @@ #define SNDRV_LEGACY_AUTO_PROBE #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -51,29 +51,30 @@ static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */ static int dma8[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3 */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ESx688 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ESx688 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ESx688 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for ESx688 driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for ESx688 driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for ESx688 driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for ESx688 driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma8, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma8, int, boot_devs, 0444); MODULE_PARM_DESC(dma8, "8-bit DMA # for ESx688 driver."); MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC); @@ -211,32 +212,3 @@ module_init(alsa_card_es1688_init) module_exit(alsa_card_es1688_exit) - -#ifndef MODULE - -/* format is: snd-es1688=enable,index,id, - port,mpu_port, - irq,mpu_irq, - dma8 */ - -static int __init alsa_card_es1688_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma8[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-es1688=", alsa_card_es1688_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/es18xx.c b/sound/isa/es18xx.c --- a/sound/isa/es18xx.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/es18xx.c 2004-05-26 15:01:35 -07:00 @@ -72,6 +72,7 @@ #include <linux/slab.h> #include <linux/pnp.h> #include <linux/isapnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> #include <sound/pcm.h> @@ -81,7 +82,6 @@ #define SNDRV_LEGACY_AUTO_PROBE #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> #define PFX "es18xx: " @@ -124,7 +124,6 @@ spinlock_t mixer_lock; spinlock_t ctrl_lock; #ifdef CONFIG_PM - struct pm_dev *pm_dev; unsigned char pm_reg; #endif }; @@ -1610,12 +1609,9 @@ /* Power Management support functions */ #ifdef CONFIG_PM -static void snd_es18xx_suspend(es18xx_t *chip) +static int snd_es18xx_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; - - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; + es18xx_t *chip = snd_magic_cast(es18xx_t, card->pm_private_data, return -EINVAL); snd_pcm_suspend_all(chip->pcm); @@ -1626,63 +1622,23 @@ snd_es18xx_write(chip, ES18XX_PM, chip->pm_reg ^= ES18XX_PM_SUS); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void snd_es18xx_resume(es18xx_t *chip) +static int snd_es18xx_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; - - if (card->power_state == SNDRV_CTL_POWER_D0) - return; + es18xx_t *chip = snd_magic_cast(es18xx_t, card->pm_private_data, return -EINVAL); /* restore PM register, we won't wake till (not 0x07) i/o activity though */ snd_es18xx_write(chip, ES18XX_PM, chip->pm_reg ^= ES18XX_PM_FM); snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -/* callback for control API */ -static int snd_es18xx_set_power_state(snd_card_t *card, unsigned int power_state) -{ - es18xx_t *chip = (es18xx_t *) card->power_state_private_data; - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_es18xx_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_es18xx_suspend(chip); - break; - default: - return -EINVAL; - } - return 0; -} - -static int snd_es18xx_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data) -{ - es18xx_t *chip = snd_magic_cast(es18xx_t, dev->data, return 0); - - switch (rqst) { - case PM_SUSPEND: - snd_es18xx_suspend(chip); - break; - case PM_RESUME: - snd_es18xx_resume(chip); - break; - } return 0; } #endif /* CONFIG_PM */ static int snd_es18xx_free(es18xx_t *chip) { -#ifdef CONFIG_PM - if (chip->pm_dev) - pm_unregister(chip->pm_dev); -#endif if (chip->res_port) { release_resource(chip->res_port); kfree_nocheck(chip->res_port); @@ -1900,37 +1856,38 @@ static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3 */ static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3 */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ES18xx soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ES18xx soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ES18xx soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef CONFIG_PNP -MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(isapnp, bool, boot_devs, 0444); MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for ES18xx driver."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220,0x280,0x20}},prefers:{0x220},base:16,dialog:list"); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for ES18xx driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0x300,0x330,0x30},{0x800,0xffe,0x2}},prefers:{0x330,0x300},base:16,dialog:combo"); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for ES18xx driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED ",allows:{{0x388},{0x800,0xffc,0x4}},prefers:{0x388},base:16,dialog:combo"); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for ES18xx driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC ",prefers:{5}"); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA 1 # for ES18xx driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA8_DESC ",prefers:{1}"); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA 2 # for ES18xx driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_ENABLED ",allows:{{0},{1},{3},{5}},dialog:list,prefers:{0}"); @@ -2149,16 +2106,9 @@ chip->rmidi = rmidi; } -#ifdef CONFIG_PM /* Power Management */ - chip->pm_dev = pm_register(PM_ISA_DEV, 0, snd_es18xx_pm_callback); - if (chip->pm_dev) { - chip->pm_dev->data = chip; - /* set control api callback */ - card->set_power_state = snd_es18xx_set_power_state; - card->power_state_private_data = chip; - } -#endif + snd_card_set_isa_pm_callback(card, snd_es18xx_suspend, snd_es18xx_resume, chip); + if ((err = snd_card_register(card)) < 0) { snd_card_free(card); return err; @@ -2283,39 +2233,3 @@ module_init(alsa_card_es18xx_init) module_exit(alsa_card_es18xx_exit) - - -#ifndef MODULE - -/* format is: snd-es18xx=enable,index,id,isapnp, - port,mpu_port,fm_port,irq, - dma1,dma2 */ - -static int __init alsa_card_es18xx_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - int __attribute__ ((__unused__)) pnp = INT_MAX; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pnp) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2); -#ifdef CONFIG_PNP - if (pnp != INT_MAX) - isapnp[nr_dev] = pnp; -#endif - nr_dev++; - return 1; -} - -__setup("snd-es18xx=", alsa_card_es18xx_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/gus/gusclassic.c b/sound/isa/gus/gusclassic.c --- a/sound/isa/gus/gusclassic.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/gus/gusclassic.c 2004-05-26 15:01:36 -07:00 @@ -24,12 +24,12 @@ #include <linux/init.h> #include <linux/delay.h> #include <linux/time.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/gus.h> #define SNDRV_LEGACY_AUTO_PROBE #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -49,35 +49,36 @@ /* 0 to 31, (0.59V-4.52V or 0.389V-2.98V) */ static int channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 24}; static int pcm_channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for GUS Classic soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for GUS Classic soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable GUS Classic soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for GUS Classic driver."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220,0x260,0x10}},dialog:list"); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for GUS Classic driver."); MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{3},{5},{9},{11},{12},{15}},dialog:list"); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for GUS Classic driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_ENABLED ",allows:{{1},{3},{5},{6},{7}},dialog:list"); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA2 # for GUS Classic driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_ENABLED ",allows:{{1},{3},{5},{6},{7}},dialog:list"); -MODULE_PARM(joystick_dac, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick_dac, int, boot_devs, 0444); MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for GUS Classic driver."); MODULE_PARM_SYNTAX(joystick_dac, SNDRV_ENABLED ",allows:{{0,31}}"); -MODULE_PARM(channels, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(channels, int, boot_devs, 0444); MODULE_PARM_DESC(channels, "GF1 channels for GUS Classic driver."); MODULE_PARM_SYNTAX(channels, SNDRV_ENABLED ",allows:{{14,32}}"); -MODULE_PARM(pcm_channels, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_channels, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for GUS Classic driver."); MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",allows:{{2,16}}"); @@ -269,35 +270,3 @@ module_init(alsa_card_gusclassic_init) module_exit(alsa_card_gusclassic_exit) - -#ifndef MODULE - -/* format is: snd-gusclassic=enable,index,id, - port,irq, - dma1,dma2, - joystick_dac, - channels,pcm_channels */ - -static int __init alsa_card_gusclassic_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2 && - get_option(&str,&joystick_dac[nr_dev]) == 2 && - get_option(&str,&channels[nr_dev]) == 2 && - get_option(&str,&pcm_channels[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-gusclassic=", alsa_card_gusclassic_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/gus/gusextreme.c b/sound/isa/gus/gusextreme.c --- a/sound/isa/gus/gusextreme.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/gus/gusextreme.c 2004-05-26 15:01:36 -07:00 @@ -24,6 +24,7 @@ #include <linux/init.h> #include <linux/delay.h> #include <linux/time.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/gus.h> #include <sound/es1688.h> @@ -32,7 +33,6 @@ #define SNDRV_LEGACY_AUTO_PROBE #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -56,47 +56,48 @@ /* 0 to 31, (0.59V-4.52V or 0.389V-2.98V) */ static int channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 24}; static int pcm_channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for GUS Extreme soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for GUS Extreme soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable GUS Extreme soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for GUS Extreme driver."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220,0x260,0x20}},dialog:list"); -MODULE_PARM(gf1_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(gf1_port, long, boot_devs, 0444); MODULE_PARM_DESC(gf1_port, "GF1 port # for GUS Extreme driver (optional)."); MODULE_PARM_SYNTAX(gf1_port, SNDRV_ENABLED ",allows:{{0x210,0x270,0x10}},dialog:list"); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for GUS Extreme driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0x300,0x320,0x10}},dialog:list"); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for GUS Extreme driver."); MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{5},{7},{9},{10}},dialog:list"); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for GUS Extreme driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_ENABLED ",allows:{{5},{7},{9},{10}},dialog:list"); -MODULE_PARM(gf1_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(gf1_irq, int, boot_devs, 0444); MODULE_PARM_DESC(gf1_irq, "GF1 IRQ # for GUS Extreme driver."); MODULE_PARM_SYNTAX(gf1_irq, SNDRV_ENABLED ",allows:{{2},{3},{5},{9},{11},{12},{15}},dialog:list"); -MODULE_PARM(dma8, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma8, int, boot_devs, 0444); MODULE_PARM_DESC(dma8, "8-bit DMA # for GUS Extreme driver."); MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "GF1 DMA # for GUS Extreme driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(joystick_dac, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick_dac, int, boot_devs, 0444); MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for GUS Extreme driver."); MODULE_PARM_SYNTAX(joystick_dac, SNDRV_ENABLED ",allows:{{0,31}}"); -MODULE_PARM(channels, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(channels, int, boot_devs, 0444); MODULE_PARM_DESC(channels, "GF1 channels for GUS Extreme driver."); MODULE_PARM_SYNTAX(channels, SNDRV_ENABLED ",allows:{{14,32}}"); -MODULE_PARM(pcm_channels, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_channels, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for GUS Extreme driver."); MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",allows:{{2,16}}"); @@ -387,37 +388,3 @@ module_init(alsa_card_gusextreme_init) module_exit(alsa_card_gusextreme_exit) - -#ifndef MODULE - -/* format is: snd-gusextreme=enable,index,id, - port,gf1_port,mpu_port, - irq,gf1_irq,mpu_irq, - dma8,dma1, - joystick_dac, - channels,pcm_channels */ - -static int __init alsa_card_gusextreme_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&gf1_port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&gf1_irq[nr_dev]) == 2 && - get_option(&str,&mpu_irq[nr_dev]) == 2 && - get_option(&str,&dma8[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-gusextreme=", alsa_card_gusextreme_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/gus/gusmax.c b/sound/isa/gus/gusmax.c --- a/sound/isa/gus/gusmax.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/gus/gusmax.c 2004-05-26 15:01:36 -07:00 @@ -24,13 +24,13 @@ #include <linux/init.h> #include <linux/delay.h> #include <linux/time.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/gus.h> #include <sound/cs4231.h> #define SNDRV_LEGACY_AUTO_PROBE #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -50,35 +50,36 @@ /* 0 to 31, (0.59V-4.52V or 0.389V-2.98V) */ static int channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 24}; static int pcm_channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for GUS MAX soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for GUS MAX soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable GUS MAX soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for GUS MAX driver."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220},{0x230},{0x240},{0x250},{0x260}},dialog:list"); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for GUS MAX driver."); MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{3},{5},{9},{11},{12},{15}},dialog:list"); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for GUS MAX driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA2 # for GUS MAX driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); -MODULE_PARM(joystick_dac, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick_dac, int, boot_devs, 0444); MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for GUS MAX driver."); MODULE_PARM_SYNTAX(joystick_dac, SNDRV_ENABLED ",allows:{{0,31}}"); -MODULE_PARM(channels, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(channels, int, boot_devs, 0444); MODULE_PARM_DESC(channels, "Used GF1 channels for GUS MAX driver."); MODULE_PARM_SYNTAX(channels, SNDRV_ENABLED ",allows:{{14,32}}"); -MODULE_PARM(pcm_channels, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_channels, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for GUS MAX driver."); MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",allows:{{2,16}}"); @@ -409,35 +410,3 @@ module_init(alsa_card_gusmax_init) module_exit(alsa_card_gusmax_exit) - -#ifndef MODULE - -/* format is: snd-gusmax=enable,index,id, - port,irq, - dma1,dma2, - joystick_dac, - channels,pcm_channels */ - -static int __init alsa_card_gusmax_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2 && - get_option(&str,&joystick_dac[nr_dev]) == 2 && - get_option(&str,&channels[nr_dev]) == 2 && - get_option(&str,&pcm_channels[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-gusmax=", alsa_card_gusmax_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/gus/interwave.c b/sound/isa/gus/interwave.c --- a/sound/isa/gus/interwave.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/gus/interwave.c 2004-05-26 15:01:36 -07:00 @@ -28,6 +28,7 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/gus.h> #include <sound/cs4231.h> @@ -37,7 +38,6 @@ #define SNDRV_LEGACY_AUTO_PROBE #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -73,46 +73,47 @@ static int midi[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; static int pcm_channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2}; static int effect[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for InterWave soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for InterWave soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable InterWave soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(isapnp, bool, boot_devs, 0444); MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for InterWave driver."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x210,0x260,0x10}},dialog:list"); #ifdef SNDRV_STB -MODULE_PARM(port_tc, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port_tc, long, boot_devs, 0444); MODULE_PARM_DESC(port_tc, "Tone control (TEA6330T - i2c bus) port # for InterWave driver."); MODULE_PARM_SYNTAX(port_tc, SNDRV_ENABLED ",allows:{{0x350,0x380,0x10}},dialog:list"); #endif -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for InterWave driver."); MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{3},{5},{9},{11},{12},{15}},dialog:list"); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for InterWave driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA2 # for InterWave driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); -MODULE_PARM(joystick_dac, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick_dac, int, boot_devs, 0444); MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for InterWave driver."); MODULE_PARM_SYNTAX(joystick_dac, SNDRV_ENABLED ",allows:{{0,31}}"); -MODULE_PARM(midi, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(midi, int, boot_devs, 0444); MODULE_PARM_DESC(midi, "MIDI UART enable for InterWave driver."); MODULE_PARM_SYNTAX(midi, SNDRV_ENABLED "," SNDRV_ENABLE_DESC); -MODULE_PARM(pcm_channels, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_channels, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for InterWave driver."); MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",allows:{{2,16}}"); -MODULE_PARM(effect, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(effect, int, boot_devs, 0444); MODULE_PARM_DESC(effect, "Effects enable for InterWave driver."); MODULE_PARM_SYNTAX(effect, SNDRV_ENABLED "," SNDRV_ENABLE_DESC); @@ -985,49 +986,3 @@ module_init(alsa_card_interwave_init) module_exit(alsa_card_interwave_exit) - -#ifndef MODULE - -/* format is: snd-interwave=enable,index,id,isapnp, - port[,port_tc],irq, - dma1,dma2, - joystick_dac,midi, - pcm_channels,effect */ - -static int __init alsa_card_interwave_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - int __attribute__ ((__unused__)) pnp = INT_MAX; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pnp) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && -#ifdef SNDRV_STB - get_option_long(&str,&port_tc[nr_dev]) == 2 && -#endif - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2 && - get_option(&str,&joystick_dac[nr_dev]) == 2 && - get_option(&str,&midi[nr_dev]) == 2 && - get_option(&str,&pcm_channels[nr_dev]) == 2 && - get_option(&str,&effect[nr_dev]) == 2); -#ifdef CONFIG_PNP - if (pnp != INT_MAX) - isapnp[nr_dev] = pnp; -#endif - nr_dev++; - return 1; -} - -#ifndef SNDRV_STB -__setup("snd-interwave=", alsa_card_interwave_setup); -#else -__setup("snd-interwave-stb=", alsa_card_interwave_setup); -#endif - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c --- a/sound/isa/opl3sa2.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/opl3sa2.c 2004-05-26 15:01:36 -07:00 @@ -25,11 +25,11 @@ #include <linux/pm.h> #include <linux/slab.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/cs4231.h> #include <sound/mpu401.h> #include <sound/opl3.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/io.h> @@ -59,46 +59,47 @@ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 1,3,5,6,7 */ static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 1,3,5,6,7 */ static int opl3sa3_ymode[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0 }; /* 0,1,2,3 */ /*SL Added*/ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for OPL3-SA soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for OPL3-SA soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable OPL3-SA soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef CONFIG_PNP -MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(isapnp, bool, boot_devs, 0444); MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for OPL3-SA driver."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0xf86},{0x370},{0x100}},dialog:list"); -MODULE_PARM(sb_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(sb_port, long, boot_devs, 0444); MODULE_PARM_DESC(sb_port, "SB port # for OPL3-SA driver."); MODULE_PARM_SYNTAX(sb_port, SNDRV_ENABLED ",allows:{{0x220},{0x240},{0x260}},dialog:list"); -MODULE_PARM(wss_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(wss_port, long, boot_devs, 0444); MODULE_PARM_DESC(wss_port, "WSS port # for OPL3-SA driver."); MODULE_PARM_SYNTAX(wss_port, SNDRV_ENABLED ",allows:{{0x530},{0xe80},{0xf40},{0x604}},dialog:list"); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for OPL3-SA driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED ",allows:{{0x388}},dialog:list"); -MODULE_PARM(midi_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(midi_port, long, boot_devs, 0444); MODULE_PARM_DESC(midi_port, "MIDI port # for OPL3-SA driver."); MODULE_PARM_SYNTAX(midi_port, SNDRV_ENABLED ",allows:{{0x330},{0x300}},dialog:list"); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for OPL3-SA driver."); MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{0},{1},{3},{5},{9},{11},{12},{15}},dialog:list"); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for OPL3-SA driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_ENABLED ",allows:{{1},{3},{5},{6},{7}},dialog:list"); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA2 # for OPL3-SA driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_ENABLED ",allows:{{1},{3},{5},{6},{7}},dialog:list"); -MODULE_PARM(opl3sa3_ymode, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); /* SL Added */ +module_param_array(opl3sa3_ymode, int, boot_devs, 0444); MODULE_PARM_DESC(opl3sa3_ymode, "Speaker size selection for 3D Enhancement mode: Desktop/Large Notebook/Small Notebook/HiFi."); MODULE_PARM_SYNTAX(opl3sa3_ymode, SNDRV_ENABLED ",allows:{{0,3}},dialog:list"); /* SL Added */ @@ -151,7 +152,6 @@ snd_kcontrol_t *master_switch; snd_kcontrol_t *master_volume; #ifdef CONFIG_PM - struct pm_dev *pm_dev; void (*cs4231_suspend)(cs4231_t *); void (*cs4231_resume)(cs4231_t *); #endif @@ -168,6 +168,8 @@ { .id = "YMH0030", .devs = { { "YMH0021" } } }, /* Yamaha OPL3-SA2 */ { .id = "YMH0800", .devs = { { "YMH0021" } } }, + /* Yamaha OPL3-SA2 */ + { .id = "YMH0801", .devs = { { "YMH0021" } } }, /* NeoMagic MagicWave 3DX */ { .id = "NMX2200", .devs = { { "YMH2210" } } }, /* --- */ @@ -547,12 +549,9 @@ /* Power Management support functions */ #ifdef CONFIG_PM -static void snd_opl3sa2_suspend(opl3sa2_t *chip) +static int snd_opl3sa2_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; - - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; + opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, card->pm_private_data, return -EINVAL); snd_pcm_suspend_all(chip->cs4231->pcm); /* stop before saving regs */ chip->cs4231_suspend(chip->cs4231); @@ -561,16 +560,14 @@ snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void snd_opl3sa2_resume(opl3sa2_t *chip) +static int snd_opl3sa2_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, card->pm_private_data, return -EINVAL); int i; - if (card->power_state == SNDRV_CTL_POWER_D0) - return; - /* power up */ snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0); @@ -587,43 +584,8 @@ chip->cs4231_resume(chip->cs4231); snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -/* callback for control API */ -static int snd_opl3sa2_set_power_state(snd_card_t *card, unsigned int power_state) -{ - opl3sa2_t *chip = (opl3sa2_t *) card->power_state_private_data; - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_opl3sa2_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_opl3sa2_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } - -static int snd_opl3sa2_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data) -{ - opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, dev->data, return 0); - - switch (rqst) { - case PM_SUSPEND: - snd_opl3sa2_suspend(chip); - break; - case PM_RESUME: - snd_opl3sa2_resume(chip); - break; - } - return 0; -} - #endif /* CONFIG_PM */ #ifdef CONFIG_PNP @@ -688,10 +650,6 @@ static int snd_opl3sa2_free(opl3sa2_t *chip) { -#ifdef CONFIG_PM - if (chip->pm_dev) - pm_unregister(chip->pm_dev); -#endif if (chip->irq >= 0) free_irq(chip->irq, (void *)chip); if (chip->res_port) { @@ -816,22 +774,12 @@ goto __error; } #ifdef CONFIG_PM - /* Power Management */ - chip->pm_dev = pm_register(PM_ISA_DEV, 0, snd_opl3sa2_pm_callback); - if (chip->pm_dev) { - chip->pm_dev->data = chip; - /* remember callbacks for cs4231 - they are called inside - * opl3sa2 pm callback - */ - chip->cs4231_suspend = chip->cs4231->suspend; - chip->cs4231_resume = chip->cs4231->resume; - /* now clear callbacks for cs4231 */ - chip->cs4231->suspend = NULL; - chip->cs4231->resume = NULL; - /* set control api callback */ - card->set_power_state = snd_opl3sa2_set_power_state; - card->power_state_private_data = chip; - } + chip->cs4231_suspend = chip->cs4231->suspend; + chip->cs4231_resume = chip->cs4231->resume; + /* now clear callbacks for cs4231 */ + chip->cs4231->suspend = NULL; + chip->cs4231->resume = NULL; + snd_card_set_isa_pm_callback(card, snd_opl3sa2_suspend, snd_opl3sa2_resume, chip); #endif sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d", @@ -932,42 +880,3 @@ module_init(alsa_card_opl3sa2_init) module_exit(alsa_card_opl3sa2_exit) - -#ifndef MODULE - -/* format is: snd-opl3sa2=enable,index,id,isapnp, - port,sb_port,wss_port,fm_port, - midi_port,irq,dma1,dma2, - opl3sa3_ymode */ - -static int __init alsa_card_opl3sa2_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - int __attribute__ ((__unused__)) pnp = INT_MAX; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pnp) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&sb_port[nr_dev]) == 2 && - get_option_long(&str,&wss_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option_long(&str,&midi_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2 && - get_option(&str,&opl3sa3_ymode[nr_dev]) == 2); -#ifdef CONFIG_PNP - if (pnp != INT_MAX) - isapnp[nr_dev] = pnp; -#endif - nr_dev++; - return 1; -} - -__setup("snd-opl3sa2=", alsa_card_opl3sa2_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c --- a/sound/isa/opti9xx/opti92x-ad1848.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/opti9xx/opti92x-ad1848.c 2004-05-26 15:01:35 -07:00 @@ -30,6 +30,7 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> #ifdef CS4231 #include <sound/cs4231.h> @@ -48,7 +49,6 @@ #endif #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>"); @@ -84,38 +84,38 @@ static int dma2 = SNDRV_DEFAULT_DMA1; /* 0,1,3 */ #endif /* CS4231 || OPTi93X */ -MODULE_PARM(index, "i"); +module_param(index, int, 0444); MODULE_PARM_DESC(index, "Index value for opti9xx based soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "s"); +module_param(id, charp, 0444); MODULE_PARM_DESC(id, "ID string for opti9xx based soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -//MODULE_PARM(enable, "i"); +//module_param(enable, bool, 0444); //MODULE_PARM_DESC(enable, "Enable opti9xx soundcard."); //MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(isapnp, "i"); +module_param(isapnp, bool, 0444); MODULE_PARM_DESC(isapnp, "Enable ISA PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); -MODULE_PARM(port, "l"); +module_param(port, long, 0444); MODULE_PARM_DESC(port, "WSS port # for opti9xx driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT_DESC); -MODULE_PARM(mpu_port, "l"); +module_param(mpu_port, long, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for opti9xx driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT_DESC); -MODULE_PARM(fm_port, "l"); +module_param(fm_port, long, 0444); MODULE_PARM_DESC(fm_port, "FM port # for opti9xx driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT_DESC); -MODULE_PARM(irq, "i"); +module_param(irq, int, 0444); MODULE_PARM_DESC(irq, "WSS irq # for opti9xx driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "i"); +module_param(mpu_irq, int, 0444); MODULE_PARM_DESC(mpu_irq, "MPU-401 irq # for opti9xx driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma1, "i"); +module_param(dma1, int, 0444); MODULE_PARM_DESC(dma1, "1st dma # for opti9xx driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); #if defined(CS4231) || defined(OPTi93X) -MODULE_PARM(dma2, "i"); +module_param(dma2, int, 0444); MODULE_PARM_DESC(dma2, "2nd dma # for opti9xx driver."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); #endif /* CS4231 || OPTi93X */ @@ -602,7 +602,11 @@ #endif /* CS4231 || OPTi93X */ spin_lock_irqsave(&chip->lock, flags); +#ifndef OPTi93X + outb(irq_bits << 3 | dma_bits, chip->wss_base); +#else /* OPTi93X */ snd_opti9xx_write(chip, OPTi9XX_MC_REG(3), (irq_bits << 3 | dma_bits)); +#endif /* OPTi93X */ spin_unlock_irqrestore(&chip->lock, flags); __skip_resources: @@ -2253,47 +2257,3 @@ module_init(alsa_card_opti9xx_init) module_exit(alsa_card_opti9xx_exit) - -#ifndef MODULE - -/* format is: snd-opti9xx=enable,index,id,isapnp, - port,mpu_port,fm_port, - irq,mpu_irq, - dma1,[dma2] */ - -static int __init alsa_card_opti9xx_setup(char *str) -{ - int __attribute__ ((__unused__)) enable = 1; - int __attribute__ ((__unused__)) pnp = INT_MAX; - - (void)(get_option(&str,&enable) == 2 && - get_option(&str,&index) == 2 && - get_id(&str,&id) == 2 && - get_option(&str,&pnp) == 2 && - get_option_long(&str,&port) == 2 && - get_option_long(&str,&mpu_port) == 2 && - get_option_long(&str,&fm_port) == 2 && - get_option(&str,&irq) == 2 && - get_option(&str,&mpu_irq) == 2 && - get_option(&str,&dma1) == 2 -#if defined(CS4231) || defined(OPTi93X) - && - get_option(&str,&dma2) == 2 -#endif - ); -#ifdef CONFIG_PNP - if (pnp != INT_MAX) - isapnp = pnp; -#endif - return 1; -} - -#if defined(OPTi93X) -__setup("snd-opti93x=", alsa_card_opti9xx_setup); -#elif defined(CS4231) -__setup("snd-opti92x-cs4231=", alsa_card_opti9xx_setup); -#else -__setup("snd-opti92x-ad1848=", alsa_card_opti9xx_setup); -#endif - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/sb/emu8000_patch.c b/sound/isa/sb/emu8000_patch.c --- a/sound/isa/sb/emu8000_patch.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/sb/emu8000_patch.c 2004-05-26 15:01:35 -07:00 @@ -21,11 +21,11 @@ #include "emu8000_local.h" #include <asm/uaccess.h> +#include <linux/moduleparam.h> -MODULE_PARM(emu8000_reset_addr, "i"); +static int emu8000_reset_addr = 0; +module_param(emu8000_reset_addr, int, 0444); MODULE_PARM_DESC(emu8000_reset_addr, "reset write address at each time (makes slowdown)"); - -int emu8000_reset_addr = 0; /* diff -Nru a/sound/isa/sb/es968.c b/sound/isa/sb/es968.c --- a/sound/isa/sb/es968.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/sb/es968.c 2004-05-26 15:01:36 -07:00 @@ -24,8 +24,8 @@ #include <linux/init.h> #include <linux/time.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/sb.h> @@ -45,23 +45,24 @@ static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* PnP setup */ static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* Pnp setup */ static int dma8[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* PnP setup */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for es968 based soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for es968 based soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable es968 based soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for es968 driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for es968 driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma8, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma8, int, boot_devs, 0444); MODULE_PARM_DESC(dma8, "8-bit DMA # for es968 driver."); MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC); @@ -242,28 +243,3 @@ module_init(alsa_card_es968_init) module_exit(alsa_card_es968_exit) - -#ifndef MODULE - -/* format is: snd-es968=enable,index,id, - port,irq,dma1 */ - -static int __init alsa_card_es968_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma8[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-es968=", alsa_card_es968_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c --- a/sound/isa/sb/sb16.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/sb/sb16.c 2004-05-26 15:01:36 -07:00 @@ -24,6 +24,7 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/sb.h> #include <sound/sb16_csp.h> @@ -34,7 +35,6 @@ #define SNDRV_LEGACY_AUTO_PROBE #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> #define chip_t sb_t @@ -92,54 +92,55 @@ #ifdef SNDRV_SBAWE_EMU8000 static int seq_ports[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4}; #endif +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for SoundBlaster 16 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for SoundBlaster 16 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable SoundBlaster 16 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef CONFIG_PNP -MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(isapnp, bool, boot_devs, 0444); MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for SB16 driver."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220},{0x240},{0x260},{0x280}},dialog:list"); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for SB16 driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0x330},{0x300}},dialog:list"); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port # for SB16 PnP driver."); MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED ",allows:{{0x388},{0x38c},{0x390},{0x394}},dialog:list"); #ifdef SNDRV_SBAWE_EMU8000 -MODULE_PARM(awe_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(awe_port, long, boot_devs, 0444); MODULE_PARM_DESC(awe_port, "AWE port # for SB16 PnP driver."); MODULE_PARM_SYNTAX(awe_port, SNDRV_ENABLED ",allows:{{0x620},{0x640},{0x660},{0x680}},dialog:list"); #endif -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for SB16 driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma8, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma8, int, boot_devs, 0444); MODULE_PARM_DESC(dma8, "8-bit DMA # for SB16 driver."); MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC); -MODULE_PARM(dma16, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma16, int, boot_devs, 0444); MODULE_PARM_DESC(dma16, "16-bit DMA # for SB16 driver."); MODULE_PARM_SYNTAX(dma16, SNDRV_DMA16_DESC); -MODULE_PARM(mic_agc, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mic_agc, int, boot_devs, 0444); MODULE_PARM_DESC(mic_agc, "Mic Auto-Gain-Control switch."); MODULE_PARM_SYNTAX(mic_agc, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); #ifdef CONFIG_SND_SB16_CSP -MODULE_PARM(csp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(csp, int, boot_devs, 0444); MODULE_PARM_DESC(csp, "ASP/CSP chip support."); MODULE_PARM_SYNTAX(csp, SNDRV_ENABLED "," SNDRV_ENABLE_DESC); #endif #ifdef SNDRV_SBAWE_EMU8000 -MODULE_PARM(seq_ports, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(seq_ports, int, boot_devs, 0444); MODULE_PARM_DESC(seq_ports, "Number of sequencer ports for WaveTable synth."); MODULE_PARM_SYNTAX(seq_ports, SNDRV_ENABLED ",allows:{{0,8}},skill:advanced"); #endif @@ -247,6 +248,8 @@ { .id = "CTLXXXX" , .devs = { { "CTL0044" }, { "CTL0023" } } }, { .id = "CTLXXXX" , .devs = { { "CTL0045" }, { "CTL0022" } } }, #endif /* SNDRV_SBAWE */ + /* Sound Blaster 16 PnP (Virtual PC 2004)*/ + { .id = "tBA03b0", .devs = { { "PNPb003" } } }, { .id = "", } }; @@ -691,60 +694,3 @@ module_init(alsa_card_sb16_init) module_exit(alsa_card_sb16_exit) - -#ifndef MODULE - -/* format is: snd-sb16=enable,index,id,isapnp, - port,mpu_port,fm_port, - irq,dma8,dma16, - mic_agc,csp, - [awe_port,seq_ports] */ - -static int __init alsa_card_sb16_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - int __attribute__ ((__unused__)) pnp = INT_MAX; - int __attribute__ ((__unused__)) xcsp = INT_MAX; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pnp) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma8[nr_dev]) == 2 && - get_option(&str,&dma16[nr_dev]) == 2 && - get_option(&str,&mic_agc[nr_dev]) == 2 -#ifdef CONFIG_SND_SB16_CSP - && - get_option(&str,&xcsp) == 2 -#endif -#ifdef SNDRV_SBAWE_EMU8000 - && - get_option_long(&str,&awe_port[nr_dev]) == 2 && - get_option(&str,&seq_ports[nr_dev]) == 2 -#endif - ); -#ifdef CONFIG_PNP - if (pnp != INT_MAX) - isapnp[nr_dev] = pnp; -#endif -#ifdef CONFIG_SND_SB16_CSP - if (xcsp != INT_MAX) - csp[nr_dev] = xcsp; -#endif - nr_dev++; - return 1; -} - -#ifndef SNDRV_SBAWE_EMU8000 -__setup("snd-sb16=", alsa_card_sb16_setup); -#else -__setup("snd-sbawe=", alsa_card_sb16_setup); -#endif - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/sb/sb8.c b/sound/isa/sb/sb8.c --- a/sound/isa/sb/sb8.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/sb/sb8.c 2004-05-26 15:01:36 -07:00 @@ -23,11 +23,11 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/ioport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/sb.h> #include <sound/opl3.h> #define SNDRV_LEGACY_AUTO_PROBE -#define SNDRV_GET_ID #include <sound/initval.h> #define chip_t sb_t @@ -44,23 +44,24 @@ static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* 0x220,0x240,0x260 */ static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */ static int dma8[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 1,3 */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Sound Blaster soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Sound Blaster soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Sound Blaster soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for SB8 driver."); MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for SB8 driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma8, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma8, int, boot_devs, 0444); MODULE_PARM_DESC(dma8, "8-bit DMA # for SB8 driver."); MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC); @@ -230,28 +231,3 @@ module_init(alsa_card_sb8_init) module_exit(alsa_card_sb8_exit) - -#ifndef MODULE - -/* format is: snd-sb8=enable,index,id, - port,irq,dma8 */ - -static int __init alsa_card_sb8_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&port[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma8[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-sb8=", alsa_card_sb8_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/sgalaxy.c b/sound/isa/sgalaxy.c --- a/sound/isa/sgalaxy.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/sgalaxy.c 2004-05-26 15:01:36 -07:00 @@ -27,13 +27,13 @@ #include <linux/delay.h> #include <linux/time.h> #include <linux/irq.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/sb.h> #include <sound/ad1848.h> #include <sound/control.h> #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Christopher Butler <chrisb@sandy.force9.co.uk>"); @@ -49,23 +49,24 @@ static long wssport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* 0x530,0xe80,0xf40,0x604 */ static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 7,9,10,11 */ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3 */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Sound Galaxy soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Sound Galaxy soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(sbport, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(sbport, long, boot_devs, 0444); MODULE_PARM_DESC(sbport, "Port # for Sound Galaxy SB driver."); MODULE_PARM_SYNTAX(sbport, SNDRV_ENABLED ",allows:{{0x220},{0x240}},dialog:list"); -MODULE_PARM(wssport, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(wssport, long, boot_devs, 0444); MODULE_PARM_DESC(wssport, "Port # for Sound Galaxy WSS driver."); MODULE_PARM_SYNTAX(wssport, SNDRV_ENABLED ",allows:{{0x530},{0xe80},{0xf40},{0x604}},dialog:list"); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for Sound Galaxy driver."); MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{7},{9},{10},{11}},dialog:list"); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for Sound Galaxy driver."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA8_DESC); @@ -327,30 +328,3 @@ module_init(alsa_card_sgalaxy_init) module_exit(alsa_card_sgalaxy_exit) - -#ifndef MODULE - -/* format is: snd-sgalaxy=enable,index,id, - sbport,wssport, - irq,dma1 */ - -static int __init alsa_card_sgalaxy_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&sbport[nr_dev]) == 2 && - get_option_long(&str,&wssport[nr_dev]) == 2 && - get_option(&str,&irq[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-sgalaxy=", alsa_card_sgalaxy_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/sscape.c b/sound/isa/sscape.c --- a/sound/isa/sscape.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/sscape.c 2004-05-26 15:01:35 -07:00 @@ -26,12 +26,12 @@ #include <linux/delay.h> #include <linux/pnp.h> #include <linux/spinlock.h> +#include <linux/moduleparam.h> #include <asm/dma.h> #include <sound/core.h> #include <sound/hwdep.h> #include <sound/cs4231.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/sscape_ioctl.h> @@ -49,28 +49,29 @@ static int irq[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_IRQ; static int mpu_irq[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_IRQ; static int dma[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_DMA; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index number for SoundScape soundcard"); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "Description for SoundScape card"); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(port, long, boot_devs, 0444); MODULE_PARM_DESC(port, "Port # for SoundScape driver."); MODULE_PARM_SYNTAX(port, SNDRV_ENABLED); -MODULE_PARM(irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(irq, int, boot_devs, 0444); MODULE_PARM_DESC(irq, "IRQ # for SoundScape driver."); MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC); -MODULE_PARM(mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_irq, "MPU401 IRQ # for SoundScape driver."); MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC); -MODULE_PARM(dma, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma, int, boot_devs, 0444); MODULE_PARM_DESC(dma, "DMA # for SoundScape driver."); MODULE_PARM_SYNTAX(dma, SNDRV_DMA8_DESC); @@ -1531,30 +1532,3 @@ module_init(sscape_init); module_exit(sscape_exit); - -#ifndef MODULE - -/* format is: snd-sscape=index,id,port,irq,mpu_irq,dma */ - -static int __init builtin_sscape_setup(char *str) -{ - static unsigned __initdata nr_dev; - - if (nr_dev >= SNDRV_CARDS) - return 0; - - (void)((get_option(&str, &index[nr_dev]) == 2) && - (get_id(&str, &id[nr_dev]) == 2) && - (get_option_long(&str, &port[nr_dev]) == 2) && - (get_option(&str, &irq[nr_dev]) == 2) && - (get_option(&str, &mpu_irq[nr_dev]) == 2) && - (get_option(&str, &dma[nr_dev]) == 2)); - - ++nr_dev; - return 1; -} - -__setup("snd-sscape=", builtin_sscape_setup); - -#endif - diff -Nru a/sound/isa/wavefront/wavefront.c b/sound/isa/wavefront/wavefront.c --- a/sound/isa/wavefront/wavefront.c 2004-05-26 15:01:36 -07:00 +++ b/sound/isa/wavefront/wavefront.c 2004-05-26 15:01:36 -07:00 @@ -24,8 +24,8 @@ #include <linux/interrupt.h> #include <linux/slab.h> #include <linux/pnp.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/opl3.h> #include <sound/snd_wavefront.h> @@ -52,49 +52,50 @@ static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; /* 0,1,3,5,6,7 */ static int use_cs4232_midi[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for WaveFront soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for WaveFront soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable WaveFront soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef CONFIG_PNP -MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(isapnp, bool, boot_devs, 0444); MODULE_PARM_DESC(isapnp, "ISA PnP detection for WaveFront soundcards."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif -MODULE_PARM(cs4232_pcm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(cs4232_pcm_port, long, boot_devs, 0444); MODULE_PARM_DESC(cs4232_pcm_port, "Port # for CS4232 PCM interface."); MODULE_PARM_SYNTAX(cs4232_pcm_port, SNDRV_PORT12_DESC); -MODULE_PARM(cs4232_pcm_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(cs4232_pcm_irq, int, boot_devs, 0444); MODULE_PARM_DESC(cs4232_pcm_irq, "IRQ # for CS4232 PCM interface."); MODULE_PARM_SYNTAX(cs4232_pcm_irq, SNDRV_ENABLED ",allows:{{5},{7},{9},{11},{12},{15}},dialog:list"); -MODULE_PARM(dma1, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma1, int, boot_devs, 0444); MODULE_PARM_DESC(dma1, "DMA1 # for CS4232 PCM interface."); MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC); -MODULE_PARM(dma2, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dma2, int, boot_devs, 0444); MODULE_PARM_DESC(dma2, "DMA2 # for CS4232 PCM interface."); MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); -MODULE_PARM(cs4232_mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(cs4232_mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(cs4232_mpu_port, "port # for CS4232 MPU-401 interface."); MODULE_PARM_SYNTAX(cs4232_mpu_port, SNDRV_PORT12_DESC); -MODULE_PARM(cs4232_mpu_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(cs4232_mpu_irq, int, boot_devs, 0444); MODULE_PARM_DESC(cs4232_mpu_irq, "IRQ # for CS4232 MPU-401 interface."); MODULE_PARM_SYNTAX(cs4232_mpu_irq, SNDRV_ENABLED ",allows:{{9},{11},{12},{15}},dialog:list"); -MODULE_PARM(ics2115_irq, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ics2115_irq, int, boot_devs, 0444); MODULE_PARM_DESC(ics2115_irq, "IRQ # for ICS2115."); MODULE_PARM_SYNTAX(ics2115_irq, SNDRV_ENABLED ",allows:{{9},{11},{12},{15}},dialog:list"); -MODULE_PARM(ics2115_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(ics2115_port, long, boot_devs, 0444); MODULE_PARM_DESC(ics2115_port, "Port # for ICS2115."); MODULE_PARM_SYNTAX(ics2115_port, SNDRV_PORT12_DESC); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port #."); MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC); -MODULE_PARM(use_cs4232_midi, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(use_cs4232_midi, bool, boot_devs, 0444); MODULE_PARM_DESC(use_cs4232_midi, "Use CS4232 MPU-401 interface (inaccessibly located inside your computer)"); MODULE_PARM_SYNTAX(use_cs4232_midi, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); @@ -731,41 +732,3 @@ module_init(alsa_card_wavefront_init) module_exit(alsa_card_wavefront_exit) - -#ifndef MODULE - -/* format is: snd-wavefront=enable,index,id,isapnp, - cs4232_pcm_port,cs4232_pcm_irq, - cs4232_mpu_port,cs4232_mpu_irq, - ics2115_port,ics2115_irq, - fm_port, - dma1,dma2, - use_cs4232_midi */ - -static int __init alsa_card_wavefront_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&isapnp[nr_dev]) == 2 && - get_option_long(&str,&cs4232_pcm_port[nr_dev]) == 2 && - get_option(&str,&cs4232_pcm_irq[nr_dev]) == 2 && - get_option_long(&str,&cs4232_mpu_port[nr_dev]) == 2 && - get_option(&str,&cs4232_mpu_irq[nr_dev]) == 2 && - get_option_long(&str,&ics2115_port[nr_dev]) == 2 && - get_option(&str,&ics2115_irq[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option(&str,&dma1[nr_dev]) == 2 && - get_option(&str,&dma2[nr_dev]) == 2 && - get_option(&str,&use_cs4232_midi[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-wavefront=", alsa_card_wavefront_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/isa/wavefront/wavefront_synth.c b/sound/isa/wavefront/wavefront_synth.c --- a/sound/isa/wavefront/wavefront_synth.c 2004-05-26 15:01:35 -07:00 +++ b/sound/isa/wavefront/wavefront_synth.c 2004-05-26 15:01:35 -07:00 @@ -27,6 +27,7 @@ #include <linux/delay.h> #include <linux/time.h> #include <linux/wait.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/snd_wavefront.h> #include <sound/initval.h> @@ -83,25 +84,25 @@ int osrun_time = 10; /* time in seconds we wait for the OS to start running. */ -MODULE_PARM(wf_raw,"i"); +module_param(wf_raw, int, 0444); MODULE_PARM_DESC(wf_raw, "if non-zero, assume that we need to boot the OS"); -MODULE_PARM(fx_raw,"i"); +module_param(fx_raw, int, 0444); MODULE_PARM_DESC(fx_raw, "if non-zero, assume that the FX process needs help"); -MODULE_PARM(debug_default,"i"); +module_param(debug_default, int, 0444); MODULE_PARM_DESC(debug_default, "debug parameters for card initialization"); -MODULE_PARM(wait_usecs,"i"); +module_param(wait_usecs, int, 0444); MODULE_PARM_DESC(wait_usecs, "how long to wait without sleeping, usecs"); -MODULE_PARM(sleep_interval,"i"); +module_param(sleep_interval, int, 0444); MODULE_PARM_DESC(sleep_interval, "how long to sleep when waiting for reply"); -MODULE_PARM(sleep_tries,"i"); +module_param(sleep_tries, int, 0444); MODULE_PARM_DESC(sleep_tries, "how many times to try sleeping during a wait"); -MODULE_PARM(ospath,"s"); +module_param(ospath, charp, 0444); MODULE_PARM_DESC(ospath, "full pathname to processed ICS2115 OS firmware"); -MODULE_PARM(reset_time,"i"); +module_param(reset_time, int, 0444); MODULE_PARM_DESC(reset_time, "how long to wait for a reset to take effect"); -MODULE_PARM(ramcheck_time,"i"); +module_param(ramcheck_time, int, 0444); MODULE_PARM_DESC(ramcheck_time, "how many seconds to wait for the RAM test"); -MODULE_PARM(osrun_time,"i"); +module_param(osrun_time, int, 0444); MODULE_PARM_DESC(osrun_time, "how many seconds to wait for the ICS2115 OS"); /* if WF_DEBUG not defined, no run-time debugging messages will diff -Nru a/sound/oss/nm256_audio.c b/sound/oss/nm256_audio.c --- a/sound/oss/nm256_audio.c 2004-05-26 15:01:35 -07:00 +++ b/sound/oss/nm256_audio.c 2004-05-26 15:01:35 -07:00 @@ -52,6 +52,7 @@ /* These belong in linux/pci.h. */ #define PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO 0x8005 #define PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO 0x8006 +#define PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO 0x8016 /* List of cards. */ static struct nm256_info *nmcard_list; @@ -1275,6 +1276,8 @@ return nm256_install(pcidev, REV_NM256AV, "256AV"); if (pcidev->device == PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO) return nm256_install(pcidev, REV_NM256ZX, "256ZX"); + if (pcidev->device == PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO) + return nm256_install(pcidev, REV_NM256ZX, "256XL+"); return -1; /* should not come here ... */ } @@ -1661,6 +1664,8 @@ {PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0}, {PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO, + PCI_ANY_ID, PCI_ANY_ID, 0, 0}, + {PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0}, {0,} }; diff -Nru a/sound/oss/sb_card.c b/sound/oss/sb_card.c --- a/sound/oss/sb_card.c 2004-05-26 15:01:36 -07:00 +++ b/sound/oss/sb_card.c 2004-05-26 15:01:36 -07:00 @@ -181,6 +181,13 @@ scc->mpucnf.io_base = pnp_port_start(dev,1); return; } + if(!strncmp("tBA",scc->card_id,3)) { + scc->conf.io_base = pnp_port_start(dev,0); + scc->conf.irq = pnp_irq(dev,0); + scc->conf.dma = pnp_dma(dev,0); + scc->conf.dma2 = pnp_dma(dev,1); + return; + } if(!strncmp("ESS",scc->card_id,3)) { scc->conf.io_base = pnp_port_start(dev,0); scc->conf.irq = pnp_irq(dev,0); diff -Nru a/sound/oss/sb_card.h b/sound/oss/sb_card.h --- a/sound/oss/sb_card.h 2004-05-26 15:01:36 -07:00 +++ b/sound/oss/sb_card.h 2004-05-26 15:01:36 -07:00 @@ -140,6 +140,8 @@ {.id = "RTL3000", .driver_data = 0, .devs = { {.id="@@@2001"}, {.id="@X@2001"}, {.id="@H@0001"}, } }, + /* Sound Blaster 16 (Virtual PC 2004) */ + {.id = "tBA03b0", .driver_data = 0, .devs = { {.id="PNPb003"}, } }, /* -end- */ {.id = "", } }; diff -Nru a/sound/parisc/harmony.c b/sound/parisc/harmony.c --- a/sound/parisc/harmony.c 2004-05-26 15:01:35 -07:00 +++ b/sound/parisc/harmony.c 2004-05-26 15:01:35 -07:00 @@ -56,11 +56,7 @@ * also controls for enabling/disabling internal speaker and line * input. * - * Buffers used by this driver are all DMA consistent. Since harmony is - * not "real" pci device, we use a fake struct pci_dev for - * pci_alloc_consistent(). - * (note that some machines -712 for ex.- don't implement DMA consistent - * memory, so we will need to use kmalloc instead) + * Buffers used by this driver are all DMA consistent. */ #include <linux/delay.h> @@ -70,11 +66,11 @@ #include <linux/slab.h> #include <linux/time.h> #include <linux/wait.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/rawmidi.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/info.h> #include <asm/hardware.h> @@ -100,16 +96,14 @@ #define MAX_PCM_SUBSTREAMS 4 #define MAX_MIDI_DEVICES 0 -#define BUFFER_SIZE 4096 -#define MAX_BUFS 10 +#define HARMONY_BUF_SIZE 4096 +#define MAX_BUFS 10 +#define MAX_BUFFER_SIZE (MAX_BUFS * HARMONY_BUF_SIZE) /* number of silence & graveyard buffers */ #define GRAVEYARD_BUFS 3 #define SILENCE_BUFS 3 -#define MAX_BUFFER_SIZE (MAX_BUFS * BUFFER_SIZE) -#define HARMONY_BUF_SIZE BUFFER_SIZE - #define HARMONY_CNTL_C 0x80000000 #define HARMONY_DSTATUS_PN 0x00000200 @@ -140,6 +134,17 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE; +static int boot_devs; + +module_param_array(index, int, boot_devs, 0444); +MODULE_PARM_DESC(index, "Index value for Sun CS4231 soundcard."); +MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); +module_param_array(id, charp, boot_devs, 0444); +MODULE_PARM_DESC(id, "ID string for Sun CS4231 soundcard."); +MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); +module_param_array(enable, bool, boot_devs, 0444); +MODULE_PARM_DESC(enable, "Enable Sun CS4231 soundcard."); +MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); /* Register offset (from base hpa) */ #define REG_ID 0x00 @@ -191,21 +196,18 @@ int cap_stopped; int cap_total; - struct pci_dev *fake_pci_dev; /* The fake pci_dev needed for - pci_* functions under ccio. */ + struct parisc_device *pa_dev; + + struct snd_dma_device dma_dev; /* the graveyard buffer is used as recording buffer when playback, * because harmony always want a buffer to put recorded data */ - - unsigned char *graveyard_addr; - dma_addr_t graveyard_dma; + struct snd_dma_buffer graveyard_dma; int graveyard_count; /* same thing for silence buffer */ - unsigned char *silence_addr; - dma_addr_t silence_dma; + struct snd_dma_buffer silence_dma; int silence_count; - struct snd_dma_device dma_dev; /* alsa stuff */ snd_card_t *card; @@ -264,6 +266,15 @@ #define HARMONY_SR_33KHZ 0x16 #define HARMONY_SR_6KHZ 0x17 +/* bits corresponding to the entries of snd_card_harmony_rates */ +static unsigned int rate_bits[14] = { + HARMONY_SR_5KHZ, HARMONY_SR_6KHZ, HARMONY_SR_8KHZ, + HARMONY_SR_9KHZ, HARMONY_SR_11KHZ, HARMONY_SR_16KHZ, + HARMONY_SR_18KHZ, HARMONY_SR_22KHZ, HARMONY_SR_27KHZ, + HARMONY_SR_32KHZ, HARMONY_SR_33KHZ, HARMONY_SR_37KHZ, + HARMONY_SR_44KHZ, HARMONY_SR_48KHZ +}; + /* snd_card_harmony_rate_bits * @rate: index of current data rate in list * returns: harmony hex code for registers @@ -273,26 +284,9 @@ unsigned int idx; for (idx = 0; idx <= RATES; idx++) - if (snd_card_harmony_rates[idx] == rate) break; - - switch (idx) { - case 0: return HARMONY_SR_5KHZ; - case 1: return HARMONY_SR_6KHZ; - case 2: return HARMONY_SR_8KHZ; - case 3: return HARMONY_SR_9KHZ; - case 4: return HARMONY_SR_11KHZ; - case 5: return HARMONY_SR_16KHZ; - case 6: return HARMONY_SR_18KHZ; - case 7: return HARMONY_SR_22KHZ; - case 8: return HARMONY_SR_27KHZ; - case 9: return HARMONY_SR_32KHZ; - case 10: return HARMONY_SR_33KHZ; - case 11: return HARMONY_SR_37KHZ; - case 12: return HARMONY_SR_44KHZ; - case 13: return HARMONY_SR_48KHZ; - default: /* fallback */ - return HARMONY_SR_44KHZ; - } + if (snd_card_harmony_rates[idx] == rate) + return rate_bits[idx]; + return HARMONY_SR_44KHZ; /* fallback */ } /* @@ -317,27 +311,6 @@ } /* - * silence a buffer - * XXX: alsa could probably do this by itself - * XXX: memset hpmc, commented. - */ - -void snd_harmony_silence(snd_card_harmony_t *harmony, - void *addr, int length) -{ - u8 silence_char; - - switch(harmony->data_format) { - case HARMONY_DF_8BIT_ULAW: silence_char = 0x55; break; - case HARMONY_DF_8BIT_ALAW: silence_char = 0xff; break; - case HARMONY_DF_16BIT_LINEAR: - default: - silence_char = 0; - } - //memset(addr, silence_char, length); -} - -/* * interruption controls routines */ @@ -385,9 +358,9 @@ snd_pcm_period_elapsed(harmony->playback_substream); harmony->ply_total++; } else { - gsc_writel(harmony->silence_dma + - (HARMONY_BUF_SIZE*harmony->silence_count), - hpa+REG_PNXTADD); + gsc_writel(harmony->silence_dma.addr + + (HARMONY_BUF_SIZE*harmony->silence_count), + hpa+REG_PNXTADD); harmony->silence_count++; harmony->silence_count %= SILENCE_BUFS; } @@ -406,9 +379,9 @@ harmony->cap_total++; } else { /* graveyard buffer */ - gsc_writel(harmony->graveyard_dma + - (HARMONY_BUF_SIZE*harmony->graveyard_count), - hpa+REG_RNXTADD); + gsc_writel(harmony->graveyard_dma.addr + + (HARMONY_BUF_SIZE*harmony->graveyard_count), + hpa+REG_RNXTADD); harmony->graveyard_count++; harmony->graveyard_count %= GRAVEYARD_BUFS; } @@ -465,26 +438,8 @@ { snd_info_entry_t *entry; - if ((entry = snd_info_create_card_entry(harmony->card, "harmony", harmony->card->proc_root)) != NULL) { - entry->content = SNDRV_INFO_CONTENT_TEXT; - entry->private_data = harmony; - entry->mode = S_IFREG | S_IRUGO | S_IWUSR; - entry->c.text.read_size = 2048; /* should be enough */ - entry->c.text.read = snd_harmony_proc_read; - if (snd_info_register(entry) < 0) { - snd_info_free_entry(entry); - entry = NULL; - } - } - harmony->proc_entry = entry; -} - -static void snd_harmony_proc_done(snd_card_harmony_t *harmony) -{ - if (harmony->proc_entry) { - snd_info_unregister(harmony->proc_entry); - harmony->proc_entry = NULL; - } + if (! snd_card_proc_new(harmony->card, "harmony", &entry)) + snd_info_set_text_ops(entry, harmony, 2048, snd_harmony_proc_read); } /* @@ -563,6 +518,30 @@ return 0; } +/* set data format */ +static int snd_harmony_set_data_format(snd_card_harmony_t *harmony, int pcm_format) +{ + int old_format = harmony->data_format; + int new_format = old_format; + switch (pcm_format) { + case SNDRV_PCM_FORMAT_S16_BE: + new_format = HARMONY_DF_16BIT_LINEAR; + break; + case SNDRV_PCM_FORMAT_A_LAW: + new_format = HARMONY_DF_8BIT_ALAW; + break; + case SNDRV_PCM_FORMAT_MU_LAW: + new_format = HARMONY_DF_8BIT_ULAW; + break; + } + /* re-initialize silence buffer if needed */ + if (old_format != new_format) + snd_pcm_format_set_silence(pcm_format, harmony->silence_dma.area, + (HARMONY_BUF_SIZE * SILENCE_BUFS * 8) / snd_pcm_format_width(pcm_format)); + + return new_format; +} + static int snd_card_harmony_playback_prepare(snd_pcm_substream_t * substream) { snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream); @@ -577,12 +556,13 @@ harmony->sample_rate = snd_card_harmony_rate_bits(runtime->rate); /* data format */ - if (snd_pcm_format_width(runtime->format) == 16) harmony->data_format = HARMONY_DF_16BIT_LINEAR; - else harmony->data_format = HARMONY_DF_8BIT_ULAW; - + harmony->data_format = snd_harmony_set_data_format(haromny, runtime->format); + /* number of channels */ - if (runtime->channels == 2) harmony->stereo_select = HARMONY_SS_STEREO; - else harmony->stereo_select = HARMONY_SS_MONO; + if (runtime->channels == 2) + harmony->stereo_select = HARMONY_SS_STEREO; + else + harmony->stereo_select = HARMONY_SS_MONO; DPRINTK(KERN_INFO PFX "Playback_prepare, sr=%d(%x), df=%x, ss=%x hpa=%lx\n", runtime->rate, harmony->sample_rate, harmony->data_format, harmony->stereo_select, harmony->hpa); @@ -607,12 +587,13 @@ harmony->sample_rate = snd_card_harmony_rate_bits(runtime->rate); /* data format */ - if (snd_pcm_format_width(runtime->format) == 16) harmony->data_format = HARMONY_DF_16BIT_LINEAR; - else harmony->data_format = HARMONY_DF_8BIT_ULAW; + harmony->data_format = snd_harmony_set_data_format(haromny, runtime->format); /* number of channels */ - if (runtime->channels == 1) harmony->stereo_select = HARMONY_SS_MONO; - else if (runtime->channels == 2) harmony->stereo_select = HARMONY_SS_STEREO; + if (runtime->channels == 1) + harmony->stereo_select = HARMONY_SS_MONO; + else if (runtime->channels == 2) + harmony->stereo_select = HARMONY_SS_STEREO; snd_harmony_update_control(harmony); harmony->format_initialized = 1; @@ -709,13 +690,6 @@ snd_pcm_runtime_t *runtime = substream->runtime; int err; - /* - * harmony is not "real" pci, but we need a pci_dev - * to alloc PCI DMA pages - */ - substream->runtime->dma_private = harmony->fake_pci_dev; -// substream->dma_type = SNDRV_PCM_DMA_TYPE_PCI; - harmony->playback_substream = substream; runtime->hw = snd_card_harmony_playback; snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraint_rates); @@ -732,14 +706,6 @@ snd_pcm_runtime_t *runtime = substream->runtime; int err; - - /* - * harmony is not "real" pci, but we need a pci_dev - * to alloc PCI DMA pages - */ - substream->runtime->dma_private = harmony->fake_pci_dev; -// substream->dma_type = SNDRV_PCM_DMA_TYPE_PCI; - harmony->capture_substream = substream; runtime->hw = snd_card_harmony_capture; snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraint_rates); @@ -752,7 +718,6 @@ static int snd_card_harmony_playback_close(snd_pcm_substream_t * substream) { snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream); - snd_pcm_lib_free_pages(substream); harmony->playback_substream = NULL; harmony->ply_size = 0; @@ -769,8 +734,6 @@ { snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream); - snd_pcm_lib_free_pages(substream); - harmony->capture_substream = NULL; harmony->cap_size = 0; harmony->cap_buf = 0; @@ -785,12 +748,11 @@ static int snd_card_harmony_hw_params(snd_pcm_substream_t *substream, snd_pcm_hw_params_t * hw_params) { - snd_pcm_runtime_t *runtime = substream->runtime; int err; err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); DPRINTK(KERN_INFO PFX "HW Params returned %d, dma_addr %lx\n", err, - (unsigned long)runtime->dma_addr); + (unsigned long)substream->runtime->dma_addr); return err; } @@ -847,15 +809,19 @@ harmony->pcm = pcm; /* initialize graveyard buffer */ - harmony->dma_dev.type = SNDRV_DMA_TYPE_PCI; - harmony->dma_dev.dev = snd_dma_pci_data(harmony->fake_pci_dev); - harmony->graveyard_addr = snd_dma_alloc_pages(&chip->dma_dev, - HARMONY_BUF_SIZE*GRAVEYARD_BUFS, &harmony->graveyard_dma); + harmony->dma_dev.type = SNDRV_DMA_TYPE_DEV; + harmony->dma_dev.dev = &harmony->pa_dev->dev; + err = snd_dma_alloc_pages(&harmony->dma_dev, HARMONY_BUF_SIZE*GRAVEYARD_BUFS, + &harmony->graveyard_dma); + if (err < 0) + return err; harmony->graveyard_count = 0; /* initialize silence buffers */ - harmony->silence_addr = snd_dma_alloc_pages(&chip->dma_dev, - HARMONY_BUF_SIZE*SILENCE_BUFS, &harmony->silence_dma); + err = snd_dma_alloc_pages(&harmony->dma_dev, HARMONY_BUF_SIZE*SILENCE_BUFS, + &harmony->silence_dma); + if (err < 0) + return err; harmony->silence_count = 0; harmony->ply_stopped = harmony->cap_stopped = 1; @@ -865,8 +831,8 @@ harmony->graveyard_count = 0; snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, - snd_dma_pci_data(harmony->fake_pci_dev), - 64 * 1024, 128 * 1024); + &harmony->pa_dev->dev, + MAX_BUFFER_SIZE, MAX_BUFFER_SIZE); return 0; } @@ -963,7 +929,7 @@ HARMONY_VOLUME("PCM Playback Volume", 6, 0, 0x3f, 1), }; -static void snd_harmony_reset_codec(snd_card_harmony_t *harmony) +static void __init snd_harmony_reset_codec(snd_card_harmony_t *harmony) { snd_harmony_wait_cntl(harmony); gsc_writel(1, harmony->hpa+REG_RESET); @@ -985,7 +951,7 @@ } -int __init snd_card_harmony_mixer_init(snd_card_harmony_t *harmony) +static int __init snd_card_harmony_mixer_init(snd_card_harmony_t *harmony) { snd_card_t *card = harmony->card; int idx, err; @@ -1009,10 +975,11 @@ harmony->card = card; + harmony->pa_dev = pa_dev; + /* Set the HPA of harmony */ harmony->hpa = pa_dev->hpa; - harmony->irq = pa_dev->irq; if (!harmony->irq) { printk(KERN_ERR PFX "no irq found\n"); @@ -1038,8 +1005,6 @@ return -EBUSY; } - /* a fake pci_dev is needed for pci_* functions under ccio */ - harmony->fake_pci_dev = ccio_get_fake(pa_dev); return 0; } @@ -1050,7 +1015,7 @@ snd_card_t *card; int err; - if (dev >= SNDRV_CARDS) + if (dev >= SNDRV_CARDS) return -ENODEV; if (!enable[dev]) { dev++; @@ -1064,6 +1029,8 @@ if (card == NULL) return -ENOMEM; chip = (struct snd_card_harmony *)card->private_data; + spin_lock_init(&chip->control_lock); + spin_lock_init(&chip->mixer_lock); if ((err = snd_card_harmony_create(card, pa_dev, chip)) < 0) { printk(KERN_ERR PFX "Creation failed\n"); @@ -1144,7 +1111,6 @@ { DPRINTK(KERN_INFO PFX "Freeing card %d\n", idx); harmony = snd_harmony_cards[idx]->private_data; - snd_harmony_proc_done(harmony); free_irq(harmony->irq, snd_card_harmony_interrupt); printk(KERN_INFO PFX "Card unloaded %d, irq=%d\n", idx, harmony->irq); snd_card_free(snd_harmony_cards[idx]); diff -Nru a/sound/pci/Kconfig b/sound/pci/Kconfig --- a/sound/pci/Kconfig 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/Kconfig 2004-05-26 15:01:35 -07:00 @@ -16,11 +16,11 @@ Say 'Y' or 'M' to include support for ALI PCI Audio M5451 sound core. config SND_ATIIXP - tristate "ATI IXP 150/200/250" + tristate "ATI IXP 150/200/250/300" depends on SND select SND_AC97_CODEC help - Say 'Y' or 'M' to include support for ATI IXP 150/200/250 AC97 controller. + Say 'Y' or 'M' to include support for ATI IXP 150/200/250/300 AC97 controller. config SND_AU8810 tristate "Aureal Advantage" @@ -29,6 +29,9 @@ select SND_AC97_CODEC help Say 'Y' or 'M' to include support for Aureal Advantage soundcards. + Supported features: Hardware Mixer, SRC, EQ and SPDIF output. + 3D support code is in place, but not yet useable. For more info, + email the ALSA developer list, or mjander@users.sourceforge.net. config SND_AU8820 tristate "Aureal Vortex" @@ -37,6 +40,8 @@ select SND_AC97_CODEC help Say 'Y' or 'M' to include support for Aureal Vortex soundcards. + Supported features: Hardware Mixer and SRC. For more info, email + the ALSA developer list, or mjander@users.sourceforge.net. config SND_AU8830 tristate "Aureal Vortex 2" @@ -45,6 +50,9 @@ select SND_AC97_CODEC help Say 'Y' or 'M' to include support for Aureal Vortex 2 soundcards. + Supported features: Hardware Mixer, SRC, EQ and SPDIF output. + 3D support code is in place, but not yet useable. For more info, + email the ALSA developer list, or mjander@users.sourceforge.net. config SND_AZT3328 tristate "Aztech AZF3328 / PCI168 (EXPERIMENTAL)" @@ -262,15 +270,15 @@ TerraTec - EWX 24/96, EWS 88MT, EWS 88D, DMX 6Fire. config SND_ICE1724 - tristate "ICE/VT1724 (Envy24HT)" + tristate "ICE/VT1724/1720 (Envy24HT/PT)" depends on SND select SND_MPU401_UART select SND_AC97_CODEC help - Say 'Y' or 'M' to include support for ICE/VT1724 (Envy24HT) based + Say 'Y' or 'M' to include support for ICE/VT1724/1720 (Envy24HT/PT) based soundcards. Currently supported hardware is: MidiMan M Audio - Revolution 7.1, - AMP Ltd AUDIO2000. + AMP Ltd AUDIO2000, Terratec Aureon 5.1 Sky/7.1, AudioTrak Prodigy 7.1. config SND_INTEL8X0 tristate "Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111" diff -Nru a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c --- a/sound/pci/ac97/ac97_codec.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ac97/ac97_codec.c 2004-05-26 15:01:35 -07:00 @@ -27,6 +27,7 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/pci.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/ac97_codec.h> @@ -42,7 +43,7 @@ static int enable_loopback; -MODULE_PARM(enable_loopback, "i"); +module_param(enable_loopback, bool, 0444); MODULE_PARM_DESC(enable_loopback, "Enable AC97 ADC/DAC Loopback Control"); MODULE_PARM_SYNTAX(enable_loopback, SNDRV_BOOLEAN_FALSE_DESC); @@ -299,6 +300,16 @@ return ac97->bus->read(ac97, reg); } +/* read a register - return the cached value if already read */ +static inline unsigned short snd_ac97_read_cache(ac97_t *ac97, unsigned short reg) +{ + if (! test_bit(reg, ac97->reg_accessed)) { + ac97->regs[reg] = ac97->bus->read(ac97, reg); + // set_bit(reg, ac97->reg_accessed); + } + return ac97->regs[reg]; +} + /** * snd_ac97_write_cache - write a value on the given register and update the cache * @ac97: the ac97 instance @@ -370,7 +381,7 @@ if (!snd_ac97_valid_reg(ac97, reg)) return -EINVAL; spin_lock(&ac97->reg_lock); - old = ac97->regs[reg]; + old = snd_ac97_read_cache(ac97, reg); new = (old & ~mask) | value; change = old != new; if (change) { @@ -385,25 +396,26 @@ static int snd_ac97_ad18xx_update_pcm_bits(ac97_t *ac97, int codec, unsigned short mask, unsigned short value) { int change; - unsigned short old, new; + unsigned short old, new, cfg; down(&ac97->spec.ad18xx.mutex); spin_lock(&ac97->reg_lock); old = ac97->spec.ad18xx.pcmreg[codec]; new = (old & ~mask) | value; + cfg = snd_ac97_read_cache(ac97, AC97_AD_SERIAL_CFG); change = old != new; if (change) { ac97->spec.ad18xx.pcmreg[codec] = new; spin_unlock(&ac97->reg_lock); /* select single codec */ ac97->bus->write(ac97, AC97_AD_SERIAL_CFG, - (ac97->regs[AC97_AD_SERIAL_CFG] & ~0x7000) | + (cfg & ~0x7000) | ac97->spec.ad18xx.unchained[codec] | ac97->spec.ad18xx.chained[codec]); /* update PCM bits */ ac97->bus->write(ac97, AC97_PCM, new); /* select all codecs */ ac97->bus->write(ac97, AC97_AD_SERIAL_CFG, - ac97->regs[AC97_AD_SERIAL_CFG] | 0x7000); + cfg | 0x7000); } else spin_unlock(&ac97->reg_lock); up(&ac97->spec.ad18xx.mutex); @@ -435,7 +447,7 @@ ac97_t *ac97 = snd_kcontrol_chip(kcontrol); unsigned short val; - val = ac97->regs[AC97_REC_SEL]; + val = snd_ac97_read_cache(ac97, AC97_REC_SEL); ucontrol->value.enumerated.item[0] = (val >> 8) & 7; ucontrol->value.enumerated.item[1] = (val >> 0) & 7; return 0; @@ -493,7 +505,7 @@ int shift = (kcontrol->private_value >> 8) & 0xff; int invert = (kcontrol->private_value >> 24) & 0xff; - val = (ac97->regs[reg] >> shift) & 1; + val = (snd_ac97_read_cache(ac97, reg) >> shift) & 1; if (invert) val ^= 1; ucontrol->value.enumerated.item[0] = val; @@ -535,7 +547,7 @@ int mask = (kcontrol->private_value >> 16) & 0xff; int invert = (kcontrol->private_value >> 24) & 0xff; - ucontrol->value.integer.value[0] = (ac97->regs[reg] >> shift) & mask; + ucontrol->value.integer.value[0] = (snd_ac97_read_cache(ac97, reg) >> shift) & mask; if (invert) ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0]; return 0; @@ -582,8 +594,8 @@ int invert = (kcontrol->private_value >> 24) & 0xff; spin_lock(&ac97->reg_lock); - ucontrol->value.integer.value[0] = (ac97->regs[reg] >> shift_left) & mask; - ucontrol->value.integer.value[1] = (ac97->regs[reg] >> shift_right) & mask; + ucontrol->value.integer.value[0] = (snd_ac97_read_cache(ac97, reg) >> shift_left) & mask; + ucontrol->value.integer.value[1] = (snd_ac97_read_cache(ac97, reg) >> shift_right) & mask; spin_unlock(&ac97->reg_lock); if (invert) { ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0]; @@ -796,7 +808,7 @@ AC97_CXR_SPDIF_MASK | AC97_CXR_COPYRGT, v); } else { - unsigned short extst = ac97->regs[AC97_EXTENDED_STATUS]; + unsigned short extst = snd_ac97_read_cache(ac97, AC97_EXTENDED_STATUS); snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0); /* turn off */ change |= snd_ac97_update_bits(ac97, AC97_SPDIF, 0x3fff, val); @@ -822,13 +834,13 @@ mask <<= shift; value <<= shift; spin_lock(&ac97->reg_lock); - old = ac97->regs[reg]; + old = snd_ac97_read_cache(ac97, reg); new = (old & ~mask) | value; spin_unlock(&ac97->reg_lock); if (old != new) { int change; - unsigned short extst = ac97->regs[AC97_EXTENDED_STATUS]; + unsigned short extst = snd_ac97_read_cache(ac97, AC97_EXTENDED_STATUS); snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0); /* turn off */ change = snd_ac97_update_bits(ac97, reg, mask, value); if (extst & AC97_EA_SPDIF) @@ -868,14 +880,14 @@ .info = snd_ac97_info_single, .get = snd_ac97_get_single, .put = snd_ac97_put_spsa, - .private_value = AC97_EXTENDED_STATUS | (4 << 8) | (3 << 16) | (0 << 24), + .private_value = AC97_SINGLE_VALUE(AC97_EXTENDED_STATUS, 4, 3, 0) }, }; #define AD18XX_PCM_BITS(xname, codec, lshift, rshift, mask) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .info = snd_ac97_ad18xx_pcm_info_bits, \ .get = snd_ac97_ad18xx_pcm_get_bits, .put = snd_ac97_ad18xx_pcm_put_bits, \ - .private_value = (codec) | ((lshift) << 8) | ((rshift) << 12) | ((mask) << 24) } + .private_value = (codec) | ((lshift) << 8) | ((rshift) << 12) | ((mask) << 16) } static int snd_ac97_ad18xx_pcm_info_bits(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) { @@ -987,6 +999,8 @@ * */ +static void snd_ac97_powerdown(ac97_t *ac97); + static int snd_ac97_bus_free(ac97_bus_t *bus) { if (bus) { @@ -1022,6 +1036,7 @@ static int snd_ac97_dev_free(snd_device_t *device) { ac97_t *ac97 = snd_magic_cast(ac97_t, device->device_data, return -ENXIO); + snd_ac97_powerdown(ac97); /* for avoiding click noises during shut down */ return snd_ac97_free(ac97); } @@ -1572,6 +1587,26 @@ *r_result = result; } +/* check AC97_SPDIF register to accept which sample rates */ +static unsigned int snd_ac97_determine_spdif_rates(ac97_t *ac97) +{ + unsigned int result = 0; + int i; + static unsigned short ctl_bits[] = { + AC97_SC_SPSR_44K, AC97_SC_SPSR_32K, AC97_SC_SPSR_48K + }; + static unsigned int rate_bits[] = { + SNDRV_PCM_RATE_44100, SNDRV_PCM_RATE_32000, SNDRV_PCM_RATE_48000 + }; + + for (i = 0; i < (int)ARRAY_SIZE(ctl_bits); i++) { + snd_ac97_update_bits(ac97, AC97_SPDIF, AC97_SC_SPSR_MASK, ctl_bits[i]); + if ((snd_ac97_read(ac97, AC97_SPDIF) & AC97_SC_SPSR_MASK) == ctl_bits[i]) + result |= rate_bits[i]; + } + return result; +} + void snd_ac97_get_name(ac97_t *ac97, unsigned int id, char *name, int modem) { const ac97_codec_id_t *pid; @@ -1889,9 +1924,7 @@ else if (ac97->id == AC97_ID_CM9739) ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; else - ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000 | - SNDRV_PCM_RATE_44100 | - SNDRV_PCM_RATE_32000; + ac97->rates[AC97_RATES_SPDIF] = snd_ac97_determine_spdif_rates(ac97); } if (ac97->ext_id & AC97_EI_VRM) { /* MIC VRA support */ snd_ac97_determine_rates(ac97, AC97_PCM_MIC_ADC_RATE, 0, &ac97->rates[AC97_RATES_MIC_ADC]); @@ -1949,12 +1982,12 @@ } /* make sure the proper powerdown bits are cleared */ if (ac97->scaps) { - reg = snd_ac97_read(ac97, AC97_EXTENDED_ID); + reg = snd_ac97_read(ac97, AC97_EXTENDED_STATUS); if (ac97->scaps & AC97_SCAP_SURROUND_DAC) reg &= ~AC97_EA_PRJ; if (ac97->scaps & AC97_SCAP_CENTER_LFE_DAC) reg &= ~(AC97_EA_PRI | AC97_EA_PRK); - snd_ac97_write_cache(ac97, AC97_EXTENDED_ID, reg); + snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, reg); } snd_ac97_proc_init(ac97); if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, ac97, &ops)) < 0) { @@ -1965,17 +1998,24 @@ return 0; } -#ifdef CONFIG_PM -/** - * snd_ac97_suspend - General suspend function for AC97 codec - * @ac97: the ac97 instance + +/* + * Power down the chip. * - * Suspends the codec, power down the chip. + * MASTER and HEADPHONE registers are muted but the register cache values + * are not changed, so that the values can be restored in snd_ac97_resume(). */ -void snd_ac97_suspend(ac97_t *ac97) +static void snd_ac97_powerdown(ac97_t *ac97) { - unsigned short power = (ac97->regs[AC97_POWERDOWN] ^ 0x8000) & ~0x8000; /* invert EAPD */ + unsigned short power; + + if (ac97_is_audio(ac97)) { + /* some codecs have stereo mute bits */ + snd_ac97_write(ac97, AC97_MASTER, 0x9f9f); + snd_ac97_write(ac97, AC97_HEADPHONE, 0x9f9f); + } + power = ac97->regs[AC97_POWERDOWN] | 0x8000; /* EAPD */ power |= 0x4000; /* Headphone amplifier powerdown */ power |= 0x0300; /* ADC & DAC powerdown */ snd_ac97_write(ac97, AC97_POWERDOWN, power); @@ -1983,8 +2023,24 @@ power |= 0x0400; /* Analog Mixer powerdown (Vref on) */ snd_ac97_write(ac97, AC97_POWERDOWN, power); udelay(100); +#if 0 + /* FIXME: this causes click noises on some boards at resume */ power |= 0x3800; /* AC-link powerdown, internal Clk disable */ snd_ac97_write(ac97, AC97_POWERDOWN, power); +#endif +} + + +#ifdef CONFIG_PM +/** + * snd_ac97_suspend - General suspend function for AC97 codec + * @ac97: the ac97 instance + * + * Suspends the codec, power down the chip. + */ +void snd_ac97_suspend(ac97_t *ac97) +{ + snd_ac97_powerdown(ac97); } /** @@ -2267,6 +2323,7 @@ EXPORT_SYMBOL(snd_ac97_set_rate); #ifdef CONFIG_PM EXPORT_SYMBOL(snd_ac97_resume); +EXPORT_SYMBOL(snd_ac97_suspend); #endif /* diff -Nru a/sound/pci/ac97/ac97_local.h b/sound/pci/ac97/ac97_local.h --- a/sound/pci/ac97/ac97_local.h 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ac97/ac97_local.h 2004-05-26 15:01:35 -07:00 @@ -22,10 +22,11 @@ * */ +#define AC97_SINGLE_VALUE(reg,shift,mask,invert) ((reg) | ((shift) << 8) | ((mask) << 16) | ((invert) << 24)) #define AC97_SINGLE(xname, reg, shift, mask, invert) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .info = snd_ac97_info_single, \ .get = snd_ac97_get_single, .put = snd_ac97_put_single, \ - .private_value = (reg) | ((shift) << 8) | ((mask) << 16) | ((invert) << 24) } + .private_value = AC97_SINGLE_VALUE(reg, shift, mask, invert) } /* ac97_codec.c */ extern const char *snd_ac97_stereo_enhancements[]; diff -Nru a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c --- a/sound/pci/ac97/ac97_patch.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ac97/ac97_patch.c 2004-05-26 15:01:36 -07:00 @@ -447,18 +447,198 @@ return 0; } +static int snd_ac97_stac9758_output_jack_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) +{ + static char *texts[5] = { "Input/Disabled", "Front Output", + "Rear Output", "Center/LFE Output", "Mixer Output" }; + + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 5; + if (uinfo->value.enumerated.item > 4) + uinfo->value.enumerated.item = 4; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_ac97_stac9758_output_jack_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t* ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + int shift = kcontrol->private_value; + unsigned short val; + + val = ac97->regs[AC97_SIGMATEL_OUTSEL]; + if (!((val >> shift) & 4)) + ucontrol->value.enumerated.item[0] = 0; + else + ucontrol->value.enumerated.item[0] = 1 + ((val >> shift) & 3); + return 0; +} + +static int snd_ac97_stac9758_output_jack_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + int shift = kcontrol->private_value; + unsigned short val; + + if (ucontrol->value.enumerated.item[0] > 4) + return -EINVAL; + if (ucontrol->value.enumerated.item[0] == 0) + val = 0; + else + val = 4 | (ucontrol->value.enumerated.item[0] - 1); + return snd_ac97_update_bits(ac97, AC97_SIGMATEL_OUTSEL, + 7 << shift, val << shift); +} + +static int snd_ac97_stac9758_input_jack_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) +{ + static char *texts[7] = { "Mic2 Jack", "Mic1 Jack", "Line In Jack", + "Front Jack", "Rear Jack", "Center/LFE Jack", "Mute" }; + + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 7; + if (uinfo->value.enumerated.item > 6) + uinfo->value.enumerated.item = 6; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_ac97_stac9758_input_jack_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t* ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + int shift = kcontrol->private_value; + unsigned short val; + + val = ac97->regs[AC97_SIGMATEL_INSEL]; + ucontrol->value.enumerated.item[0] = (val >> shift) & 7; + return 0; +} + +static int snd_ac97_stac9758_input_jack_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + int shift = kcontrol->private_value; + + return snd_ac97_update_bits(ac97, AC97_SIGMATEL_INSEL, 7 << shift, + ucontrol->value.enumerated.item[0] << shift); +} + +static int snd_ac97_stac9758_phonesel_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) +{ + static char *texts[3] = { "None", "Front Jack", "Rear Jack" }; + + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 3; + if (uinfo->value.enumerated.item > 2) + uinfo->value.enumerated.item = 2; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_ac97_stac9758_phonesel_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t* ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + + ucontrol->value.enumerated.item[0] = ac97->regs[AC97_SIGMATEL_IOMISC] & 3; + return 0; +} + +static int snd_ac97_stac9758_phonesel_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + + return snd_ac97_update_bits(ac97, AC97_SIGMATEL_IOMISC, 3, + ucontrol->value.enumerated.item[0]); +} + +#define STAC9758_OUTPUT_JACK(xname, shift) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ + .info = snd_ac97_stac9758_output_jack_info, \ + .get = snd_ac97_stac9758_output_jack_get, \ + .put = snd_ac97_stac9758_output_jack_put, \ + .private_value = shift } +#define STAC9758_INPUT_JACK(xname, shift) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ + .info = snd_ac97_stac9758_input_jack_info, \ + .get = snd_ac97_stac9758_input_jack_get, \ + .put = snd_ac97_stac9758_input_jack_put, \ + .private_value = shift } +static const snd_kcontrol_new_t snd_ac97_sigmatel_stac9758_controls[] = { + STAC9758_OUTPUT_JACK("Mic1 Jack", 1), + STAC9758_OUTPUT_JACK("LineIn Jack", 4), + STAC9758_OUTPUT_JACK("Front Jack", 7), + STAC9758_OUTPUT_JACK("Rear Jack", 10), + STAC9758_OUTPUT_JACK("Center/LFE Jack", 13), + STAC9758_INPUT_JACK("Mic Input Source", 0), + STAC9758_INPUT_JACK("Line Input Source", 8), + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Headphone Amp", + .info = snd_ac97_stac9758_phonesel_info, + .get = snd_ac97_stac9758_phonesel_get, + .put = snd_ac97_stac9758_phonesel_put + }, + AC97_SINGLE("Exchange Center/LFE", AC97_SIGMATEL_IOMISC, 4, 1, 0), + AC97_SINGLE("Headphone +3dB Boost", AC97_SIGMATEL_IOMISC, 8, 1, 0) +}; + +static int patch_sigmatel_stac9758_specific(ac97_t *ac97) +{ + int err; + + err = patch_sigmatel_stac97xx_specific(ac97); + if (err < 0) + return err; + err = patch_build_controls(ac97, snd_ac97_sigmatel_stac9758_controls, + ARRAY_SIZE(snd_ac97_sigmatel_stac9758_controls)); + if (err < 0) + return err; + return 0; +} + +static struct snd_ac97_build_ops patch_sigmatel_stac9758_ops = { + .build_3d = patch_sigmatel_stac9700_3d, + .build_specific = patch_sigmatel_stac9758_specific +}; + int patch_sigmatel_stac9758(ac97_t * ac97) { + static unsigned short regs[4] = { + AC97_SIGMATEL_OUTSEL, + AC97_SIGMATEL_IOMISC, + AC97_SIGMATEL_INSEL, + AC97_SIGMATEL_VARIOUS + }; + static unsigned short def_regs[4] = { + /* OUTSEL */ 0xd794, + /* IOMISC */ 0x2001, + /* INSEL */ 0x0201, + /* VARIOUS */ 0x0040 + }; + static unsigned short m675_regs[4] = { + /* OUTSEL */ 0x9040, + /* IOMISC */ 0x2102, + /* INSEL */ 0x0203, + /* VARIOUS */ 0x0041 + }; + unsigned short *pregs = def_regs; + int i; + + /* Gateway M675 notebook */ + if (ac97->pci && + ac97->subsystem_vendor == 0x107b && + ac97->subsystem_device == 0x0601) + pregs = m675_regs; + // patch for SigmaTel - ac97->build_ops = &patch_sigmatel_stac9700_ops; - // turn on stereo speaker, headphone and line-out - snd_ac97_write_cache(ac97, AC97_SIGMATEL_OUTSEL, 0x9040); - // headphone select and boost - snd_ac97_write_cache(ac97, AC97_SIGMATEL_IOMISC, 0x2102); - // enable mic - snd_ac97_write_cache(ac97, AC97_SIGMATEL_INSEL, 0x0203); - // enable stereo mic - snd_ac97_write_cache(ac97, AC97_SIGMATEL_VARIOUS, 0x0001); + ac97->build_ops = &patch_sigmatel_stac9758_ops; + for (i = 0; i < 4; i++) + snd_ac97_write_cache(ac97, regs[i], pregs[i]); + + ac97->flags |= AC97_STEREO_MUTES; return 0; } @@ -1027,6 +1207,8 @@ AC97_AD198X_MSPLT | AC97_AD198X_AC97NC); ac97->flags |= AC97_STEREO_MUTES; + /* on AD1985 rev. 3, AC'97 revision bits are zero */ + ac97->ext_id = (ac97->ext_id & ~AC97_EI_REV_MASK) | AC97_EI_REV_23; return 0; } @@ -1088,6 +1270,7 @@ .info = snd_ac97_info_single, .get = snd_ac97_alc650_mic_get, .put = snd_ac97_alc650_mic_put, + .private_value = AC97_SINGLE_VALUE(0, 0, 1, 0) /* only mask needed */ }, }; @@ -1188,6 +1371,7 @@ .info = snd_ac97_info_single, .get = snd_ac97_alc655_mic_get, .put = snd_ac97_alc655_mic_put, + .private_value = AC97_SINGLE_VALUE(0, 0, 1, 0) /* only mask needed */ }, }; @@ -1358,8 +1542,34 @@ /* BIT 8: SPD32 - 32bit SPDIF - not supported yet */ }; +static int snd_ac97_cm9739_center_mic_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + if (ac97->regs[AC97_CM9739_MULTI_CHAN] & 0x1000) + ucontrol->value.integer.value[0] = 1; + else + ucontrol->value.integer.value[0] = 0; + return 0; +} + +static int snd_ac97_cm9739_center_mic_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + return snd_ac97_update_bits(ac97, AC97_CM9739_MULTI_CHAN, 0x3000, + ucontrol->value.integer.value[0] ? + 0x1000 : 0x2000); +} + static const snd_kcontrol_new_t snd_ac97_cm9739_controls[] = { AC97_SINGLE("Line-In As Surround", AC97_CM9739_MULTI_CHAN, 10, 1, 0), + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Mic As Center/LFE", + .info = snd_ac97_info_single, + .get = snd_ac97_cm9739_center_mic_get, + .put = snd_ac97_cm9739_center_mic_put, + .private_value = AC97_SINGLE_VALUE(0, 0, 1, 0) /* only mask needed */ + }, }; static int patch_cm9739_specific(ac97_t * ac97) @@ -1394,10 +1604,13 @@ } /* set-up multi channel */ - /* bit 13: enable internal vref output for mic */ - /* bit 12: enable center/lfe */ /* bit 14: 0 = SPDIF, 1 = EAPD */ - val = (1 << 12) | (1 << 13); + /* bit 13: enable internal vref output for mic */ + /* bit 12: disable center/lfe (swithable) */ + /* bit 10: disable surround/line (switchable) */ + /* bit 9: mix 2 surround off */ + /* bit 0: dB */ + val = (1 << 13); if (! (ac97->ext_id & AC97_EI_SPDIF)) val |= (1 << 14); snd_ac97_write_cache(ac97, AC97_CM9739_MULTI_CHAN, val); diff -Nru a/sound/pci/ac97/ac97_pcm.c b/sound/pci/ac97/ac97_pcm.c --- a/sound/pci/ac97/ac97_pcm.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ac97/ac97_pcm.c 2004-05-26 15:01:35 -07:00 @@ -210,7 +210,7 @@ } spin_lock(&ac97->reg_lock); - old = ac97->regs[reg] & mask; + old = snd_ac97_read(ac97, reg) & mask; spin_unlock(&ac97->reg_lock); if (old != bits) { snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0); diff -Nru a/sound/pci/ac97/ac97_proc.c b/sound/pci/ac97/ac97_proc.c --- a/sound/pci/ac97/ac97_proc.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ac97/ac97_proc.c 2004-05-26 15:01:36 -07:00 @@ -34,6 +34,40 @@ * proc interface */ +static void snd_ac97_proc_read_functions(ac97_t *ac97, snd_info_buffer_t *buffer) +{ + int header = 0, function; + unsigned short info, sense_info; + static const char *function_names[12] = { + "Master Out", "AUX Out", "Center/LFE Out", "SPDIF Out", + "Phone In", "Mic 1", "Mic 2", "Line In", "CD In", "Video In", + "Aux In", "Mono Out" + }; + static const char *locations[8] = { + "Rear I/O Panel", "Front Panel", "Motherboard", "Dock/External", + "reserved", "reserved", "reserved", "NC/unused" + }; + + for (function = 0; function < 12; ++function) { + snd_ac97_write(ac97, AC97_FUNC_SELECT, function << 1); + info = snd_ac97_read(ac97, AC97_FUNC_INFO); + if (!(info & 0x0001)) + continue; + if (!header) { + snd_iprintf(buffer, "\n Gain Inverted Buffer delay Location\n"); + header = 1; + } + sense_info = snd_ac97_read(ac97, AC97_SENSE_INFO); + snd_iprintf(buffer, "%-17s: %3d.%d dBV %c %2d/fs %s\n", + function_names[function], + (info & 0x8000 ? -1 : 1) * ((info & 0x7000) >> 12) * 3 / 2, + ((info & 0x0800) >> 11) * 5, + info & 0x0400 ? 'X' : '-', + (info & 0x03e0) >> 5, + locations[sense_info >> 13]); + } +} + static void snd_ac97_proc_read_main(ac97_t *ac97, snd_info_buffer_t * buffer, int subidx) { char name[64]; @@ -47,6 +81,21 @@ if ((ac97->scaps & AC97_SCAP_AUDIO) == 0) goto __modem; + if ((ac97->ext_id & AC97_EI_REV_MASK) >= AC97_EI_REV_23) { + val = snd_ac97_read(ac97, AC97_INT_PAGING); + snd_ac97_update_bits(ac97, AC97_INT_PAGING, + AC97_PAGE_MASK, AC97_PAGE_1); + tmp = snd_ac97_read(ac97, AC97_CODEC_CLASS_REV); + snd_iprintf(buffer, "Revision : 0x%02x\n", tmp & 0xff); + snd_iprintf(buffer, "Compat. Class : 0x%02x\n", (tmp >> 8) & 0x1f); + snd_iprintf(buffer, "Subsys. Vendor ID: 0x%04x\n", + snd_ac97_read(ac97, AC97_PCI_SVID)); + snd_iprintf(buffer, "Subsys. ID : 0x%04x\n\n", + snd_ac97_read(ac97, AC97_PCI_SID)); + snd_ac97_update_bits(ac97, AC97_INT_PAGING, + AC97_PAGE_MASK, val & AC97_PAGE_MASK); + } + // val = snd_ac97_read(ac97, AC97_RESET); val = ac97->caps; snd_iprintf(buffer, "Capabilities :%s%s%s%s%s%s\n", @@ -185,6 +234,14 @@ } } } + if ((ac97->ext_id & AC97_EI_REV_MASK) >= AC97_EI_REV_23) { + val = snd_ac97_read(ac97, AC97_INT_PAGING); + snd_ac97_update_bits(ac97, AC97_INT_PAGING, + AC97_PAGE_MASK, AC97_PAGE_1); + snd_ac97_proc_read_functions(ac97, buffer); + snd_ac97_update_bits(ac97, AC97_INT_PAGING, + AC97_PAGE_MASK, val & AC97_PAGE_MASK); + } __modem: @@ -264,6 +321,23 @@ } } +#ifdef CONFIG_SND_DEBUG +/* direct register write for debugging */ +static void snd_ac97_proc_regs_write(snd_info_entry_t *entry, snd_info_buffer_t *buffer) +{ + ac97_t *ac97 = snd_magic_cast(ac97_t, entry->private_data, return); + char line[64]; + unsigned int reg, val; + while (!snd_info_get_line(buffer, line, sizeof(line))) { + if (sscanf(line, "%x %x", ®, &val) != 2) + continue; + /* register must be odd */ + if (reg < 0x80 && (reg & 1) == 0 && val <= 0xffff) + snd_ac97_write_cache(ac97, reg, val); + } +} +#endif + static void snd_ac97_proc_regs_read_main(ac97_t *ac97, snd_info_buffer_t * buffer, int subidx) { int reg, val; @@ -319,6 +393,11 @@ sprintf(name, "%s#%d-%d+regs", prefix, ac97->addr, ac97->num); if ((entry = snd_info_create_card_entry(ac97->bus->card, name, ac97->bus->proc)) != NULL) { snd_info_set_text_ops(entry, ac97, 1024, snd_ac97_proc_regs_read); +#ifdef CONFIG_SND_DEBUG + entry->mode |= S_IWUSR; + entry->c.text.write_size = 1024; + entry->c.text.write = snd_ac97_proc_regs_write; +#endif if (snd_info_register(entry) < 0) { snd_info_free_entry(entry); entry = NULL; diff -Nru a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c --- a/sound/pci/ali5451/ali5451.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ali5451/ali5451.c 2004-05-26 15:01:36 -07:00 @@ -25,8 +25,6 @@ * */ -#define __SNDRV_OSS_COMPAT__ - #include <sound/driver.h> #include <asm/io.h> #include <linux/delay.h> @@ -34,12 +32,12 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/info.h> #include <sound/ac97_codec.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Matt Wu <Matt_Wu@acersoftech.com.cn>"); @@ -53,20 +51,21 @@ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; static int pcm_channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 32}; static int spdif[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ALI M5451 PCI Audio."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ALI M5451 PCI Audio."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ALI 5451 PCI Audio."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(pcm_channels, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(pcm_channels, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_channels, "PCM Channels"); MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",default:32,allows:{{1,32}}"); -MODULE_PARM(spdif, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(spdif, bool, boot_devs, 0444); MODULE_PARM_DESC(spdif, "Support SPDIF I/O"); MODULE_PARM_SYNTAX(spdif, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); @@ -1906,14 +1905,18 @@ } #ifdef CONFIG_PM -static void ali_suspend(ali_t *chip) +static int ali_suspend(snd_card_t *card, unsigned int state) { + ali_t *chip = snd_magic_cast(ali_t, card->pm_private_data, return -EINVAL); ali_image_t *im; int i, j; im = chip->image; if (! im) - return; + return 0; + + snd_pcm_suspend_all(chip->pcm); + snd_ac97_suspend(chip->ac97); spin_lock_irq(&chip->reg_lock); @@ -1940,16 +1943,18 @@ outl(0xffffffff, ALI_REG(chip, ALI_STOP)); spin_unlock_irq(&chip->reg_lock); + return 0; } -static void ali_resume(ali_t *chip) +static int ali_resume(snd_card_t *card, unsigned int state) { + ali_t *chip = snd_magic_cast(ali_t, card->pm_private_data, return -EINVAL); ali_image_t *im; int i, j; im = chip->image; if (! im) - return; + return 0; pci_enable_device(chip->pci); @@ -1967,27 +1972,15 @@ outl(im->regs[i], ALI_REG(chip, i*4)); } - snd_ac97_resume(chip->ac97); - // start HW channel outl(im->regs[ALI_START >> 2], ALI_REG(chip, ALI_START)); // restore IRQ enable bits outl(im->regs[ALI_MISCINT >> 2], ALI_REG(chip, ALI_MISCINT)); spin_unlock_irq(&chip->reg_lock); - return; -} -static int snd_ali_suspend(struct pci_dev *dev, u32 state) -{ - ali_t *chip = snd_magic_cast(ali_t, pci_get_drvdata(dev), return -ENXIO); - ali_suspend(chip); - return 0; -} -static int snd_ali_resume(struct pci_dev *dev) -{ - ali_t *chip = snd_magic_cast(ali_t, pci_get_drvdata(dev), return -ENXIO); - ali_resume(chip); + snd_ac97_resume(chip->ac97); + return 0; } #endif /* CONFIG_PM */ @@ -2203,7 +2196,9 @@ #ifdef CONFIG_PM codec->image = kmalloc(sizeof(*codec->image), GFP_KERNEL); if (! codec->image) - snd_printk("can't allocate apm buffer\n"); + snd_printk(KERN_WARNING "can't allocate apm buffer\n"); + else + snd_card_set_pm_callback(card, ali_suspend, ali_resume, codec); #endif snd_ali_enable_address_interrupt(codec); @@ -2263,16 +2258,14 @@ snd_card_free(card); return err; } - pci_set_drvdata(pci, codec); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_ali_remove(struct pci_dev *pci) { - ali_t *chip = snd_magic_cast(ali_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -2281,23 +2274,12 @@ .id_table = snd_ali_ids, .probe = snd_ali_probe, .remove = __devexit_p(snd_ali_remove), -#ifdef CONFIG_PM - .suspend = snd_ali_suspend, - .resume = snd_ali_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_ali_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "ALi pci audio not found or device busy.\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_ali_exit(void) @@ -2307,25 +2289,3 @@ module_init(alsa_card_ali_init) module_exit(alsa_card_ali_exit) - -#ifndef MODULE - -/* format is: snd-ali5451=enable,index,id,pcm_channels */ - -static int __init alsa_card_ali_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pcm_channels[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-ali5451=", alsa_card_ali_setup); - -#endif /* ifndef */ diff -Nru a/sound/pci/als4000.c b/sound/pci/als4000.c --- a/sound/pci/als4000.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/als4000.c 2004-05-26 15:01:36 -07:00 @@ -64,13 +64,13 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/rawmidi.h> #include <sound/mpu401.h> #include <sound/opl3.h> #include <sound/sb.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Bart Hartgers <bart@etpmod.phys.tue.nl>"); @@ -89,18 +89,19 @@ #ifdef SUPPORT_JOYSTICK static int joystick_port[SNDRV_CARDS]; #endif +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ALS4000 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ALS4000 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ALS4000 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_INDEX_DESC); #ifdef SUPPORT_JOYSTICK -MODULE_PARM(joystick_port, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick_port, int, boot_devs, 0444); MODULE_PARM_DESC(joystick_port, "Joystick port address for ALS4000 soundcard. (0 = disabled)"); MODULE_PARM_SYNTAX(joystick_port, SNDRV_ENABLED); #endif @@ -755,15 +756,7 @@ static int __init alsa_card_als4000_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "no ALS4000 based soundcards found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_als4000_exit(void) @@ -773,28 +766,3 @@ module_init(alsa_card_als4000_init) module_exit(alsa_card_als4000_exit) - -#ifndef MODULE - -/* format is: snd-als4000=enable,index,id,joystick_port */ - -static int __init alsa_card_als4000_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 -#ifdef SUPPORT_JOYSTICK - && get_option(&str,&joystick_port[nr_dev]) == 2 -#endif - ); - nr_dev++; - return 1; -} - -__setup("snd-als4000=", alsa_card_als4000_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/atiixp.c b/sound/pci/atiixp.c --- a/sound/pci/atiixp.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/atiixp.c 2004-05-26 15:01:36 -07:00 @@ -26,39 +26,40 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/info.h> #include <sound/ac97_codec.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>"); MODULE_DESCRIPTION("ATI IXP AC97 controller"); MODULE_LICENSE("GPL"); MODULE_CLASSES("{sound}"); -MODULE_DEVICES("{{ATI,IXP150/200/250}}"); +MODULE_DEVICES("{{ATI,IXP150/200/250/300}}"); static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ static int ac97_clock[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 48000}; static int spdif_aclink[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ATI IXP controller."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ATI IXP controller."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable audio part of ATI IXP controller."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(ac97_clock, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ac97_clock, int, boot_devs, 0444); MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (default 48000Hz)."); MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:48000"); -MODULE_PARM(spdif_aclink, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(spdif_aclink, bool, boot_devs, 0444); MODULE_PARM_DESC(spdif_aclink, "S/PDIF over AC-link."); MODULE_PARM_SYNTAX(spdif_aclink, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); @@ -223,7 +224,12 @@ /* * stream enum */ -enum { ATI_DMA_PLAYBACK, ATI_DMA_CAPTURE, ATI_DMA_SPDIF }; +enum { ATI_DMA_PLAYBACK, ATI_DMA_CAPTURE, ATI_DMA_SPDIF, NUM_ATI_DMAS }; /* DMAs */ +enum { ATI_PCM_OUT, ATI_PCM_IN, ATI_PCM_SPDIF, NUM_ATI_PCMS }; /* AC97 pcm slots */ +enum { ATI_PCMDEV_ANALOG, ATI_PCMDEV_DIGITAL, NUM_ATI_PCMDEVS }; /* pcm devices */ + +#define NUM_ATI_CODECS 3 + /* * constants and callbacks for each DMA type @@ -231,6 +237,7 @@ struct snd_atiixp_dma_ops { int type; /* ATI_DMA_XXX */ unsigned int llp_offset; /* LINKPTR offset */ + unsigned int dt_cur; /* DT_CUR offset */ void (*enable_dma)(atiixp_t *chip, int on); /* called from open callback */ void (*enable_transfer)(atiixp_t *chip, int on); /* called from trigger (START/STOP) */ void (*flush_dma)(atiixp_t *chip); /* called from trigger (STOP only) */ @@ -246,9 +253,10 @@ snd_pcm_substream_t *substream; /* assigned PCM substream */ unsigned int buf_addr, buf_bytes; /* DMA buffer address, bytes */ unsigned int period_bytes, periods; + int opened; int running; - struct ac97_pcm *pcm; int pcm_open_flag; + int ac97_pcm_type; /* index # of ac97_pcm to access, -1 = not used */ }; /* @@ -264,25 +272,34 @@ int irq; ac97_bus_t *ac97_bus; - ac97_t *ac97[3]; /* IXP can have up to 3 codecs */ + ac97_t *ac97[NUM_ATI_CODECS]; spinlock_t reg_lock; spinlock_t ac97_lock; - atiixp_dma_t dmas[3]; /* playback, capture, spdif */ + atiixp_dma_t dmas[NUM_ATI_DMAS]; + struct ac97_pcm *pcms[NUM_ATI_PCMS]; + snd_pcm_t *pcmdevs[NUM_ATI_PCMDEVS]; int max_channels; /* max. channels for PCM out */ unsigned int codec_not_ready_bits; /* for codec detection */ int spdif_over_aclink; /* passed from the module option */ + struct semaphore open_mutex; /* playback open mutex */ + +#ifdef CONFIG_PM + u32 pci_state[16]; +#endif }; /* */ static struct pci_device_id snd_atiixp_ids[] = { - { 0x1002, 0x4341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, + { 0x1002, 0x4341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */ + { 0x1002, 0x4361, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB300 */ + { 0, } }; MODULE_DEVICE_TABLE(pci, snd_atiixp_ids); @@ -393,7 +410,7 @@ addr += period_bytes; } - writel(cpu_to_le32((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN), + writel((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN, chip->remap_addr + dma->ops->llp_offset); dma->period_bytes = period_bytes; @@ -452,7 +469,9 @@ return data >> ATI_REG_PHYS_IN_DATA_SHIFT; udelay(1); } while (--timeout); - snd_printk(KERN_WARNING "atiixp: codec read timeout\n"); + /* time out may happen during reset */ + if (reg < 0x7c) + snd_printk(KERN_WARNING "atiixp: codec read timeout (reg %x)\n", reg); return 0xffff; } @@ -527,13 +546,11 @@ return 0; } -#if 0 /* for P/M */ +#ifdef CONFIG_PM static int snd_atiixp_aclink_down(atiixp_t *chip) { - unsigned long flags; - - if (atiixp_read(chip, MODEM_MIRROR) & ATI_REG_MODEM_MIRROR_RUNNING) - return -EBUSY; + // if (atiixp_read(chip, MODEM_MIRROR) & 0x1) /* modem running, too? */ + // return -EBUSY; atiixp_update(chip, CMD, ATI_REG_CMD_POWERDOWN | ATI_REG_CMD_AC_RESET, ATI_REG_CMD_POWERDOWN); @@ -585,12 +602,16 @@ { unsigned int reg; - /* enable burst mode */ + /* set up spdif, enable burst mode */ reg = atiixp_read(chip, CMD); reg |= 0x02 << ATI_REG_CMD_SPDF_THRESHOLD_SHIFT; reg |= ATI_REG_CMD_BURST_EN; atiixp_write(chip, CMD, reg); + reg = atiixp_read(chip, SPDF_CMD); + reg &= ~(ATI_REG_SPDF_CMD_LFSR|ATI_REG_SPDF_CMD_SINGLE_CH); + atiixp_write(chip, SPDF_CMD, reg); + /* clear all interrupt source */ atiixp_write(chip, ISR, 0xffffffff); /* enable irqs */ @@ -635,7 +656,7 @@ unsigned long flags; spin_lock_irqsave(&chip->reg_lock, flags); - curptr = readl(chip->remap_addr + dma->ops->llp_offset + 12); /* XXX_DMA_DT_CUR */ + curptr = readl(chip->remap_addr + dma->ops->dt_cur); if (curptr < dma->buf_addr) { snd_printdd("curptr = %x, base = %x\n", curptr, dma->buf_addr); curptr = 0; @@ -657,7 +678,7 @@ { if (! dma->substream || ! dma->running) return; - snd_printd(KERN_DEBUG "atiixp: XRUN detected (DMA %d)\n", dma->ops->type); + snd_printdd("atiixp: XRUN detected (DMA %d)\n", dma->ops->type); snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN); } @@ -800,15 +821,10 @@ { unsigned int data; data = atiixp_read(chip, CMD); - if (on) { + if (on) data |= ATI_REG_CMD_SPDF_OUT_EN; - if (chip->spdif_over_aclink) - data |= ATI_REG_CMD_SEND_EN; - } else { + else data &= ~ATI_REG_CMD_SPDF_OUT_EN; - if (chip->spdif_over_aclink) - data &= ~ATI_REG_CMD_SEND_EN; - } atiixp_write(chip, CMD, data); } @@ -835,25 +851,25 @@ static int snd_atiixp_spdif_prepare(snd_pcm_substream_t *substream) { atiixp_t *chip = snd_pcm_substream_chip(substream); - unsigned int data; spin_lock(&chip->reg_lock); if (chip->spdif_over_aclink) { + unsigned int data; /* enable slots 10/11 */ atiixp_update(chip, CMD, ATI_REG_CMD_SPDF_CONFIG_MASK, ATI_REG_CMD_SPDF_CONFIG_01); - data = atiixp_read(chip, OUT_DMA_SLOT); + data = atiixp_read(chip, OUT_DMA_SLOT) & ~ATI_REG_OUT_DMA_SLOT_MASK; data |= ATI_REG_OUT_DMA_SLOT_BIT(10) | ATI_REG_OUT_DMA_SLOT_BIT(11); data |= 0x04 << ATI_REG_OUT_DMA_THRESHOLD_SHIFT; atiixp_write(chip, OUT_DMA_SLOT, data); + atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_OUT, + substream->runtime->format == SNDRV_PCM_FORMAT_S16_LE ? + ATI_REG_CMD_INTERLEAVE_OUT : 0); } else { atiixp_update(chip, CMD, ATI_REG_CMD_SPDF_CONFIG_MASK, 0); + atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_SPDF, 0); } - - atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_SPDF, - substream->runtime->format == SNDRV_PCM_FORMAT_S16_LE ? - ATI_REG_CMD_INTERLEAVE_SPDF : 0); spin_unlock(&chip->reg_lock); return 0; } @@ -938,17 +954,18 @@ if (err < 0) return err; - if (dma->pcm) { + if (dma->ac97_pcm_type >= 0) { + struct ac97_pcm *pcm = chip->pcms[dma->ac97_pcm_type]; /* PCM is bound to AC97 codec(s) * set up the AC97 codecs */ if (dma->pcm_open_flag) { - snd_ac97_pcm_close(dma->pcm); + snd_ac97_pcm_close(pcm); dma->pcm_open_flag = 0; } - err = snd_ac97_pcm_open(dma->pcm, params_rate(hw_params), + err = snd_ac97_pcm_open(pcm, params_rate(hw_params), params_channels(hw_params), - dma->pcm->r[0].slots); + pcm->r[0].slots); if (err >= 0) dma->pcm_open_flag = 1; } @@ -962,7 +979,8 @@ atiixp_dma_t *dma = (atiixp_dma_t *)substream->runtime->private_data; if (dma->pcm_open_flag) { - snd_ac97_pcm_close(dma->pcm); + struct ac97_pcm *pcm = chip->pcms[dma->ac97_pcm_type]; + snd_ac97_pcm_close(pcm); dma->pcm_open_flag = 0; } atiixp_clear_dma_packets(chip, dma, substream); @@ -992,7 +1010,7 @@ .periods_max = ATI_MAX_DESCRIPTORS, }; -static int snd_atiixp_pcm_open(snd_pcm_substream_t *substream, atiixp_dma_t *dma) +static int snd_atiixp_pcm_open(snd_pcm_substream_t *substream, atiixp_dma_t *dma, int pcm_type) { atiixp_t *chip = snd_pcm_substream_chip(substream); snd_pcm_runtime_t *runtime = substream->runtime; @@ -1001,15 +1019,17 @@ snd_assert(dma->ops && dma->ops->enable_dma, return -EINVAL); + if (dma->opened) + return -EBUSY; dma->substream = substream; runtime->hw = snd_atiixp_pcm_hw; - if (dma->pcm) { - runtime->hw.rates = dma->pcm->rates; + dma->ac97_pcm_type = pcm_type; + if (pcm_type >= 0) { + runtime->hw.rates = chip->pcms[pcm_type]->rates; snd_pcm_limit_hw_rates(runtime); } else { - /* SPDIF */ - runtime->hw.rates = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_32000; - runtime->hw.rate_min = 32000; + /* direct SPDIF */ + runtime->hw.formats = SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE; } if ((err = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS)) < 0) return err; @@ -1019,6 +1039,7 @@ spin_lock_irqsave(&chip->reg_lock, flags); dma->ops->enable_dma(chip, 1); spin_unlock_irqrestore(&chip->reg_lock, flags); + dma->opened = 1; return 0; } @@ -1032,6 +1053,7 @@ dma->ops->enable_dma(chip, 0); spin_unlock_irq(&chip->reg_lock); dma->substream = NULL; + dma->opened = 0; return 0; } @@ -1042,26 +1064,33 @@ atiixp_t *chip = snd_pcm_substream_chip(substream); int err; - err = snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_PLAYBACK]); + down(&chip->open_mutex); + err = snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_PLAYBACK], 0); + up(&chip->open_mutex); + if (err < 0) + return err; substream->runtime->hw.channels_max = chip->max_channels; if (chip->max_channels > 2) /* channels must be even */ snd_pcm_hw_constraint_step(substream->runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 2); - return 0; } static int snd_atiixp_playback_close(snd_pcm_substream_t *substream) { atiixp_t *chip = snd_pcm_substream_chip(substream); - return snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_PLAYBACK]); + int err; + down(&chip->open_mutex); + err = snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_PLAYBACK]); + up(&chip->open_mutex); + return err; } static int snd_atiixp_capture_open(snd_pcm_substream_t *substream) { atiixp_t *chip = snd_pcm_substream_chip(substream); - return snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_CAPTURE]); + return snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_CAPTURE], 1); } static int snd_atiixp_capture_close(snd_pcm_substream_t *substream) @@ -1073,13 +1102,27 @@ static int snd_atiixp_spdif_open(snd_pcm_substream_t *substream) { atiixp_t *chip = snd_pcm_substream_chip(substream); - return snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_SPDIF]); + int err; + down(&chip->open_mutex); + if (chip->spdif_over_aclink) /* share DMA_PLAYBACK */ + err = snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_PLAYBACK], 2); + else + err = snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_SPDIF], -1); + up(&chip->open_mutex); + return err; } static int snd_atiixp_spdif_close(snd_pcm_substream_t *substream) { atiixp_t *chip = snd_pcm_substream_chip(substream); - return snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_SPDIF]); + int err; + down(&chip->open_mutex); + if (chip->spdif_over_aclink) + err = snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_PLAYBACK]); + else + err = snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_SPDIF]); + up(&chip->open_mutex); + return err; } /* AC97 playback */ @@ -1157,6 +1200,7 @@ static atiixp_dma_ops_t snd_atiixp_playback_dma_ops = { .type = ATI_DMA_PLAYBACK, .llp_offset = ATI_REG_OUT_DMA_LINKPTR, + .dt_cur = ATI_REG_OUT_DMA_DT_CUR, .enable_dma = atiixp_out_enable_dma, .enable_transfer = atiixp_out_enable_transfer, .flush_dma = atiixp_out_flush_dma, @@ -1165,6 +1209,7 @@ static atiixp_dma_ops_t snd_atiixp_capture_dma_ops = { .type = ATI_DMA_CAPTURE, .llp_offset = ATI_REG_IN_DMA_LINKPTR, + .dt_cur = ATI_REG_IN_DMA_DT_CUR, .enable_dma = atiixp_in_enable_dma, .enable_transfer = atiixp_in_enable_transfer, .flush_dma = atiixp_in_flush_dma, @@ -1173,6 +1218,7 @@ static atiixp_dma_ops_t snd_atiixp_spdif_dma_ops = { .type = ATI_DMA_SPDIF, .llp_offset = ATI_REG_SPDF_DMA_LINKPTR, + .dt_cur = ATI_REG_SPDF_DMA_DT_CUR, .enable_dma = atiixp_spdif_enable_dma, .enable_transfer = atiixp_spdif_enable_transfer, .flush_dma = atiixp_spdif_flush_dma, @@ -1188,7 +1234,8 @@ /* initialize constants */ chip->dmas[ATI_DMA_PLAYBACK].ops = &snd_atiixp_playback_dma_ops; chip->dmas[ATI_DMA_CAPTURE].ops = &snd_atiixp_capture_dma_ops; - chip->dmas[ATI_DMA_SPDIF].ops = &snd_atiixp_spdif_dma_ops; + if (! chip->spdif_over_aclink) + chip->dmas[ATI_DMA_SPDIF].ops = &snd_atiixp_spdif_dma_ops; /* assign AC97 pcm */ if (chip->spdif_over_aclink) @@ -1198,49 +1245,55 @@ err = snd_ac97_pcm_assign(pbus, num_pcms, atiixp_pcm_defs); if (err < 0) return err; + for (i = 0; i < num_pcms; i++) + chip->pcms[i] = &pbus->pcms[i]; chip->max_channels = 2; - if (pbus->pcms[0].r[0].slots & (1 << AC97_SLOT_PCM_SLEFT)) { - if (pbus->pcms[0].r[0].slots & (1 << AC97_SLOT_LFE)) + if (pbus->pcms[ATI_PCM_OUT].r[0].slots & (1 << AC97_SLOT_PCM_SLEFT)) { + if (pbus->pcms[ATI_PCM_OUT].r[0].slots & (1 << AC97_SLOT_LFE)) chip->max_channels = 6; else chip->max_channels = 4; } - chip->dmas[ATI_DMA_PLAYBACK].pcm = &pbus->pcms[0]; - chip->dmas[ATI_DMA_CAPTURE].pcm = &pbus->pcms[1]; - if (chip->spdif_over_aclink) - chip->dmas[ATI_DMA_SPDIF].pcm = &pbus->pcms[2]; - /* PCM #0: analog I/O */ - err = snd_pcm_new(chip->card, "ATI IXP AC97", 0, 1, 1, &pcm); + err = snd_pcm_new(chip->card, "ATI IXP AC97", ATI_PCMDEV_ANALOG, 1, 1, &pcm); if (err < 0) return err; snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_atiixp_playback_ops); snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_atiixp_capture_ops); pcm->private_data = chip; strcpy(pcm->name, "ATI IXP AC97"); + chip->pcmdevs[ATI_PCMDEV_ANALOG] = pcm; snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci), 64*1024, 128*1024); /* no SPDIF support on codec? */ - if (chip->dmas[ATI_DMA_SPDIF].pcm && ! chip->dmas[ATI_DMA_SPDIF].pcm->rates) + if (chip->pcms[ATI_PCM_SPDIF] && ! chip->pcms[ATI_PCM_SPDIF]->rates) return 0; + /* FIXME: non-48k sample rate doesn't work on my test machine with AD1888 */ + if (chip->pcms[ATI_PCM_SPDIF]) + chip->pcms[ATI_PCM_SPDIF]->rates = SNDRV_PCM_RATE_48000; + /* PCM #1: spdif playback */ - err = snd_pcm_new(chip->card, "ATI IXP IEC958", 1, 1, 0, &pcm); + err = snd_pcm_new(chip->card, "ATI IXP IEC958", ATI_PCMDEV_DIGITAL, 1, 0, &pcm); if (err < 0) return err; snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_atiixp_spdif_ops); pcm->private_data = chip; - strcpy(pcm->name, "ATI IXP IEC958"); + if (chip->spdif_over_aclink) + strcpy(pcm->name, "ATI IXP IEC958 (AC97)"); + else + strcpy(pcm->name, "ATI IXP IEC958 (Direct)"); + chip->pcmdevs[ATI_PCMDEV_DIGITAL] = pcm; snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci), 64*1024, 128*1024); /* pre-select AC97 SPDIF slots 10/11 */ - for (i = 0; i < 3; i++) { + for (i = 0; i < NUM_ATI_CODECS; i++) { if (chip->ac97[i]) snd_ac97_update_bits(chip->ac97[i], AC97_EXTENDED_STATUS, 0x03 << 4, 0x03 << 4); } @@ -1272,10 +1325,12 @@ snd_atiixp_xrun_dma(chip, &chip->dmas[ATI_DMA_CAPTURE]); else if (status & ATI_REG_ISR_IN_STATUS) snd_atiixp_update_dma(chip, &chip->dmas[ATI_DMA_CAPTURE]); - if (status & ATI_REG_ISR_SPDF_XRUN) - snd_atiixp_xrun_dma(chip, &chip->dmas[ATI_DMA_SPDIF]); - else if (status & ATI_REG_ISR_SPDF_STATUS) - snd_atiixp_update_dma(chip, &chip->dmas[ATI_DMA_SPDIF]); + if (! chip->spdif_over_aclink) { + if (status & ATI_REG_ISR_SPDF_XRUN) + snd_atiixp_xrun_dma(chip, &chip->dmas[ATI_DMA_SPDIF]); + else if (status & ATI_REG_ISR_SPDF_STATUS) + snd_atiixp_update_dma(chip, &chip->dmas[ATI_DMA_SPDIF]); + } /* for codec detection */ if (status & CODEC_CHECK_BITS) { @@ -1303,7 +1358,8 @@ ac97_bus_t bus, *pbus; ac97_t ac97; int i, err; - static unsigned int codec_skip[3] = { + int codec_count; + static unsigned int codec_skip[NUM_ATI_CODECS] = { ATI_REG_ISR_CODEC0_NOT_READY, ATI_REG_ISR_CODEC1_NOT_READY, ATI_REG_ISR_CODEC2_NOT_READY, @@ -1321,15 +1377,34 @@ return err; chip->ac97_bus = pbus; - for (i = 0; i < 3; i++) { + codec_count = 0; + for (i = 0; i < NUM_ATI_CODECS; i++) { if (chip->codec_not_ready_bits & codec_skip[i]) continue; memset(&ac97, 0, sizeof(ac97)); ac97.private_data = chip; ac97.pci = chip->pci; ac97.num = i; - if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) - return err; + ac97.scaps = AC97_SCAP_SKIP_MODEM; + if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) { + if (chip->codec_not_ready_bits) + /* codec(s) was detected but not available. + * return the error + */ + return err; + else { + /* codec(s) was NOT detected, so just ignore here */ + chip->ac97[i] = NULL; /* to be sure */ + snd_printd("atiixp: codec %d not found\n", i); + continue; + } + } + codec_count++; + } + + if (! codec_count) { + snd_printk(KERN_ERR "atiixp: no codec available\n"); + return -ENODEV; } /* snd_ac97_tune_hardware(chip->ac97, ac97_quirks); */ @@ -1338,6 +1413,53 @@ } +#ifdef CONFIG_PM +/* + * power management + */ +static int snd_atiixp_suspend(snd_card_t *card, unsigned int state) +{ + atiixp_t *chip = snd_magic_cast(atiixp_t, card->pm_private_data, return -EINVAL); + int i; + + for (i = 0; i < NUM_ATI_PCMDEVS; i++) + if (chip->pcmdevs[i]) + snd_pcm_suspend_all(chip->pcmdevs[i]); + for (i = 0; i < NUM_ATI_CODECS; i++) + if (chip->ac97[i]) + snd_ac97_suspend(chip->ac97[i]); + snd_atiixp_aclink_down(chip); + snd_atiixp_chip_stop(chip); + + pci_save_state(chip->pci, chip->pci_state); + pci_set_power_state(chip->pci, 3); + pci_disable_device(chip->pci); + snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; +} + +static int snd_atiixp_resume(snd_card_t *card, unsigned int state) +{ + atiixp_t *chip = snd_magic_cast(atiixp_t, card->pm_private_data, return -EINVAL); + int i; + + pci_enable_device(chip->pci); + pci_restore_state(chip->pci, chip->pci_state); + pci_set_power_state(chip->pci, 0); + + snd_atiixp_aclink_reset(chip); + snd_atiixp_chip_start(chip); + + for (i = 0; i < NUM_ATI_CODECS; i++) + if (chip->ac97[i]) + snd_ac97_resume(chip->ac97[i]); + + snd_power_change_state(card, SNDRV_CTL_POWER_D0); + return 0; +} +#endif /* CONFIG_PM */ + + /* * proc interface for register dump */ @@ -1412,24 +1534,25 @@ spin_lock_init(&chip->reg_lock); spin_lock_init(&chip->ac97_lock); + init_MUTEX(&chip->open_mutex); chip->card = card; chip->pci = pci; chip->irq = -1; chip->addr = pci_resource_start(pci, 0); if ((chip->res = request_mem_region(chip->addr, ATI_MEM_REGION, "ATI IXP AC97")) == NULL) { - snd_printk("unable to grab I/O memory 0x%lx\n", chip->addr); + snd_printk(KERN_ERR "unable to grab I/O memory 0x%lx\n", chip->addr); snd_atiixp_free(chip); return -EBUSY; } chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr, ATI_MEM_REGION); if (chip->remap_addr == 0) { - snd_printk("AC'97 space ioremap problem\n"); + snd_printk(KERN_ERR "AC'97 space ioremap problem\n"); snd_atiixp_free(chip); return -EIO; } if (request_irq(pci->irq, snd_atiixp_interrupt, SA_INTERRUPT|SA_SHIRQ, card->shortname, (void *)chip)) { - snd_printk("unable to grab IRQ %d\n", pci->irq); + snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_atiixp_free(chip); return -EBUSY; } @@ -1471,7 +1594,7 @@ pci_read_config_byte(pci, PCI_REVISION_ID, &revision); - strcpy(card->driver, "ATIIXP"); + strcpy(card->driver, spdif_aclink[dev] ? "ATIIXP" : "ATIIXP-SPDMA"); strcpy(card->shortname, "ATI IXP"); if ((err = snd_atiixp_create(card, pci, &chip)) < 0) goto __error; @@ -1494,10 +1617,12 @@ sprintf(card->longname, "%s rev %x at 0x%lx, irq %i", card->shortname, revision, chip->addr, chip->irq); + snd_card_set_pm_callback(card, snd_atiixp_suspend, snd_atiixp_resume, chip); + if ((err = snd_card_register(card)) < 0) goto __error; - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; @@ -1508,9 +1633,7 @@ static void __devexit snd_atiixp_remove(struct pci_dev *pci) { - atiixp_t *chip = snd_magic_cast(atiixp_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -1519,21 +1642,13 @@ .id_table = snd_atiixp_ids, .probe = snd_atiixp_probe, .remove = __devexit_p(snd_atiixp_remove), + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_atiixp_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "ATI IXP AC97 controller not found or device busy\n"); -#endif - return err; - } - - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_atiixp_exit(void) @@ -1543,27 +1658,3 @@ module_init(alsa_card_atiixp_init) module_exit(alsa_card_atiixp_exit) - -#ifndef MODULE - -/* format is: snd-atiixp=enable,index,id,ac97_clock,spdif_aclink */ - -static int __init alsa_card_atiixp_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&ac97_clock[nr_dev]) == 2 && - get_option(&str,&spdif_aclink[nr_dev]) == 2 - ); - nr_dev++; - return 1; -} - -__setup("snd-atiixp=", alsa_card_atiixp_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/au88x0/au8810.h b/sound/pci/au88x0/au8810.h --- a/sound/pci/au88x0/au8810.h 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au8810.h 2004-05-26 15:01:36 -07:00 @@ -7,7 +7,7 @@ #define CARD_NAME "Aureal Advantage 3D Sound Processor" #define CARD_NAME_SHORT "au8810" -#define NR_ADB 0x20 +#define NR_ADB 0x10 #define NR_WT 0x00 #define NR_SRC 0x10 #define NR_A3D 0x10 @@ -51,13 +51,14 @@ /* ADB */ #define VORTEX_ADB_SR 0x28400 /* Samplerates enable/disable */ #define VORTEX_ADB_RTBASE 0x28000 -#define VORTEX_ADB_RTBASE_SIZE (VORTEX_ADB_CHNBASE - VORTEX_ADB_RTBASE) +#define VORTEX_ADB_RTBASE_COUNT 173 #define VORTEX_ADB_CHNBASE 0x282b4 -#define VORTEX_ADB_CHNBASE_SIZE (ADB_MASK - VORTEX_ADB_RTBASE_SIZE) +#define VORTEX_ADB_CHNBASE_COUNT 24 #define ROUTE_MASK 0xffff #define SOURCE_MASK 0xff00 #define ADB_MASK 0xff #define ADB_SHIFT 0x8 + /* ADB address */ #define OFFSET_ADBDMA 0x00 #define OFFSET_SRCIN 0x40 @@ -69,10 +70,12 @@ #define OFFSET_SPORTIN 0x78 /* ch 0x13 */ #define OFFSET_SPORTOUT 0x90 #define OFFSET_SPDIFOUT 0x92 /* ch 0x14 check this! */ -#define OFFSET_EQIN 0xa0 +#define OFFSET_EQIN 0xa0 #define OFFSET_EQOUT 0x7e /* 2 routes on ch 0x11 */ #define OFFSET_XTALKOUT 0x66 /* crosstalk canceller (source) */ #define OFFSET_XTALKIN 0x96 /* crosstalk canceller (sink) */ +#define OFFSET_A3DIN 0x70 /* ADB sink. */ +#define OFFSET_A3DOUT 0xA6 /* ADB source. 2 routes per slice = 8 */ #define OFFSET_EFXIN 0x80 /* ADB sink. */ #define OFFSET_EFXOUT 0x68 /* ADB source. */ @@ -89,8 +92,8 @@ #define ADB_SPDIFOUT(x) (x + OFFSET_SPDIFOUT) #define ADB_EQIN(x) (x + OFFSET_EQIN) #define ADB_EQOUT(x) (x + OFFSET_EQOUT) -#define ADB_A3DOUT(x) (x + 0x50) /* A3D blocks */ -#define ADB_A3DIN(x) (x + 0x70) +#define ADB_A3DOUT(x) (x + OFFSET_A3DOUT) /* 0x10 A3D blocks */ +#define ADB_A3DIN(x) (x + OFFSET_A3DIN) #define ADB_XTALKIN(x) (x + OFFSET_XTALKIN) #define ADB_XTALKOUT(x) (x + OFFSET_XTALKOUT) @@ -120,20 +123,31 @@ #define VOL_MAX 0x7f /* FIXME: Not confirmed! Just guessed. */ /* SRC */ -#define VORTEX_SRCBLOCK_SR 0x26cc0 -#define VORTEX_SRC_CHNBASE 0x26c40 -#define VORTEX_SRC_RTBASE 0x26c00 -#define VORTEX_SRC_SOURCE 0x26cc4 -#define VORTEX_SRC_SOURCESIZE 0x26cc8 -#define VORTEX_SRC_CONVRATIO 0x26e40 -#define VORTEX_SRC_DRIFT0 0x26e80 -#define VORTEX_SRC_DRIFT1 0x26ec0 -#define VORTEX_SRC_DRIFT2 0x26f40 -#define VORTEX_SRC_U0 0x26e00 -#define VORTEX_SRC_U1 0x26f00 -#define VORTEX_SRC_U2 0x26f80 -#define VORTEX_SRC_DATA 0x26800 /* 0xc800 */ -#define VORTEX_SRC_DATA0 0x26000 +#define VORTEX_SRC_CHNBASE 0x26c40 +#define VORTEX_SRC_RTBASE 0x26c00 +#define VORTEX_SRCBLOCK_SR 0x26cc0 +#define VORTEX_SRC_SOURCE 0x26cc4 +#define VORTEX_SRC_SOURCESIZE 0x26cc8 +/* Params + 0x26e00 : 1 U0 + 0x26e40 : 2 CR + 0x26e80 : 3 U3 + 0x26ec0 : 4 DRIFT1 + 0x26f00 : 5 U1 + 0x26f40 : 6 DRIFT2 + 0x26f80 : 7 U2 : Target rate, direction +*/ + +#define VORTEX_SRC_CONVRATIO 0x26e40 +#define VORTEX_SRC_DRIFT0 0x26e80 +#define VORTEX_SRC_DRIFT1 0x26ec0 +#define VORTEX_SRC_DRIFT2 0x26f40 +#define VORTEX_SRC_U0 0x26e00 +#define U0_SLOWLOCK 0x200 +#define VORTEX_SRC_U1 0x26f00 +#define VORTEX_SRC_U2 0x26f80 +#define VORTEX_SRC_DATA 0x26800 /* 0xc800 */ +#define VORTEX_SRC_DATA0 0x26000 /* FIFO */ #define VORTEX_FIFO_ADBCTRL 0x16100 /* Control bits. */ @@ -150,33 +164,37 @@ //#define FIFO_MASK 0x1f /* at shift left 0xb */ //#define FIFO_SIZE 0x20 #define FIFO_BITS 0x03880000 -#define VORTEX_FIFO_ADBDATA 0x14000 -#define VORTEX_FIFO_WTDATA 0x10000 +#define VORTEX_FIFO_ADBDATA 0x14000 +#define VORTEX_FIFO_WTDATA 0x10000 /* CODEC */ -#define VORTEX_CODEC_CTRL 0x29184 -#define VORTEX_CODEC_EN 0x29190 +#define VORTEX_CODEC_CTRL 0x29184 +#define VORTEX_CODEC_EN 0x29190 #define EN_CODEC0 0x00000300 +#define EN_AC98 0x00000c00 /* Modem AC98 slots. */ #define EN_CODEC1 0x00003000 #define EN_CODEC (EN_CODEC0 | EN_CODEC1) #define EN_SPORT 0x00030000 #define EN_SPDIF 0x000c0000 -#define VORTEX_CODEC_CHN 0x29080 -#define VORTEX_CODEC_WRITE 0x00800000 -#define VORTEX_CODEC_ADDSHIFT 16 -#define VORTEX_CODEC_ADDMASK 0x7f0000 /* 0x000f0000 */ -#define VORTEX_CODEC_DATSHIFT 0 -#define VORTEX_CODEC_DATMASK 0xffff -#define VORTEX_CODEC_IO 0x29188 + +#define VORTEX_CODEC_CHN 0x29080 +#define VORTEX_CODEC_WRITE 0x00800000 +#define VORTEX_CODEC_ADDSHIFT 16 +#define VORTEX_CODEC_ADDMASK 0x7f0000 /* 0x000f0000 */ +#define VORTEX_CODEC_DATSHIFT 0 +#define VORTEX_CODEC_DATMASK 0xffff +#define VORTEX_CODEC_IO 0x29188 /* SPDIF */ -#define VORTEX_SPDIF_FLAGS 0x2205c -#define VORTEX_SPDIF_CFG0 0x291D0 -#define VORTEX_SPDIF_CFG1 0x291D4 +#define VORTEX_SPDIF_FLAGS 0x2205c +#define VORTEX_SPDIF_CFG0 0x291D0 +#define VORTEX_SPDIF_CFG1 0x291D4 #define VORTEX_SPDIF_SMPRATE 0x29194 /* Sample timer */ -#define VORTEX_SMP_TIME 0x29198 +#define VORTEX_SMP_TIME 0x29198 + +#define VORTEX_MODEM_CTRL 0x291ac /* IRQ */ #define VORTEX_IRQ_SOURCE 0x2a000 /* Interrupt source flags. */ @@ -193,19 +211,19 @@ #define CTRL_IRQ_ENABLE 0x00004000 /* write: Timer period config / read: TIMER IRQ ack. */ -#define VORTEX_IRQ_STAT 0x2919c +#define VORTEX_IRQ_STAT 0x2919c /* DMA */ -#define VORTEX_ENGINE_CTRL 0x27ae8 -#define ENGINE_INIT 0x1380000 +#define VORTEX_ENGINE_CTRL 0x27ae8 +#define ENGINE_INIT 0x1380000 - /* MIDI *//* GAME. */ -#define VORTEX_MIDI_DATA 0x28800 -#define VORTEX_MIDI_CMD 0x28804 /* Write command / Read status */ +/* MIDI *//* GAME. */ +#define VORTEX_MIDI_DATA 0x28800 +#define VORTEX_MIDI_CMD 0x28804 /* Write command / Read status */ -#define VORTEX_CTRL2 0x2880c +#define VORTEX_CTRL2 0x2880c #define CTRL2_GAME_ADCMODE 0x40 -#define VORTEX_GAME_LEGACY 0x28808 -#define VORTEX_GAME_AXIS 0x28810 +#define VORTEX_GAME_LEGACY 0x28808 +#define VORTEX_GAME_AXIS 0x28810 #define AXIS_SIZE 4 #define AXIS_RANGE 0x1fff diff -Nru a/sound/pci/au88x0/au8820.c b/sound/pci/au88x0/au8820.c --- a/sound/pci/au88x0/au8820.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au8820.c 2004-05-26 15:01:36 -07:00 @@ -1,7 +1,7 @@ #include "au8820.h" #include "au88x0.h" static struct pci_device_id snd_vortex_ids[] = { - {PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX, + {PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,}, {0,} }; diff -Nru a/sound/pci/au88x0/au8820.h b/sound/pci/au88x0/au8820.h --- a/sound/pci/au88x0/au8820.h 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/au88x0/au8820.h 2004-05-26 15:01:35 -07:00 @@ -48,9 +48,9 @@ /* ADB */ #define VORTEX_ADB_SR 0x10a00 /* Samplerates enable/disable */ #define VORTEX_ADB_RTBASE 0x10800 -#define VORTEX_ADB_RTBASE_SIZE (VORTEX_ADB_CHNBASE - VORTEX_ADB_RTBASE) +#define VORTEX_ADB_RTBASE_COUNT 103 #define VORTEX_ADB_CHNBASE 0x1099c -#define VORTEX_ADB_CHNBASE_SIZE (ADB_MASK - VORTEX_ADB_RTBASE_SIZE) +#define VORTEX_ADB_CHNBASE_COUNT 22 #define ROUTE_MASK 0x3fff #define ADB_MASK 0x7f #define ADB_SHIFT 0x7 diff -Nru a/sound/pci/au88x0/au8830.c b/sound/pci/au88x0/au8830.c --- a/sound/pci/au88x0/au8830.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/au88x0/au8830.c 2004-05-26 15:01:35 -07:00 @@ -1,7 +1,7 @@ #include "au8830.h" #include "au88x0.h" static struct pci_device_id snd_vortex_ids[] = { - {PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX2, + {PCI_VENDOR_ID_AUREAL, PCI_DEVICE_ID_AUREAL_VORTEX_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,}, {0,} }; diff -Nru a/sound/pci/au88x0/au8830.h b/sound/pci/au88x0/au8830.h --- a/sound/pci/au88x0/au8830.h 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/au88x0/au8830.h 2004-05-26 15:01:35 -07:00 @@ -45,7 +45,7 @@ #define VORTEX_ADBDMA_START 0x27c00 /* Which subbuffer starts */ #define VORTEX_ADBDMA_STATUS 0x27A90 /* stored at AdbDma->this_10 / 2 DWORD in size. */ -/* Starting at MSB, each pair seem to be the current DMA page. */ +/* Starting at the MSB, each pair of bits seem to be the current DMA page. */ /* This current page bits are consistent (same value) with VORTEX_ADBDMA_STAT) */ /* DMA */ @@ -65,9 +65,9 @@ /* ADB */ #define VORTEX_ADB_SR 0x28400 /* Samplerates enable/disable */ #define VORTEX_ADB_RTBASE 0x28000 -#define VORTEX_ADB_RTBASE_SIZE (VORTEX_ADB_CHNBASE - VORTEX_ADB_RTBASE) +#define VORTEX_ADB_RTBASE_COUNT 173 #define VORTEX_ADB_CHNBASE 0x282b4 -#define VORTEX_ADB_CHNBASE_SIZE (ADB_MASK - VORTEX_ADB_RTBASE_SIZE) +#define VORTEX_ADB_CHNBASE_COUNT 24 #define ROUTE_MASK 0xffff #define SOURCE_MASK 0xff00 #define ADB_MASK 0xff @@ -147,7 +147,7 @@ #define VORTEX_SRC_RTBASE 0x26c00 #define VORTEX_SRCBLOCK_SR 0x26cc0 #define VORTEX_SRC_SOURCE 0x26cc4 -#define VORTEX_SRC_SOURCESIZE 0x26cc4 +#define VORTEX_SRC_SOURCESIZE 0x26cc8 /* Params 0x26e00 : 1 U0 0x26e40 : 2 CR diff -Nru a/sound/pci/au88x0/au88x0.c b/sound/pci/au88x0/au88x0.c --- a/sound/pci/au88x0/au88x0.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au88x0.c 2004-05-26 15:01:36 -07:00 @@ -19,7 +19,7 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/interrupt.h> -#define SNDRV_GET_ID +#include <linux/moduleparam.h> #include <sound/initval.h> // module parameters (see "Module Parameters") @@ -27,17 +27,18 @@ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; static int pcifix[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 255 }; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(pcifix, "1-255i"); +module_param_array(pcifix, int, boot_devs, 0444); MODULE_PARM_DESC(pcifix, "Enable VIA-workaround for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(pcifix, SNDRV_ENABLED @@ -48,80 +49,72 @@ MODULE_LICENSE("GPL"); MODULE_DEVICES("{{Aureal Semiconductor Inc., Aureal Vortex Sound Processor}}"); -#ifndef MODULE -/* format is: snd-mychip=enable,index,id */ -static int __init alsa_card_vortex_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str, &enable[nr_dev]) == 2 && - get_option(&str, &index[nr_dev]) == 2 && - get_id(&str, &id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-au88x0=", alsa_card_vortex_setup); -#endif /* ifndef MODULE */ - MODULE_DEVICE_TABLE(pci, snd_vortex_ids); -static void __devinit snd_vortex_workaround(struct pci_dev *vortex, int fix) +static void vortex_fix_latency(struct pci_dev *vortex) { - struct pci_dev *via = NULL; int rc; - - /* autodetect if workarounds are required */ - while ((via = pci_find_device(PCI_VENDOR_ID_VIA, - PCI_DEVICE_ID_VIA_8365_1, via))) { - if (fix == 255) { + if (!(rc = pci_write_config_byte(vortex, 0x40, 0xff))) { printk(KERN_INFO CARD_NAME - ": detected VIA KT133/KM133. activating workaround...\n"); - fix = 3; // do latency and via bridge workaround - } - break; + ": vortex latency is 0xff\n"); + } else { + printk(KERN_WARNING CARD_NAME + ": could not set vortex latency: pci error 0x%x\n", rc); } +} - /* do not do anything if autodetection was enabled and found no VIA */ - if (fix == 255) - return; +static void vortex_fix_agp_bridge(struct pci_dev *via) +{ + int rc; + u8 value; - /* fix vortex latency */ - if (fix & 0x01) { - if (!(rc = pci_write_config_byte(vortex, 0x40, 0xff))) { - printk(KERN_INFO CARD_NAME - ": vortex latency is 0xff\n"); - } else { - printk(KERN_WARNING CARD_NAME - ": could not set vortex latency: pci error 0x%x\n", - rc); - } + /* + * only set the bit (Extend PCI#2 Internal Master for + * Efficient Handling of Dummy Requests) if the can + * read the config and it is not already set + */ + + if (!(rc = pci_read_config_byte(via, 0x42, &value)) + && ((value & 0x10) + || !(rc = pci_write_config_byte(via, 0x42, value | 0x10)))) { + printk(KERN_INFO CARD_NAME + ": bridge config is 0x%x\n", value | 0x10); + } else { + printk(KERN_WARNING CARD_NAME + ": could not set vortex latency: pci error 0x%x\n", rc); } +} - /* fix via agp bridge */ - if (via && (fix & 0x02)) { - u8 value; - - /* - * only set the bit (Extend PCI#2 Internal Master for - * Efficient Handling of Dummy Requests) if the can - * read the config and it is not already set - */ - - if (!(rc = pci_read_config_byte(via, 0x42, &value)) - && ((value & 0x10) - || !(rc = - pci_write_config_byte(via, 0x42, value | 0x10)))) { +static void __devinit snd_vortex_workaround(struct pci_dev *vortex, int fix) +{ + struct pci_dev *via; - printk(KERN_INFO CARD_NAME - ": bridge config is 0x%x\n", value | 0x10); - } else { - printk(KERN_WARNING CARD_NAME - ": could not set vortex latency: pci error 0x%x\n", - rc); + /* autodetect if workarounds are required */ + if (fix == 255) { + /* VIA KT133 */ + via = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8365_1, NULL); + /* VIA Apollo */ + if (via == NULL) { + via = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C598_1, NULL); + } + /* AMD Irongate */ + if (via == NULL) { + via = pci_find_device(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_7007, NULL); } + if (via) { + printk(KERN_INFO CARD_NAME ": Activating latency workaround...\n"); + vortex_fix_latency(vortex); + vortex_fix_agp_bridge(via); + } + } else { + if (fix & 0x1) + vortex_fix_latency(vortex); + if ((fix & 0x2) && (via = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8365_1, NULL))) + vortex_fix_agp_bridge(via); + if ((fix & 0x4) && (via = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C598_1, NULL))) + vortex_fix_agp_bridge(via); + if ((fix & 0x8) && (via = pci_find_device(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_7007, NULL))) + vortex_fix_agp_bridge(via); } } @@ -370,7 +363,7 @@ return err; } // (7) - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; vortex_connect_default(chip, 1); vortex_enable_int(chip); @@ -380,16 +373,8 @@ // destructor -- see "Destructor" sub-section static void __devexit snd_vortex_remove(struct pci_dev *pci) { - vortex_t *vortex = snd_magic_cast(vortex_t, - pci_get_drvdata(pci), return); - - if (vortex) { - // Release ALSA stuff. - snd_card_free(vortex->card); - // Free Vortex struct. - pci_set_drvdata(pci, NULL); - } else - printk("snd_vortex_remove called more than one time!\n"); + snd_card_free(pci_get_drvdata(pci)); + pci_set_drvdata(pci, NULL); } // pci_driver definition @@ -403,16 +388,7 @@ // initialization of the module static int __init alsa_card_vortex_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Aureal soundcard not found " - "or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } // clean up the module diff -Nru a/sound/pci/au88x0/au88x0.h b/sound/pci/au88x0/au88x0.h --- a/sound/pci/au88x0/au88x0.h 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au88x0.h 2004-05-26 15:01:36 -07:00 @@ -17,6 +17,7 @@ #ifndef __SOUND_AU88X0_H #define __SOUND_AU88X0_H +#ifdef __KERNEL__ #include <sound/driver.h> #include <linux/init.h> #include <linux/pci.h> @@ -28,6 +29,8 @@ #include <sound/hwdep.h> #include <sound/ac97_codec.h> +#endif + #ifndef CHIP_AU8820 #include "au88x0_eq.h" #include "au88x0_a3d.h" @@ -69,20 +72,19 @@ #define IRQ_MODEM 0x4000 /* ADB Resource */ -#define VORTEX_RESOURCE_DMA 0x00000000 -#define VORTEX_RESOURCE_SRC 0x00000001 +#define VORTEX_RESOURCE_DMA 0x00000000 +#define VORTEX_RESOURCE_SRC 0x00000001 #define VORTEX_RESOURCE_MIXIN 0x00000002 #define VORTEX_RESOURCE_MIXOUT 0x00000003 -#define VORTEX_RESOURCE_A3D 0x00000004 +#define VORTEX_RESOURCE_A3D 0x00000004 #define VORTEX_RESOURCE_LAST 0x00000005 /* Check for SDAC bit in "Extended audio ID" AC97 register */ -#define VORTEX_IS_QUAD(x) ((x->codec == NULL) ? 0 : (x->codec->ext_id|0x80)) +#define VORTEX_IS_QUAD(x) ((x->codec == NULL) ? 0 : (x->codec->ext_id&0x80)) /* Check if chip has bug. */ #define IS_BAD_CHIP(x) (\ - (x->rev < 3 && x->device == PCI_DEVICE_ID_AUREAL_VORTEX) || \ - (x->rev < 0xfe && x->device == PCI_DEVICE_ID_AUREAL_VORTEX2) || \ - (x->rev < 0xfe && x->device == PCI_DEVICE_ID_AUREAL_ADVANTAGE)) + (x->rev == 0xfe && x->device == PCI_DEVICE_ID_AUREAL_VORTEX_2) || \ + (x->rev == 0xfe && x->device == PCI_DEVICE_ID_AUREAL_ADVANTAGE)) /* PCM devices */ diff -Nru a/sound/pci/au88x0/au88x0_a3d.c b/sound/pci/au88x0/au88x0_a3d.c --- a/sound/pci/au88x0/au88x0_a3d.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au88x0_a3d.c 2004-05-26 15:01:36 -07:00 @@ -617,6 +617,12 @@ static void vortex_Vort3D_connect(vortex_t * v, int en) { int i; + +// Disable AU8810 routes, since they seem to be wrong (in au8810.h). +#ifdef CHIP_AU8810 + return; +#endif + #if 1 /* Alloc Xtalk mixin resources */ v->mixxtlk[0] = diff -Nru a/sound/pci/au88x0/au88x0_core.c b/sound/pci/au88x0/au88x0_core.c --- a/sound/pci/au88x0/au88x0_core.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au88x0_core.c 2004-05-26 15:01:36 -07:00 @@ -72,6 +72,7 @@ into au88x0_pcm.c . 06-06-2003 Buffer shifter bugfix. Mixer volume fix. 07-12-2003 A3D routing finally fixed. Believed to be OK. + 25-03-2004 Many thanks to Claudia, for such valuable bug reports. */ @@ -772,7 +773,9 @@ return 1; } - /*FIFO*/ static void + /*FIFO*/ + +static void vortex_fifo_clearadbdata(vortex_t * vortex, int fifo, int x) { for (x--; x >= 0; x--) @@ -1345,31 +1348,29 @@ dma->nr_periods = count; dma->sgbuf = sgbuf; - psize--; - dma->cfg0 = 0; dma->cfg1 = 0; switch (count) { /* Four or more pages */ default: case 4: - dma->cfg1 |= 0x88000000 | 0x44000000 | 0x30000000 | psize; - hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4), + dma->cfg1 |= 0x88000000 | 0x44000000 | 0x30000000 | (psize-1); + hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0xc, snd_sgbuf_get_addr(sgbuf, psize * 3)); /* 3 pages */ case 3: dma->cfg0 |= 0x12000000; - dma->cfg1 |= 0x80000000 | 0x40000000 | (psize << 0xc); - hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4), + dma->cfg1 |= 0x80000000 | 0x40000000 | ((psize-1) << 0xc); + hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0x8, snd_sgbuf_get_addr(sgbuf, psize * 2)); /* 2 pages */ case 2: - dma->cfg0 |= 0x88000000 | 0x44000000 | 0x10000000 | psize; - hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4), + dma->cfg0 |= 0x88000000 | 0x44000000 | 0x10000000 | (psize-1); + hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0x4, snd_sgbuf_get_addr(sgbuf, psize)); /* 1 page */ case 1: - dma->cfg0 |= 0x80000000 | 0x40000000 | (psize << 0xc); + dma->cfg0 |= 0x80000000 | 0x40000000 | ((psize-1) << 0xc); hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4), snd_sgbuf_get_addr(sgbuf, 0)); break; @@ -1575,11 +1576,11 @@ /* it looks like we are writing more than we need to... * if we write what we are supposed to it breaks things... */ hwwrite(vortex->mmio, VORTEX_ADB_SR, 0); - for (i = 0; i < VORTEX_ADB_RTBASE_SIZE; i++) + for (i = 0; i < VORTEX_ADB_RTBASE_COUNT; i++) hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (i << 2), hwread(vortex->mmio, VORTEX_ADB_RTBASE + (i << 2)) | ROUTE_MASK); - for (i = 0; i < VORTEX_ADB_CHNBASE_SIZE; i++) { + for (i = 0; i < VORTEX_ADB_CHNBASE_COUNT; i++) { hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (i << 2), hwread(vortex->mmio, VORTEX_ADB_CHNBASE + (i << 2)) | ROUTE_MASK); @@ -1922,6 +1923,9 @@ // Connect front channels through EQ. vortex_connection_mix_adb(vortex, en, 0x11, mixers[0], ADB_EQIN(0)); vortex_connection_mix_adb(vortex, en, 0x11, mixers[1], ADB_EQIN(1)); + /* Lower volume, since EQ has some gain. */ + vortex_mix_setvolumebyte(vortex, mixers[0], 0); + vortex_mix_setvolumebyte(vortex, mixers[1], 0); vortex_route(vortex, en, 0x11, ADB_EQOUT(0), ADB_CODECOUT(0)); vortex_route(vortex, en, 0x11, ADB_EQOUT(1), ADB_CODECOUT(1)); @@ -2007,9 +2011,11 @@ } /* Default Connections */ +static int +vortex_adb_allocroute(vortex_t * vortex, int dma, int nr_ch, int dir, int type); + static void vortex_connect_default(vortex_t * vortex, int en) { - // FIXME: check if checkout was succesful. // Connect AC97 codec. vortex->mixplayb[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXOUT); @@ -2044,7 +2050,7 @@ #ifndef CHIP_AU8810 vortex_wt_connect(vortex, en); #endif - // A3D (crosstalk canceler and A3D slices). + // A3D (crosstalk canceler and A3D slices). AU8810 disabled for now. #ifndef CHIP_AU8820 vortex_Vort3D_connect(vortex, en); #endif @@ -2053,18 +2059,7 @@ // Connect DSP interface for SQ3500 turbo (not here i think...) // Connect AC98 modem codec - - /* Fast Play Workaround. Revision 0xFE does not seem to need it. */ - printk(KERN_INFO "vortex: revision = 0x%x, device = %d\n", vortex->rev, vortex->device); - if (IS_BAD_CHIP(vortex)) { - printk(KERN_INFO "vortex: Erratum workaround enabled.\n"); - #ifndef CHIP_AU8820 - vortex->fixed_res[VORTEX_RESOURCE_DMA] = 0x00000001; - #endif - // Channel swapping workaround. We are nuking registers somewhere, or - // its a hardware bug. - vortex->fixed_res[VORTEX_RESOURCE_SRC] = 0x00000001; - } + } /* @@ -2081,7 +2076,7 @@ { stream_t *stream; int i, en; - + if ((nr_ch == 3) || ((dir == SNDRV_PCM_STREAM_CAPTURE) && (nr_ch > 2))) return -EBUSY; @@ -2105,7 +2100,6 @@ stream->dir = dir; stream->type = type; - // FIXME: check for success of checkout or checkin. /* PLAYBACK ROUTES. */ if (dir == SNDRV_PCM_STREAM_PLAYBACK) { int src[4], mix[4], ch_top; @@ -2165,8 +2159,7 @@ for (i = 0; i < nr_ch; i++) { if (stream->type == VORTEX_PCM_ADB) { vortex_connection_adbdma_src(vortex, en, - src[nr_ch - 1], - //src[0], + src[nr_ch - 1], dma, src[i]); vortex_connection_src_mixin(vortex, en, @@ -2188,7 +2181,7 @@ #ifndef CHIP_AU8820 if (stream->type == VORTEX_PCM_A3D) { vortex_connection_adbdma_src(vortex, en, - src[0], + src[nr_ch - 1], dma, src[i]); vortex_route(vortex, en, 0x11, ADB_SRCOUT(src[i]), ADB_A3DIN(a3d)); @@ -2237,7 +2230,7 @@ ADB_SPDIFOUT(1)); } #endif - /* CAPTURE ROUTES. */ + /* CAPTURE ROUTES. */ } else { int src[2], mix[2]; @@ -2271,7 +2264,7 @@ vortex_connection_mixin_mix(vortex, en, MIX_CAPT(1), mix[0], 0); vortex_connection_src_adbdma(vortex, en, - src[nr_ch - 1], + src[0], src[0], dma); } else { vortex_connection_mixin_mix(vortex, en, @@ -2279,7 +2272,7 @@ vortex_connection_mix_src(vortex, en, 0x11, mix[1], src[1]); vortex_connection_src_src_adbdma(vortex, en, - src[0], src[0], + src[1], src[0], src[1], dma); } } diff -Nru a/sound/pci/au88x0/au88x0_eq.c b/sound/pci/au88x0/au88x0_eq.c --- a/sound/pci/au88x0/au88x0_eq.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au88x0_eq.c 2004-05-26 15:01:36 -07:00 @@ -710,11 +710,13 @@ static void vortex_Eqlzr_SetBypass(vortex_t * vortex, long bp) { eqlzr_t *eq = &(vortex->eq); - + if ((eq->this28) && (bp == 0)) { + /* EQ enabled */ vortex_Eqlzr_SetAllBandsFromActiveCoeffSet(vortex); vortex_EqHw_SetBypassGain(vortex, eq->this08, eq->this08); } else { + /* EQ disabled. */ vortex_EqHw_SetLeftGainsTarget(vortex, (u16 *) (eq->this14)); vortex_EqHw_SetRightGainsTarget(vortex, (u16 *) (eq->this14)); vortex_EqHw_SetBypassGain(vortex, eq->this0c, eq->this0c); diff -Nru a/sound/pci/au88x0/au88x0_game.c b/sound/pci/au88x0/au88x0_game.c --- a/sound/pci/au88x0/au88x0_game.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/au88x0/au88x0_game.c 2004-05-26 15:01:35 -07:00 @@ -42,8 +42,6 @@ #define VORTEX_GAME_DWAIT 20 /* 20 ms */ -static struct gameport gameport; - static unsigned char vortex_game_read(struct gameport *gameport) { vortex_t *vortex = gameport->driver; @@ -98,8 +96,10 @@ static int vortex_gameport_register(vortex_t * vortex) { - vortex->gameport = &gameport; - + if ((vortex->gameport = snd_kcalloc(sizeof(struct gameport), GFP_KERNEL)) == NULL) { + return -1; + }; + vortex->gameport->driver = vortex; vortex->gameport->fuzz = 64; @@ -118,8 +118,10 @@ static int vortex_gameport_unregister(vortex_t * vortex) { - if (vortex->gameport != NULL) + if (vortex->gameport != NULL) { gameport_unregister_port(vortex->gameport); + kfree(vortex->gameport); + } return 0; } diff -Nru a/sound/pci/au88x0/au88x0_pcm.c b/sound/pci/au88x0/au88x0_pcm.c --- a/sound/pci/au88x0/au88x0_pcm.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au88x0_pcm.c 2004-05-26 15:01:36 -07:00 @@ -18,8 +18,7 @@ * Vortex PCM ALSA driver. * * Supports ADB and WT DMA. Unfortunately, WT channels do not run yet. - * It remains stuck,and DMA transfers do not happen. - * + * It remains stuck,and DMA transfers do not happen. */ #include <sound/driver.h> @@ -124,7 +123,7 @@ vortex_t *vortex = snd_pcm_substream_chip(substream); snd_pcm_runtime_t *runtime = substream->runtime; int err; - + /* Force equal size periods */ if ((err = snd_pcm_hw_constraint_integer(runtime, @@ -232,12 +231,13 @@ } #ifndef CHIP_AU8810 else { - /*if (stream != NULL) + /* if (stream != NULL) vortex_wt_allocroute(chip, substream->number, 0); */ vortex_wt_allocroute(chip, substream->number, params_channels(hw_params)); stream = substream->runtime->private_data = &chip->dma_wt[substream->number]; + stream->dma = substream->number; stream->substream = substream; vortex_wtdma_setbuffers(chip, substream->number, sgbuf, params_period_bytes(hw_params), @@ -325,7 +325,7 @@ break; case SNDRV_PCM_TRIGGER_STOP: // do something to stop the PCM engine - //printk(KERN_INFO "vortex: stop %d\n", dma) + //printk(KERN_INFO "vortex: stop %d\n", dma); stream->fifo_enabled = 0; if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) vortex_adbdma_pausefifo(chip, dma); @@ -502,18 +502,13 @@ if (idx == VORTEX_PCM_ADB) snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_vortex_playback_ops); - + /* pre-allocation of Scatter-Gather buffers */ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG, - snd_dma_pci_data(chip->pci_dev), - 0x10000, 0x10000); - - // The above should be used, as soon as ALSA gets updated. - /* - snd_pcm_lib_preallocate_sg_pages_for_all(chip->pci_dev, pcm, - 0x10000, 0x10000); - */ + snd_dma_pci_data(chip->pci_dev), + 0x10000, 0x10000); + if (VORTEX_PCM_TYPE(pcm) == VORTEX_PCM_SPDIF) { snd_kcontrol_t *kcontrol; diff -Nru a/sound/pci/au88x0/au88x0_synth.c b/sound/pci/au88x0/au88x0_synth.c --- a/sound/pci/au88x0/au88x0_synth.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/au88x0/au88x0_synth.c 2004-05-26 15:01:36 -07:00 @@ -36,6 +36,7 @@ /* WT */ +/* Put 2 WT channels together for one stereo interlaced channel. */ static void vortex_wt_setstereo(vortex_t * vortex, u32 wt, u32 stereo) { int temp; @@ -47,6 +48,7 @@ hwwrite(vortex->mmio, WT_STEREO(wt), temp); } +/* Join to mixdown route. */ static void vortex_wt_setdsout(vortex_t * vortex, u32 wt, int en) { int temp; @@ -60,7 +62,7 @@ hwwrite(vortex->mmio, WT_DSREG((wt >= 0x20) ? 1 : 0), temp); } -// WT routing is still a mistery. +/* Setup WT route. */ static int vortex_wt_allocroute(vortex_t * vortex, int wt, int nr_ch) { wt_voice_t *voice = &(vortex->wt_voice[wt]); @@ -68,13 +70,15 @@ //FIXME: WT audio routing. if (nr_ch) { - vortex_fifo_wtinitialize(vortex, wt, 2); + vortex_fifo_wtinitialize(vortex, wt, 1); vortex_fifo_setwtvalid(vortex, wt, 1); vortex_wt_setstereo(vortex, wt, nr_ch - 1); } else vortex_fifo_setwtvalid(vortex, wt, 0); - - vortex_wt_setdsout(vortex, wt, 0); + + /* Set mixdown mode. */ + vortex_wt_setdsout(vortex, wt, 1); + /* Set other parameter registers. */ hwwrite(vortex->mmio, WT_SRAMP(0), 0x880000); //hwwrite(vortex->mmio, WT_GMODE(0), 0xffffffff); #ifdef CHIP_AU8830 @@ -87,7 +91,7 @@ temp = hwread(vortex->mmio, WT_PARM(wt, 3)); printk("vortex: WT PARM3: %x\n", temp); - hwwrite(vortex->mmio, WT_PARM(wt, 3), temp); + //hwwrite(vortex->mmio, WT_PARM(wt, 3), temp); hwwrite(vortex->mmio, WT_DELAY(wt, 0), 0); hwwrite(vortex->mmio, WT_DELAY(wt, 1), 0); @@ -106,6 +110,7 @@ return 0; } + static void vortex_wt_connect(vortex_t * vortex, int en) { int i, ii, mix; @@ -129,15 +134,12 @@ ADB_WTOUT(i, ii + 0x20), ADB_MIXIN(mix)); vortex_connection_mixin_mix(vortex, en, mix, - vortex->mixplayb[ii % - 2], 0); + vortex->mixplayb[ii % 2], 0); if (VORTEX_IS_QUAD(vortex)) vortex_connection_mixin_mix(vortex, en, mix, - vortex-> - mixplayb[2 + - (ii % - 2)], 0); + vortex->mixplayb[2 + + (ii % 2)], 0); } } for (i = 0; i < NR_WT; i++) { diff -Nru a/sound/pci/azt3328.c b/sound/pci/azt3328.c --- a/sound/pci/azt3328.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/azt3328.c 2004-05-26 15:01:36 -07:00 @@ -98,13 +98,13 @@ #include <linux/delay.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/rawmidi.h> #include <sound/mpu401.h> #include <sound/opl3.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include "azt3328.h" @@ -166,18 +166,19 @@ #ifdef SUPPORT_JOYSTICK static int joystick[SNDRV_CARDS]; #endif +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for AZF3328 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for AZF3328 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable AZF3328 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_INDEX_DESC); #ifdef SUPPORT_JOYSTICK -MODULE_PARM(joystick, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick, bool, boot_devs, 0444); MODULE_PARM_DESC(joystick, "Enable joystick for AZF3328 soundcard."); MODULE_PARM_SYNTAX(joystick, SNDRV_BOOLEAN_FALSE_DESC); #endif @@ -1267,6 +1268,10 @@ if (chip->irq < 0) goto __end_hw; + /* reset (close) mixer */ + snd_azf3328_mixer_set_mute(chip, IDX_MIXER_PLAY_MASTER, 1); /* first mute master volume */ + snd_azf3328_mixer_write(chip, IDX_MIXER_RESET, 0x0, WORD_VALUE); + /* interrupt setup - mask everything */ /* FIXME */ @@ -1540,7 +1545,7 @@ snd_azf3328_config_joystick(chip, joystick[dev]); #endif - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; snd_azf3328_dbgcallleave(); @@ -1549,16 +1554,8 @@ static void __devexit snd_azf3328_remove(struct pci_dev *pci) { - azf3328_t *chip = snd_magic_cast(azf3328_t, pci_get_drvdata(pci), return); - snd_azf3328_dbgcallenter(); - - /* reset (close) mixer */ - snd_azf3328_mixer_set_mute(chip, IDX_MIXER_PLAY_MASTER, 1); /* first mute master volume */ - snd_azf3328_mixer_write(chip, IDX_MIXER_RESET, 0x0, WORD_VALUE); - - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); snd_azf3328_dbgcallleave(); } @@ -1573,18 +1570,10 @@ static int __init alsa_card_azf3328_init(void) { int err; - snd_azf3328_dbgcallenter(); - - if ((err = pci_module_init(&driver)) < 0) - { -#ifdef MODULE - printk(KERN_ERR "azt3328: no AZF3328 based soundcards found or device busy\n"); -#endif - return err; - } + err = pci_module_init(&driver); snd_azf3328_dbgcallleave(); - return 0; + return err; } static void __exit alsa_card_azf3328_exit(void) @@ -1596,31 +1585,3 @@ module_init(alsa_card_azf3328_init) module_exit(alsa_card_azf3328_exit) - -#ifndef MODULE - -/* format is: snd-azf3328=enable,index,id,joystick */ - -static int __init alsa_card_azf3328_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - snd_azf3328_dbgcallenter(); - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 -#ifdef SUPPORT_JOYSTICK - && get_option(&str,&joystick[nr_dev]) == 2 -#endif - ); - nr_dev++; - snd_azf3328_dbgcallleave(); - return 1; -} - -__setup("snd-azt3328=", alsa_card_azf3328_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/bt87x.c b/sound/pci/bt87x.c --- a/sound/pci/bt87x.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/bt87x.c 2004-05-26 15:01:36 -07:00 @@ -26,13 +26,13 @@ #include <linux/interrupt.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <asm/io.h> #include <asm/bitops.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/control.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>"); @@ -46,17 +46,18 @@ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ static int digital_rate[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0 }; /* digital input rate */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Bt87x soundcard"); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Bt87x soundcard"); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Bt87x soundcard"); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(digital_rate, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(digital_rate, int, boot_devs, 0444); MODULE_PARM_DESC(digital_rate, "Digital input rate for Bt87x soundcard"); MODULE_PARM_SYNTAX(digital_rate, SNDRV_ENABLED); @@ -808,7 +809,7 @@ if (err < 0) goto _error; - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); ++dev; return 0; @@ -819,9 +820,7 @@ static void __devexit snd_bt87x_remove(struct pci_dev *pci) { - bt87x_t *chip = snd_magic_cast(bt87x_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -851,16 +850,7 @@ static int __init alsa_card_bt87x_init(void) { - int err; - - err = pci_module_init(&driver); - if (err < 0) { -#ifdef MODULE - printk(KERN_ERR "Bt87x soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_bt87x_exit(void) @@ -870,24 +860,3 @@ module_init(alsa_card_bt87x_init) module_exit(alsa_card_bt87x_exit) - -#ifndef MODULE - -/* format is: snd-bt87x=enable,index,id */ - -static int __init alsa_card_bt87x_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-bt87x=", alsa_card_bt87x_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/cmipci.c b/sound/pci/cmipci.c --- a/sound/pci/cmipci.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/cmipci.c 2004-05-26 15:01:36 -07:00 @@ -20,10 +20,6 @@ /* Does not work. Warning may block system in capture mode */ /* #define USE_VAR48KRATE */ -/* Define this if you want soft ac3 encoding */ -#define DO_SOFT_AC3 -#define USE_AES_IEC958 - #include <sound/driver.h> #include <asm/io.h> #include <linux/delay.h> @@ -32,6 +28,7 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/info.h> #include <sound/control.h> @@ -41,7 +38,6 @@ #include <sound/opl3.h> #include <sound/sb.h> #include <sound/asoundef.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>"); @@ -62,35 +58,31 @@ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable switches */ static long mpu_port[SNDRV_CARDS]; static long fm_port[SNDRV_CARDS]; -#ifdef DO_SOFT_AC3 static int soft_ac3[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)]=1}; -#endif #ifdef SUPPORT_JOYSTICK static int joystick_port[SNDRV_CARDS]; #endif +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for C-Media PCI soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for C-Media PCI soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable C-Media PCI soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0},{0x330},{0x320},{0x310},{0x300}},dialog:list"); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM port."); MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED ",allows:{{0},{0x388},{0x3c8},{0x3e0},{0x3e8}},dialog:list"); -#ifdef DO_SOFT_AC3 -MODULE_PARM(soft_ac3, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(soft_ac3, bool, boot_devs, 0444); MODULE_PARM_DESC(soft_ac3, "Sofware-conversion of raw SPDIF packets (model 033 only)."); -MODULE_PARM_SYNTAX(soft_ac3, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); -#endif #ifdef SUPPORT_JOYSTICK -MODULE_PARM(joystick_port, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick_port, int, boot_devs, 0444); MODULE_PARM_DESC(joystick_port, "Joystick port address."); MODULE_PARM_SYNTAX(joystick_port, SNDRV_ENABLED ",allows:{{0},{1},{0x200},{0x201}},dialog:list"); #endif @@ -426,7 +418,6 @@ unsigned int is_dac; /* is dac? */ int bytes_per_frame; int shift; - int ac3_shift; /* extra shift: 1 on soft ac3 mode */ }; /* mixer elements toggled/resumed during ac3 playback */ @@ -472,10 +463,6 @@ unsigned int dig_status; unsigned int dig_pcm_status; -#ifdef USE_AES_IEC958 - snd_ctl_elem_value_t *spdif_channel; -#endif - snd_kcontrol_t *spdif_pcm_ctl; snd_pcm_hardware_t *hw_info[3]; /* for playbacks */ @@ -784,8 +771,6 @@ /* buffer and period sizes in frame */ rec->dma_size = runtime->buffer_size << rec->shift; rec->period_size = runtime->period_size << rec->shift; - rec->dma_size <<= rec->ac3_shift; - rec->period_size <<= rec->ac3_shift; if (runtime->channels > 2) { /* multi-channels */ rec->dma_size = (rec->dma_size * runtime->channels) / 2; @@ -911,7 +896,6 @@ ptr = snd_cmipci_read(cm, reg) - rec->offset; ptr = bytes_to_frames(substream->runtime, ptr); #endif - ptr >>= rec->ac3_shift; if (substream->runtime->channels > 2) ptr = (ptr * 2) / substream->runtime->channels; return ptr; @@ -953,358 +937,6 @@ return snd_cmipci_pcm_pointer(cm, &cm->channel[CM_CH_CAPT], substream); } -#ifdef DO_SOFT_AC3 -/* - * special tricks for soft ac3 transfer: - * - * we compose an iec958 subframe from 16bit ac3 sample and - * write the raw subframe via 32bit data mode. - */ - -# ifndef USE_AES_IEC958 - -/* find parity for bit 4~30 */ -static unsigned int parity(unsigned int data) -{ - unsigned int parity = 0; - int counter = 4; - - data >>= 4; /* start from bit 4 */ - while (counter <= 30) { - if (data & 1) - parity++; - data >>= 1; - counter++; - } - return parity & 1; -} - -/* - * compose 32bit iec958 subframe with non-audio data. - * bit 0-3 = preamble - * 4-7 = aux (=0) - * 8-27 = data (12-27 for 16bit) - * 28 = validity (=0) - * 29 = user data (=0) - * 30 = channel status - * 31 = parity - * - * channel status is assumed as consumer, non-audio - * thus all 0 except bit 1 - */ -inline static u32 convert_ac3_32bit(cmipci_t *cm, u32 val) -{ - u32 data = (u32)val << 12; - - if (cm->spdif_counter == 2 || cm->spdif_counter == 3) /* bit 1 */ - data |= 0x40000000; /* indicate AC-3 raw data */ - if (parity(data)) /* parity bit 4-30 */ - data |= 0x80000000; - if (cm->spdif_counter == 0) - data |= 3; /* preamble 'M' */ - else if (cm->spdif_counter & 1) - data |= 5; /* odd, 'W' */ - else - data |= 9; /* even, 'M' */ - - cm->spdif_counter++; - if (cm->spdif_counter == 384) - cm->spdif_counter = 0; - - return data; -} - -# else /* if USE_AES_IEC958 */ - -/* - * The bitstream handling - */ -typedef struct iec958_stru_bitstream { - u32 *data; /* Holds the current position */ - u32 left; /* Bits left in current 32bit frame */ - u32 word; /* The 32bit frame of the current position */ - u32 bits; /* All bits together */ - int err; /* Error condition */ -} iec958_bitstream_t ; - -static iec958_bitstream_t bs; - -/* Initialize ptr on the buffer */ -static void iec958_init_bitstream(u8 *buf, u32 size) -{ - bs.data = (u32 *)buf; /* Set initial position */ - bs.word = *bs.data; /* The first 32bit frame */ - bs.left = 32; /* has exactly 32bits */ - bs.bits = size; - bs.err = 0; -} - -/* Remove ptr on the buffer */ -static void iec958_clear_bitstream(void) -{ - bs.data = NULL; - bs.left = 0; - bs.err = 0; -} - -/* Get bits from bitstream (max 32) */ -static inline u32 iec958_getbits(u32 bits) -{ - u32 res; - - if (bs.bits < bits) { - bits = bs.bits; - bs.err = 1; - } - if (bits > 32) { - bits = 32; - bs.err = 1; - } - bs.bits -= bits; - -# ifdef WORDS_BIGENDIAN - if (bits < bs.left) { /* Within 32bit frame */ - res = (bs.word << (32 - bs.left)) >> (32 - bits); - bs.left -= bits; - goto out; - } /* We may cross the frame boundary */ - res = (bs.word << (32 - bs.left)) >> (32 - bs.left); - bits -= bs.left; - - bs.word = *(++bs.data); /* Next 32bit frame */ - - if (bits) /* Add remaining bits, if any */ - res = (res << bits) | (bs.word >> (32 - bits)); - -# else /* not WORDS_BIGENDIAN */ - - if (bits < bs.left) { /* Within 32bit frame */ - res = (bs.word << (32 - bits)) >> (32 - bits); - bs.word >>= bits; - bs.left -= bits; - goto out; - } /* We may cross the frame boundary */ - res = bs.word; - bits -= bs.left; - - bs.word = *(++bs.data); /* Next 32bit frame */ - - if (bits) { /* Add remaining bits, if any */ - res = res | (((bs.word << (32 - bits)) >> (32 - bits)) << bits); - bs.word >>= bits; - } -# endif /* not WORDS_BIGENDIAN */ - - bs.left = (32 - bits); -out: - return res; -} - -static inline u32 iec958_bits_avail(void) -{ - return bs.bits; -} - -static inline int iec958_error(void) -{ - return bs.err; -} - -/* - * Determine parity for time slots 4 upto 30 - * to be sure that bit 4 upt 31 will carry - * an even number of ones and zeros. - */ -static u32 iec958_parity(u32 data) -{ - u32 parity = 0; - int counter = 4; - - data >>= 4; /* start from bit 4 */ - while (counter++ <= 30) { - if (data & 0x00000001) - parity++; - data >>= 1; - } - return (parity & 0x00000001); -} - -/* - * Compose 32bit iec958 subframe, two sub frames - * build one frame with two channels. - * - * bit 0-3 = preamble - * 4-7 = AUX (=0) - * 8-27 = data (12-27 for 16bit, 8-27 for 20bit, and 24bit without AUX) - * 28 = validity (0 for valid data, else 'in error') - * 29 = user data (0) - * 30 = channel status (24 bytes for 192 frames) - * 31 = parity - */ - -static inline u32 iec958_subframe(cmipci_t *cm, snd_ctl_elem_value_t * ucontrol) -{ - u32 data; - u32 byte = cm->spdif_counter >> 4; - u32 mask = 1 << ((cm->spdif_counter >> 1) - (byte << 3)); - u8 * status = ucontrol->value.iec958.status; - - if (status[2] & IEC958_AES2_PRO_SBITS_24) { - /* Does this work for LE systems ??? */ - if (status[2] & IEC958_AES2_PRO_WORDLEN_24_20) { - data = iec958_getbits(24); - data <<= 4; - } else { - data = iec958_getbits(20); - data <<= 8; - } - } else { - if (status[2] & IEC958_AES2_PRO_WORDLEN_24_20) { - /* Does this work for LE systems ??? */ - data = iec958_getbits(20); - data <<= 8; - } else { - data = iec958_getbits(16); - data <<= 12; - } - } - - /* - * Set one of the 192 bits of the channel status (AES3 and higher) - */ - if (status[byte] & mask) - data |= 0x40000000; - - if (iec958_parity(data)) /* parity bit 4-30 */ - data |= 0x80000000; - - /* Preamble */ - if (!cm->spdif_counter) - data |= 0x03; /* Block start, 'Z' */ - else if (cm->spdif_counter % 2) - data |= 0x05; /* odd sub frame, 'Y' */ - else - data |= 0x09; /* even sub frame, 'X' */ - - /* - * sub frame counter: 2 sub frame are one audio frame - * and 192 frames are one block - */ - cm->spdif_counter = (++cm->spdif_counter) % 384; - - return data; -} -# endif /* if USE_AES_IEC958 */ - -static int snd_cmipci_ac3_copy(snd_pcm_substream_t *subs, int channel, - snd_pcm_uframes_t pos, void *src, - snd_pcm_uframes_t count) -{ - cmipci_t *cm = snd_pcm_substream_chip(subs); - u32 *dst; - snd_pcm_uframes_t offset; - snd_pcm_runtime_t *runtime = subs->runtime; -#ifndef USE_AES_IEC958 - u16 *srcp = src, val; -#else - char buf[480]; /* bits can be divided by 20, 24, 16 */ - size_t bytes = frames_to_bytes(runtime, count); -#endif - - - if (!cm->channel[CM_CH_PLAY].ac3_shift) { - if (copy_from_user(runtime->dma_area + - frames_to_bytes(runtime, pos), src, - frames_to_bytes(runtime, count))) - return -EFAULT; - return 0; - } - - if (! access_ok(VERIFY_READ, src, count)) - return -EFAULT; - - /* frame = 16bit stereo */ - offset = (pos << 1) % (cm->channel[CM_CH_PLAY].dma_size << 2); - dst = (u32*)(runtime->dma_area + offset); -# ifndef USE_AES_IEC958 - count /= 2; - while (count-- > 0) { - get_user(val, srcp); - srcp++; - *dst++ = convert_ac3_32bit(cm, val); - } -# else - while (bytes) { - size_t c = bytes; - - if (c > sizeof(buf)) - c = sizeof(buf); - - if (copy_from_user(buf, src, c)) - return -EFAULT; - bytes -= c; - src += c; - - iec958_init_bitstream(buf, c*8); - while (iec958_bits_avail()) { - *(dst++) = iec958_subframe(cm, cm->spdif_channel); - if (iec958_error()) - return -EINVAL; - } - iec958_clear_bitstream(); - } -# endif - return 0; -} - -static int snd_cmipci_ac3_silence(snd_pcm_substream_t *subs, int channel, - snd_pcm_uframes_t pos, - snd_pcm_uframes_t count) -{ - cmipci_t *cm = snd_pcm_substream_chip(subs); - u32 *dst; - snd_pcm_uframes_t offset; - snd_pcm_runtime_t *runtime = subs->runtime; -# ifdef USE_AES_IEC958 - char buf[480]; /* bits can be divided by 20, 24, 16 */ - size_t bytes = frames_to_bytes(runtime, count); -# endif - if (! cm->channel[CM_CH_PLAY].ac3_shift) - return snd_pcm_format_set_silence(runtime->format, - runtime->dma_area + frames_to_bytes(runtime, pos), count); - - /* frame = 16bit stereo */ - offset = (pos << 1) % (cm->channel[CM_CH_PLAY].dma_size << 2); - dst = (u32*)(subs->runtime->dma_area + offset); -# ifndef USE_AES_IEC958 - count /= 2; - while (count-- > 0) { - *dst++ = convert_ac3_32bit(cm, 0); - } -# else - while (bytes) { - size_t c = bytes; - - if (c > sizeof(buf)) - c = sizeof(buf); - - /* Q: Does this function know about 24bit silence? */ - if (snd_pcm_format_set_silence(runtime->format, buf, bytes_to_frames(runtime, c))) - return -EINVAL; - - iec958_init_bitstream(buf, c*8); - while (iec958_bits_avail()) { - *(dst++) = iec958_subframe(cm, cm->spdif_channel); - if (iec958_error()) - return -EINVAL; - } - iec958_clear_bitstream(); - } -# endif - return 0; -} -#endif /* DO_SOFT_AC3 */ - /* * hw preparation for spdif @@ -1404,9 +1036,6 @@ spin_lock_irqsave(&chip->reg_lock, flags); for (i = 0; i < 4; i++) ucontrol->value.iec958.status[i] = (chip->dig_pcm_status >> (i * 8)) & 0xff; -#ifdef USE_AES_IEC958 - ucontrol = chip->spdif_channel; -#endif spin_unlock_irqrestore(&chip->reg_lock, flags); return 0; } @@ -1425,9 +1054,6 @@ val |= (unsigned int)ucontrol->value.iec958.status[i] << (i * 8); change = val != chip->dig_pcm_status; chip->dig_pcm_status = val; -#ifdef USE_AES_IEC958 - chip->spdif_channel = ucontrol; -#endif spin_unlock_irqrestore(&chip->reg_lock, flags); return change; } @@ -1504,9 +1130,6 @@ /* spinlock held! */ static void setup_ac3(cmipci_t *cm, snd_pcm_substream_t *subs, int do_ac3, int rate) { - cm->channel[CM_CH_PLAY].ac3_shift = 0; - cm->spdif_counter = 0; - if (do_ac3) { /* AC3EN for 037 */ snd_cmipci_set_bit(cm, CM_REG_CHFORMAT, CM_AC3EN1); @@ -1519,9 +1142,6 @@ snd_cmipci_set_bit(cm, CM_REG_CHFORMAT, CM_SPD24SEL); snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_SPD32SEL); } else { /* can_ac3_sw */ -#ifdef DO_SOFT_AC3 - /* FIXME: ugly hack! */ - subs->runtime->buffer_size /= 2; /* SPD32SEL for 037 & 039, 0x20 */ snd_cmipci_set_bit(cm, CM_REG_MISC_CTRL, CM_SPD32SEL); /* set 176K sample rate to fix 033 HW bug */ @@ -1532,8 +1152,6 @@ snd_cmipci_clear_bit(cm, CM_REG_CHFORMAT, CM_PLAYBACK_SRATE_176K); } } - cm->channel[CM_CH_PLAY].ac3_shift = 1; /* use 32bit */ -#endif /* DO_SOFT_AC3 */ } } else { @@ -1550,11 +1168,9 @@ snd_cmipci_clear_bit(cm, CM_REG_CHFORMAT, CM_SPD24SEL); } } else { -#ifdef DO_SOFT_AC3 snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_SPD32SEL); snd_cmipci_clear_bit(cm, CM_REG_CHFORMAT, CM_SPD24SEL); snd_cmipci_clear_bit(cm, CM_REG_CHFORMAT, CM_PLAYBACK_SRATE_176K); -#endif /* DO_SOFT_AC3 */ } } } @@ -1604,15 +1220,12 @@ { cmipci_t *cm = snd_pcm_substream_chip(substream); int rate = substream->runtime->rate; - int do_spdif, do_ac3; + int do_spdif, do_ac3 = 0; do_spdif = ((rate == 44100 || rate == 48000) && substream->runtime->format == SNDRV_PCM_FORMAT_S16_LE && substream->runtime->channels == 2); - do_ac3 = cm->dig_pcm_status & IEC958_AES0_NONAUDIO; -#ifdef DO_SOFT_AC3 - if (do_ac3 && cm->can_ac3_sw) - do_spdif = 0; -#endif + if (do_spdif && cm->can_ac3_hw) + do_ac3 = cm->dig_pcm_status & IEC958_AES0_NONAUDIO; setup_spdif_playback(cm, substream, do_spdif, do_ac3); return snd_cmipci_pcm_prepare(cm, &cm->channel[CM_CH_PLAY], substream); } @@ -1621,7 +1234,12 @@ static int snd_cmipci_playback_spdif_prepare(snd_pcm_substream_t *substream) { cmipci_t *cm = snd_pcm_substream_chip(substream); - setup_spdif_playback(cm, substream, 1, cm->dig_pcm_status & IEC958_AES0_NONAUDIO); + int do_ac3; + if (cm->can_ac3_hw) + do_ac3 = cm->dig_pcm_status & IEC958_AES0_NONAUDIO; + else + do_ac3 = 1; /* doesn't matter */ + setup_spdif_playback(cm, substream, 1, do_ac3); return snd_cmipci_pcm_prepare(cm, &cm->channel[CM_CH_PLAY], substream); } @@ -1768,8 +1386,9 @@ /* spdif playback on channel A */ static snd_pcm_hardware_t snd_cmipci_playback_spdif = { - .info = (SNDRV_PCM_INFO_INTERLEAVED | - SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE), + .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | + SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE | + SNDRV_PCM_INFO_MMAP_VALID), .formats = SNDRV_PCM_FMTBIT_S16_LE, .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000, .rate_min = 44100, @@ -1784,6 +1403,26 @@ .fifo_size = 0, }; +/* spdif playback on channel A (32bit, IEC958 subframes) */ +static snd_pcm_hardware_t snd_cmipci_playback_iec958_subframe = +{ + .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | + SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE | + SNDRV_PCM_INFO_MMAP_VALID), + .formats = SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE, + .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000, + .rate_min = 44100, + .rate_max = 48000, + .channels_min = 2, + .channels_max = 2, + .buffer_bytes_max = (128*1024), + .period_bytes_min = 64, + .period_bytes_max = (128*1024), + .periods_min = 2, + .periods_max = 1024, + .fifo_size = 0, +}; + /* spdif capture on channel B */ static snd_pcm_hardware_t snd_cmipci_capture_spdif = { @@ -1921,13 +1560,13 @@ if ((err = open_device_check(cm, CM_OPEN_SPDIF_PLAYBACK, substream)) < 0) /* use channel A */ return err; - runtime->hw = snd_cmipci_playback_spdif; -#ifdef DO_SOFT_AC3 - if (cm->can_ac3_hw) -#endif - runtime->hw.info |= SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID; - if (cm->chip_version >= 37) - runtime->hw.formats |= SNDRV_PCM_FMTBIT_S32_LE; + if (cm->can_ac3_hw) { + runtime->hw = snd_cmipci_playback_spdif; + if (cm->chip_version >= 37) + runtime->hw.formats |= SNDRV_PCM_FMTBIT_S32_LE; + } else { + runtime->hw = snd_cmipci_playback_iec958_subframe; + } snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 0, 0x40000); cm->dig_pcm_status = cm->dig_status; return 0; @@ -2034,21 +1673,6 @@ .pointer = snd_cmipci_playback_pointer, }; -#ifdef DO_SOFT_AC3 -static snd_pcm_ops_t snd_cmipci_playback_spdif_soft_ops = { - .open = snd_cmipci_playback_spdif_open, - .close = snd_cmipci_playback_spdif_close, - .ioctl = snd_pcm_lib_ioctl, - .hw_params = snd_cmipci_hw_params, - .hw_free = snd_cmipci_playback_hw_free, - .prepare = snd_cmipci_playback_spdif_prepare, /* set up rate */ - .trigger = snd_cmipci_playback_trigger, - .pointer = snd_cmipci_playback_pointer, - .copy = snd_cmipci_ac3_copy, - .silence = snd_cmipci_ac3_silence, -}; -#endif - static snd_pcm_ops_t snd_cmipci_capture_spdif_ops = { .open = snd_cmipci_capture_spdif_open, .close = snd_cmipci_capture_spdif_close, @@ -2125,14 +1749,7 @@ if (err < 0) return err; -#ifdef DO_SOFT_AC3 - if (cm->can_ac3_hw) - snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_cmipci_playback_spdif_ops); - else - snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_cmipci_playback_spdif_soft_ops); -#else snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_cmipci_playback_spdif_ops); -#endif snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_cmipci_capture_spdif_ops); pcm->private_data = cm; @@ -2770,16 +2387,17 @@ if (err < 0) return err; } - if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_cmipci_spdif_default, cm))) < 0) - return err; - kctl->id.device = pcm_spdif_device; - if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_cmipci_spdif_mask, cm))) < 0) - return err; - kctl->id.device = pcm_spdif_device; - if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_cmipci_spdif_stream, cm))) < 0) - return err; - kctl->id.device = pcm_spdif_device; - cm->spdif_pcm_ctl = kctl; + if (cm->can_ac3_hw) { + if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_cmipci_spdif_default, cm))) < 0) + return err; + kctl->id.device = pcm_spdif_device; + if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_cmipci_spdif_mask, cm))) < 0) + return err; + kctl->id.device = pcm_spdif_device; + if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_cmipci_spdif_stream, cm))) < 0) + return err; + kctl->id.device = pcm_spdif_device; + } if (cm->chip_version <= 37) { sw = snd_cmipci_old_mixer_switches; for (idx = 0; idx < num_controls(snd_cmipci_old_mixer_switches); idx++, sw++) { @@ -2917,6 +2535,8 @@ if (cm->can_multi_ch) sprintf(cm->card->driver + strlen(cm->card->driver), "-MC%d", cm->max_channels); + else if (cm->can_ac3_sw) + strcpy(cm->card->driver + strlen(cm->card->driver), "-SWIEC"); } @@ -3013,9 +2633,7 @@ cm->chip_version = 0; cm->max_channels = 2; -#ifdef DO_SOFT_AC3 cm->do_soft_ac3 = soft_ac3[dev]; -#endif query_chip(cm); @@ -3264,15 +2882,7 @@ static int __init alsa_card_cmipci_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "C-Media PCI soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_cmipci_exit(void) @@ -3282,34 +2892,3 @@ module_init(alsa_card_cmipci_init) module_exit(alsa_card_cmipci_exit) - -#ifndef MODULE - -/* format is: snd-cmipci=enable,index,id, - mpu_port,fm_port,soft_ac3,joystick_port */ - -static int __init alsa_card_cmipci_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 -#ifdef DO_SOFT_AC3 - && get_option(&str,&soft_ac3[nr_dev]) == 2 -#endif -#ifdef SUPPORT_JOYSTICK - && get_option(&str,&joystick_port[nr_dev]) == 2 -#endif - ); - nr_dev++; - return 1; -} - -__setup("snd-cmipci=", alsa_card_cmipci_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/cs4281.c b/sound/pci/cs4281.c --- a/sound/pci/cs4281.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/cs4281.c 2004-05-26 15:01:36 -07:00 @@ -27,13 +27,13 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/rawmidi.h> #include <sound/ac97_codec.h> #include <sound/opl3.h> -#define SNDRV_GET_ID #include <sound/initval.h> @@ -47,17 +47,18 @@ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable switches */ static int dual_codec[SNDRV_CARDS]; /* dual codec */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for CS4281 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for CS4281 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable CS4281 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(dual_codec, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dual_codec, bool, boot_devs, 0444); MODULE_PARM_DESC(dual_codec, "Secondary Codec ID (0 = disabled)."); MODULE_PARM_SYNTAX(dual_codec, SNDRV_ENABLED ",allows:{{0,3}}"); @@ -1395,7 +1396,8 @@ static int snd_cs4281_chip_init(cs4281_t *chip); /* defined below */ #ifdef CONFIG_PM -static int snd_cs4281_set_power_state(snd_card_t *card, unsigned int power_state); +static int cs4281_suspend(snd_card_t *card, unsigned int state); +static int cs4281_resume(snd_card_t *card, unsigned int state); #endif static int __devinit snd_cs4281_create(snd_card_t * card, @@ -1461,10 +1463,7 @@ snd_cs4281_proc_init(chip); -#ifdef CONFIG_PM - card->set_power_state = snd_cs4281_set_power_state; - card->power_state_private_data = chip; -#endif + snd_card_set_pm_callback(card, cs4281_suspend, cs4281_resume, chip); if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { snd_cs4281_free(chip); @@ -1481,7 +1480,9 @@ { unsigned int tmp; int timeout; + int retry_count = 2; + __retry: tmp = snd_cs4281_peekBA0(chip, BA0_CFLR); if (tmp != BA0_CFLR_DEFAULT) { snd_cs4281_pokeBA0(chip, BA0_CFLR, BA0_CFLR_DEFAULT); @@ -1629,6 +1630,8 @@ snd_cs4281_delay_long(); } while (timeout-- > 0); + if (--retry_count > 0) + goto __retry; snd_printk(KERN_ERR "never read ISV3 and ISV4 from AC'97\n"); return -EIO; @@ -1999,15 +2002,14 @@ return err; } - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_cs4281_remove(struct pci_dev *pci) { - cs4281_t *chip = pci_get_drvdata(pci); - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -2036,17 +2038,19 @@ #define CLKCR1_CKRA 0x00010000L -static void cs4281_suspend(cs4281_t *chip) +static int cs4281_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + cs4281_t *chip = snd_magic_cast(cs4281_t, card->pm_private_data, return -EINVAL); u32 ulCLK; unsigned int i; - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; - snd_pcm_suspend_all(chip->pcm); + if (chip->ac97) + snd_ac97_suspend(chip->ac97); + if (chip->ac97_secondary) + snd_ac97_suspend(chip->ac97_secondary); + ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1); ulCLK |= CLKCR1_CKRA; snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK); @@ -2076,17 +2080,15 @@ snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void cs4281_resume(cs4281_t *chip) +static int cs4281_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + cs4281_t *chip = snd_magic_cast(cs4281_t, card->pm_private_data, return -EINVAL); unsigned int i; u32 ulCLK; - if (card->power_state == SNDRV_CTL_POWER_D0) - return; - pci_enable_device(chip->pci); ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1); @@ -2110,41 +2112,8 @@ snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK); snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int snd_cs4281_suspend(struct pci_dev *dev, u32 state) -{ - cs4281_t *chip = snd_magic_cast(cs4281_t, pci_get_drvdata(dev), return -ENXIO); - cs4281_suspend(chip); - return 0; -} -static int snd_cs4281_resume(struct pci_dev *dev) -{ - cs4281_t *chip = snd_magic_cast(cs4281_t, pci_get_drvdata(dev), return -ENXIO); - cs4281_resume(chip); return 0; } - -/* callback */ -static int snd_cs4281_set_power_state(snd_card_t *card, unsigned int power_state) -{ - cs4281_t *chip = snd_magic_cast(cs4281_t, card->power_state_private_data, return -ENXIO); - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - cs4281_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - cs4281_suspend(chip); - break; - default: - return -EINVAL; - } - return 0; -} - #endif /* CONFIG_PM */ static struct pci_driver driver = { @@ -2152,23 +2121,12 @@ .id_table = snd_cs4281_ids, .probe = snd_cs4281_probe, .remove = __devexit_p(snd_cs4281_remove), -#ifdef CONFIG_PM - .suspend = snd_cs4281_suspend, - .resume = snd_cs4281_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_cs4281_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "CS4281 soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_cs4281_exit(void) @@ -2178,24 +2136,3 @@ module_init(alsa_card_cs4281_init) module_exit(alsa_card_cs4281_exit) - -#ifndef MODULE - -/* format is: snd-cs4281=enable,index,id */ - -static int __init alsa_card_cs4281_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-cs4281=", alsa_card_cs4281_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/cs46xx/cs46xx.c b/sound/pci/cs46xx/cs46xx.c --- a/sound/pci/cs46xx/cs46xx.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/cs46xx/cs46xx.c 2004-05-26 15:01:36 -07:00 @@ -29,9 +29,9 @@ #include <linux/pci.h> #include <linux/time.h> #include <linux/init.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/cs46xx.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -52,23 +52,24 @@ static int external_amp[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; static int thinkpad[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; static int mmap_valid[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for the CS46xx soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for the CS46xx soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable CS46xx soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(external_amp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(external_amp, bool, boot_devs, 0444); MODULE_PARM_DESC(external_amp, "Force to enable external amplifer."); MODULE_PARM_SYNTAX(external_amp, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -MODULE_PARM(thinkpad, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(thinkpad, bool, boot_devs, 0444); MODULE_PARM_DESC(thinkpad, "Force to enable Thinkpad's CLKRUN control."); MODULE_PARM_SYNTAX(thinkpad, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -MODULE_PARM(mmap_valid, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mmap_valid, bool, boot_devs, 0444); MODULE_PARM_DESC(mmap_valid, "Support OSS mmap."); MODULE_PARM_SYNTAX(mmap_valid, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); @@ -157,31 +158,14 @@ return err; } - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } -#ifdef CONFIG_PM -static int snd_card_cs46xx_suspend(struct pci_dev *pci, u32 state) -{ - cs46xx_t *chip = snd_magic_cast(cs46xx_t, pci_get_drvdata(pci), return -ENXIO); - snd_cs46xx_suspend(chip); - return 0; -} -static int snd_card_cs46xx_resume(struct pci_dev *pci) -{ - cs46xx_t *chip = snd_magic_cast(cs46xx_t, pci_get_drvdata(pci), return -ENXIO); - snd_cs46xx_resume(chip); - return 0; -} -#endif - static void __devexit snd_card_cs46xx_remove(struct pci_dev *pci) { - cs46xx_t *chip = snd_magic_cast(cs46xx_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -190,23 +174,12 @@ .id_table = snd_cs46xx_ids, .probe = snd_card_cs46xx_probe, .remove = __devexit_p(snd_card_cs46xx_remove), -#ifdef CONFIG_PM - .suspend = snd_card_cs46xx_suspend, - .resume = snd_card_cs46xx_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_cs46xx_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Sound Fusion CS46xx soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_cs46xx_exit(void) @@ -216,27 +189,3 @@ module_init(alsa_card_cs46xx_init) module_exit(alsa_card_cs46xx_exit) - -#ifndef MODULE - -/* format is: snd-cs46xx=enable,index,id,mmap_valid,external_amp,thinkpad */ - -static int __init alsa_card_cs46xx_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&mmap_valid[nr_dev]) == 2 && - get_option(&str,&external_amp[nr_dev]) == 2 && - get_option(&str,&thinkpad[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-cs46xx=", alsa_card_cs46xx_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c --- a/sound/pci/cs46xx/cs46xx_lib.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/cs46xx/cs46xx_lib.c 2004-05-26 15:01:35 -07:00 @@ -3784,17 +3784,19 @@ * APM support */ #ifdef CONFIG_PM -void snd_cs46xx_suspend(cs46xx_t *chip) +static int snd_cs46xx_suspend(snd_card_t *card, unsigned int state) { + cs46xx_t *chip = snd_magic_cast(cs46xx_t, card->pm_private_data, return -EINVAL); int amp_saved; - snd_card_t *card = chip->card; - - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; snd_pcm_suspend_all(chip->pcm); // chip->ac97_powerdown = snd_cs46xx_codec_read(chip, AC97_POWER_CONTROL); // chip->ac97_general_purpose = snd_cs46xx_codec_read(chip, BA0_AC97_GENERAL_PURPOSE); + + snd_ac97_suspend(chip->ac97[CS46XX_PRIMARY_CODEC_INDEX]); + if (chip->ac97[CS46XX_SECONDARY_CODEC_INDEX]) + snd_ac97_suspend(chip->ac97[CS46XX_SECONDARY_CODEC_INDEX]); + amp_saved = chip->amplifier; /* turn off amp */ chip->amplifier_ctrl(chip, -chip->amplifier); @@ -3803,16 +3805,14 @@ chip->active_ctrl(chip, -chip->amplifier); chip->amplifier = amp_saved; /* restore the status */ snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -void snd_cs46xx_resume(cs46xx_t *chip) +static int snd_cs46xx_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + cs46xx_t *chip = snd_magic_cast(cs46xx_t, card->pm_private_data, return -EINVAL); int amp_saved; - if (card->power_state == SNDRV_CTL_POWER_D0) - return; - pci_enable_device(chip->pci); amp_saved = chip->amplifier; chip->amplifier = 0; @@ -3832,6 +3832,8 @@ #endif snd_ac97_resume(chip->ac97[CS46XX_PRIMARY_CODEC_INDEX]); + if (chip->ac97[CS46XX_SECONDARY_CODEC_INDEX]) + snd_ac97_resume(chip->ac97[CS46XX_SECONDARY_CODEC_INDEX]); if (amp_saved) chip->amplifier_ctrl(chip, 1); /* turn amp on */ @@ -3839,25 +3841,6 @@ chip->active_ctrl(chip, -1); /* disable CLKRUN */ chip->amplifier = amp_saved; snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int snd_cs46xx_set_power_state(snd_card_t *card, unsigned int power_state) -{ - cs46xx_t *chip = snd_magic_cast(cs46xx_t, card->power_state_private_data, return -ENXIO); - - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_cs46xx_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_cs46xx_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } #endif /* CONFIG_PM */ @@ -4010,10 +3993,7 @@ snd_cs46xx_proc_init(card, chip); -#ifdef CONFIG_PM - card->set_power_state = snd_cs46xx_set_power_state; - card->power_state_private_data = chip; -#endif + snd_card_set_pm_callback(card, snd_cs46xx_suspend, snd_cs46xx_resume, chip); if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { snd_cs46xx_free(chip); diff -Nru a/sound/pci/emu10k1/emu10k1.c b/sound/pci/emu10k1/emu10k1.c --- a/sound/pci/emu10k1/emu10k1.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/emu10k1/emu10k1.c 2004-05-26 15:01:35 -07:00 @@ -23,9 +23,9 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/time.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/emu10k1.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -49,32 +49,33 @@ static int max_synth_voices[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 64}; static int max_buffer_size[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 128}; static int enable_ir[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for the EMU10K1 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for the EMU10K1 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable the EMU10K1 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(extin, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(extin, int, boot_devs, 0444); MODULE_PARM_DESC(extin, "Available external inputs for FX8010. Zero=default."); MODULE_PARM_SYNTAX(extin, SNDRV_ENABLED "allows:{{0,0x0ffff}},base:16"); -MODULE_PARM(extout, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(extout, int, boot_devs, 0444); MODULE_PARM_DESC(extout, "Available external outputs for FX8010. Zero=default."); MODULE_PARM_SYNTAX(extout, SNDRV_ENABLED "allows:{{0,0x0ffff}},base:16"); -MODULE_PARM(seq_ports, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(seq_ports, int, boot_devs, 0444); MODULE_PARM_DESC(seq_ports, "Allocated sequencer ports for internal synthesizer."); MODULE_PARM_SYNTAX(seq_ports, SNDRV_ENABLED "allows:{{0,32}}"); -MODULE_PARM(max_synth_voices, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(max_synth_voices, int, boot_devs, 0444); MODULE_PARM_DESC(max_synth_voices, "Maximum number of voices for WaveTable."); MODULE_PARM_SYNTAX(max_synth_voices, SNDRV_ENABLED); -MODULE_PARM(max_buffer_size, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(max_buffer_size, int, boot_devs, 0444); MODULE_PARM_DESC(max_buffer_size, "Maximum sample buffer size in MB."); MODULE_PARM_SYNTAX(max_buffer_size, SNDRV_ENABLED); -MODULE_PARM(enable_ir, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable_ir, bool, boot_devs, 0444); MODULE_PARM_DESC(enable_ir, "Enable IR."); MODULE_PARM_SYNTAX(enable_ir, SNDRV_ENABLE_DESC); @@ -211,15 +212,7 @@ static int __init alsa_card_emu10k1_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "EMU10K1/Audigy soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_emu10k1_exit(void) @@ -229,27 +222,3 @@ module_init(alsa_card_emu10k1_init) module_exit(alsa_card_emu10k1_exit) - -#ifndef MODULE - -/* format is: snd-emu10k1=enable,index,id, - seq_ports,max_synth_voices */ - -static int __init alsa_card_emu10k1_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&seq_ports[nr_dev]) == 2 && - get_option(&str,&max_synth_voices[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-emu10k1=", alsa_card_emu10k1_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c --- a/sound/pci/emu10k1/emu10k1_main.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/emu10k1/emu10k1_main.c 2004-05-26 15:01:36 -07:00 @@ -690,7 +690,7 @@ if (extin_mask == 0) extin_mask = 0x3fcf; if (extout_mask == 0) - extout_mask = 0x1fff; + extout_mask = 0x7fff; emu->fx8010.extin_mask = extin_mask; emu->fx8010.extout_mask = extout_mask; diff -Nru a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c --- a/sound/pci/emu10k1/emufx.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/emu10k1/emufx.c 2004-05-26 15:01:36 -07:00 @@ -120,8 +120,8 @@ /* 0x0a */ "PCM Capture Left", /* 0x0b */ "PCM Capture Right", /* 0x0c */ "MIC Capture", - /* 0x0d */ NULL, - /* 0x0e */ NULL, + /* 0x0d */ "AC97 Surround Left", + /* 0x0e */ "AC97 Surround Right", /* 0x0f */ NULL, /* 0x10 */ NULL, /* 0x11 */ "Analog Center", @@ -2113,22 +2113,26 @@ for (z = 0; z < 2; z++) OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_REAR_L + z), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 2 + z), C_00000000, C_00000000); - if (emu->fx8010.extout_mask & (1<<EXTOUT_CENTER)) { + if (emu->fx8010.extout_mask & ((1<<EXTOUT_AC97_REAR_L)|(1<<EXTOUT_AC97_REAR_R))) + for (z = 0; z < 2; z++) + OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_REAR_L + z), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 2 + z), C_00000000, C_00000000); + + if (emu->fx8010.extout_mask & (1<<EXTOUT_AC97_CENTER)) { #ifndef EMU10K1_CENTER_LFE_FROM_FRONT - OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_CENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4), C_00000000, C_00000000); + OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_CENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4), C_00000000, C_00000000); OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ACENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4), C_00000000, C_00000000); #else - OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_CENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 0), C_00000000, C_00000000); + OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_CENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 0), C_00000000, C_00000000); OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ACENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 0), C_00000000, C_00000000); #endif } - if (emu->fx8010.extout_mask & (1<<EXTOUT_LFE)) { + if (emu->fx8010.extout_mask & (1<<EXTOUT_AC97_LFE)) { #ifndef EMU10K1_CENTER_LFE_FROM_FRONT - OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_LFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 5), C_00000000, C_00000000); + OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_LFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 5), C_00000000, C_00000000); OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ALFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 5), C_00000000, C_00000000); #else - OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_LFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 1), C_00000000, C_00000000); + OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_LFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 1), C_00000000, C_00000000); OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ALFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 1), C_00000000, C_00000000); #endif } diff -Nru a/sound/pci/emu10k1/emumixer.c b/sound/pci/emu10k1/emumixer.c --- a/sound/pci/emu10k1/emumixer.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/emu10k1/emumixer.c 2004-05-26 15:01:36 -07:00 @@ -34,6 +34,8 @@ #define chip_t emu10k1_t +#define AC97_ID_STAC9758 0x83847658 + static int snd_emu10k1_spdif_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; @@ -531,6 +533,15 @@ snd_ac97_write(emu->ac97, AC97_REC_SEL, 0x0000); c = audigy_remove_ctls; } else { + /* + * Credits for cards based on STAC9758: + * James Courtier-Dutton <James@superbug.demon.co.uk> + * Voluspa <voluspa@comhem.se> + */ + if (emu->ac97->id == AC97_ID_STAC9758) { + emu->rear_ac97 = 1; + snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE|AC97SLOT_REAR_LEFT|AC97SLOT_REAR_RIGHT); + } /* remove unused AC97 controls */ snd_ac97_write(emu->ac97, AC97_SURROUND_MASTER, 0x0202); snd_ac97_write(emu->ac97, AC97_CENTER_LFE_MASTER, 0x0202); diff -Nru a/sound/pci/ens1370.c b/sound/pci/ens1370.c --- a/sound/pci/ens1370.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ens1370.c 2004-05-26 15:01:36 -07:00 @@ -27,6 +27,7 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> #include <sound/pcm.h> @@ -36,7 +37,6 @@ #else #include <sound/ak4531_codec.h> #endif -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/asoundef.h> @@ -86,23 +86,24 @@ static int joystick[SNDRV_CARDS]; #endif #endif +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Ensoniq AudioPCI soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Ensoniq AudioPCI soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Ensoniq AudioPCI soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef SUPPORT_JOYSTICK #ifdef CHIP1371 -MODULE_PARM(joystick_port, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick_port, int, boot_devs, 0444); MODULE_PARM_DESC(joystick_port, "Joystick port address."); MODULE_PARM_SYNTAX(joystick_port, SNDRV_ENABLED ",allows:{{0},{1},{0x200},{0x208},{0x210},{0x218}},dialog:list"); #else -MODULE_PARM(joystick, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick, bool, boot_devs, 0444); MODULE_PARM_DESC(joystick, "Enable joystick."); MODULE_PARM_SYNTAX(joystick, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); #endif @@ -2371,15 +2372,7 @@ static int __init alsa_card_ens137x_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Ensoniq AudioPCI soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_ens137x_exit(void) @@ -2389,36 +2382,3 @@ module_init(alsa_card_ens137x_init) module_exit(alsa_card_ens137x_exit) - -#ifndef MODULE - -/* format is: snd-ens1370=enable,index,id,joystick */ - -static int __init alsa_card_ens137x_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 -#ifdef SUPPORT_JOYSTICK -#ifdef CHIP1371 - && get_option(&str,&joystick_port[nr_dev]) == 2 -#else - && get_option(&str,&joystick[nr_dev]) == 2 -#endif -#endif - ); - nr_dev++; - return 1; -} - -#if defined(CHIP1370) -__setup("snd-ens1370=", alsa_card_ens137x_setup); -#elif defined(CHIP1371) -__setup("snd-ens1371=", alsa_card_ens137x_setup); -#endif - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/es1938.c b/sound/pci/es1938.c --- a/sound/pci/es1938.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/es1938.c 2004-05-26 15:01:36 -07:00 @@ -53,12 +53,12 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/opl3.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/io.h> @@ -84,14 +84,15 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ESS Solo-1 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ESS Solo-1 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ESS Solo-1 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); @@ -1700,15 +1701,7 @@ static int __init alsa_card_es1938_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "ESS Solo-1 soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_es1938_exit(void) @@ -1718,24 +1711,3 @@ module_init(alsa_card_es1938_init) module_exit(alsa_card_es1938_exit) - -#ifndef MODULE - -/* format is: snd-es1938=enable,index,id */ - -static int __init alsa_card_es1938_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-es1938=", alsa_card_es1938_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/es1968.c b/sound/pci/es1968.c --- a/sound/pci/es1968.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/es1968.c 2004-05-26 15:01:36 -07:00 @@ -102,11 +102,11 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/mpu401.h> #include <sound/ac97_codec.h> -#define SNDRV_GET_ID #include <sound/initval.h> #define chip_t es1968_t @@ -138,36 +138,37 @@ #ifdef SUPPORT_JOYSTICK static int joystick[SNDRV_CARDS]; #endif +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(total_bufsize, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(total_bufsize, int, boot_devs, 0444); MODULE_PARM_DESC(total_bufsize, "Total buffer size in kB."); MODULE_PARM_SYNTAX(total_bufsize, SNDRV_ENABLED ",allows:{{1,4096}},skill:advanced"); -MODULE_PARM(pcm_substreams_p, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_substreams_p, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_substreams_p, "PCM Playback substreams for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(pcm_substreams_p, SNDRV_ENABLED ",allows:{{1,8}}"); -MODULE_PARM(pcm_substreams_c, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_substreams_c, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_substreams_c, "PCM Capture substreams for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(pcm_substreams_c, SNDRV_ENABLED ",allows:{{0,8}}"); -MODULE_PARM(clock, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(clock, int, boot_devs, 0444); MODULE_PARM_DESC(clock, "Clock on " CARD_NAME " soundcard. (0 = auto-detect)"); MODULE_PARM_SYNTAX(clock, SNDRV_ENABLED); -MODULE_PARM(use_pm, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(use_pm, int, boot_devs, 0444); MODULE_PARM_DESC(use_pm, "Toggle power-management. (0 = off, 1 = on, 2 = auto)"); -MODULE_PARM_SYNTAX(use_pm, SNDRV_ENABLED ",allows:{{0,1,2}},skill:advanced"); -MODULE_PARM(enable_mpu, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_SYNTAX(use_pm, SNDRV_ENABLED ",allows:{{0,1,2}},default:2,skill:advanced"); +module_param_array(enable_mpu, int, boot_devs, 0444); MODULE_PARM_DESC(enable_mpu, "Enable MPU401. (0 = off, 1 = on, 2 = auto)"); -MODULE_PARM_SYNTAX(enable_mpu, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); +MODULE_PARM_SYNTAX(enable_mpu, SNDRV_ENABLED ",allows:{{0,2}},default:2"); #ifdef SUPPORT_JOYSTICK -MODULE_PARM(joystick, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick, bool, boot_devs, 0444); MODULE_PARM_DESC(joystick, "Enable joystick."); MODULE_PARM_SYNTAX(joystick, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); #endif @@ -2415,30 +2416,27 @@ /* * PM support */ -static void es1968_suspend(es1968_t *chip) +static int es1968_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + es1968_t *chip = snd_magic_cast(es1968_t, card->pm_private_data, return -EINVAL); if (! chip->do_pm) - return; - - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; + return 0; snd_pcm_suspend_all(chip->pcm); + snd_ac97_suspend(chip->ac97); snd_es1968_bob_stop(chip); + snd_es1968_set_acpi(chip, ACPI_D3); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void es1968_resume(es1968_t *chip) +static int es1968_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + es1968_t *chip = snd_magic_cast(es1968_t, card->pm_private_data, return -EINVAL); if (! chip->do_pm) - return; - - if (card->power_state == SNDRV_CTL_POWER_D0) - return; + return 0; /* restore all our config */ pci_enable_device(chip->pci); @@ -2460,47 +2458,17 @@ snd_es1968_bob_start(chip); snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int snd_es1968_suspend(struct pci_dev *dev, u32 state) -{ - es1968_t *chip = snd_magic_cast(es1968_t, pci_get_drvdata(dev), return -ENXIO); - es1968_suspend(chip); return 0; } -static int snd_es1968_resume(struct pci_dev *dev) -{ - es1968_t *chip = snd_magic_cast(es1968_t, pci_get_drvdata(dev), return -ENXIO); - es1968_resume(chip); - return 0; -} - -/* callback */ -static int snd_es1968_set_power_state(snd_card_t *card, unsigned int power_state) -{ - es1968_t *chip = snd_magic_cast(es1968_t, card->power_state_private_data, return -ENXIO); - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - es1968_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - es1968_suspend(chip); - break; - default: - return -EINVAL; - } - return 0; -} - #endif /* CONFIG_PM */ static int snd_es1968_free(es1968_t *chip) { - if (chip->res_io_port) - snd_es1968_reset(chip); + if (chip->res_io_port) { + synchronize_irq(chip->irq); + outw(1, chip->io_port + 0x04); /* clear WP interrupts */ + outw(0, chip->io_port + ESM_PORT_HOST_IRQ); /* disable IRQ */ + } #ifdef SUPPORT_JOYSTICK if (chip->res_joystick) { @@ -2534,6 +2502,7 @@ }; static struct ess_device_list pm_whitelist[] __devinitdata = { + { TYPE_MAESTRO2E, 0x0e11 }, /* Compaq Armada */ { TYPE_MAESTRO2E, 0x1028 }, { TYPE_MAESTRO2E, 0x103c }, { TYPE_MAESTRO2E, 0x1179 }, @@ -2636,12 +2605,8 @@ snd_es1968_chip_init(chip); -#ifdef CONFIG_PM - if (chip->do_pm) { - card->set_power_state = snd_es1968_set_power_state; - card->power_state_private_data = chip; - } -#endif + if (chip->do_pm) + snd_card_set_pm_callback(card, es1968_suspend, es1968_resume, chip); if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { snd_es1968_free(chip); @@ -2763,16 +2728,14 @@ snd_card_free(card); return err; } - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_es1968_remove(struct pci_dev *pci) { - es1968_t *chip = snd_magic_cast(es1968_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -2781,71 +2744,18 @@ .id_table = snd_es1968_ids, .probe = snd_es1968_probe, .remove = __devexit_p(snd_es1968_remove), -#ifdef CONFIG_PM - .suspend = snd_es1968_suspend, - .resume = snd_es1968_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_es1968_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "ESS Maestro soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_es1968_exit(void) { -#if 0 // do we really need this? - unregister_reboot_notifier(&snd_es1968_nb); -#endif pci_unregister_driver(&driver); } module_init(alsa_card_es1968_init) module_exit(alsa_card_es1968_exit) - -#ifndef MODULE - -/* format is: snd-es1968=enable,index,id, - total_bufsize, - pcm_substreams_p, - pcm_substreams_c, - clock, - use_pm, - enable_mpu, - joystick -*/ - -static int __init alsa_card_es1968_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&total_bufsize[nr_dev]) == 2 && - get_option(&str,&pcm_substreams_p[nr_dev]) == 2 && - get_option(&str,&pcm_substreams_c[nr_dev]) == 2 && - get_option(&str,&clock[nr_dev]) == 2 && - get_option(&str,&use_pm[nr_dev]) == 2 && - get_option(&str,&enable_mpu[nr_dev]) == 2 -#ifdef SUPPORT_JOYSTICK - && get_option(&str,&joystick[nr_dev]) == 2 -#endif - ); - nr_dev++; - return 1; -} - -__setup("snd-es1968=", alsa_card_es1968_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/fm801.c b/sound/pci/fm801.c --- a/sound/pci/fm801.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/fm801.c 2004-05-26 15:01:36 -07:00 @@ -25,12 +25,12 @@ #include <linux/interrupt.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/ac97_codec.h> #include <sound/mpu401.h> #include <sound/opl3.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/io.h> @@ -60,17 +60,18 @@ * High 16-bits are video (radio) device number + 1 */ static int tea575x_tuner[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0 }; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for the FM801 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for the FM801 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable FM801 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(tea575x_tuner, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(tea575x_tuner, bool, boot_devs, 0444); MODULE_PARM_DESC(tea575x_tuner, "Enable TEA575x tuner."); MODULE_PARM_SYNTAX(tea575x_tuner, SNDRV_ENABLE_DESC); @@ -1482,15 +1483,7 @@ static int __init alsa_card_fm801_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "ForteMedia FM801 soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_fm801_exit(void) @@ -1500,25 +1493,3 @@ module_init(alsa_card_fm801_init) module_exit(alsa_card_fm801_exit) - -#ifndef MODULE - -/* format is: snd-fm801=enable,index,id,tea575x_tuner */ - -static int __init alsa_card_fm801_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&tea575x_tuner[nr_dev])); - nr_dev++; - return 1; -} - -__setup("snd-fm801=", alsa_card_fm801_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/ice1712/Makefile b/sound/pci/ice1712/Makefile --- a/sound/pci/ice1712/Makefile 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ice1712/Makefile 2004-05-26 15:01:35 -07:00 @@ -5,7 +5,7 @@ snd-ice17xx-ak4xxx-objs := ak4xxx.o snd-ice1712-objs := ice1712.o delta.o hoontech.o ews.o -snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o prodigy.o +snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o # Toplevel Module Dependency obj-$(CONFIG_SND_ICE1712) += snd-ice1712.o snd-ice17xx-ak4xxx.o diff -Nru a/sound/pci/ice1712/amp.c b/sound/pci/ice1712/amp.c --- a/sound/pci/ice1712/amp.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ice1712/amp.c 2004-05-26 15:01:36 -07:00 @@ -54,10 +54,11 @@ /* entry point */ struct snd_ice1712_card_info snd_vt1724_amp_cards[] __devinitdata = { { - VT1724_SUBDEVICE_AUDIO2000, - "AMP Ltd AUDIO2000", - snd_vt1724_amp_init, - snd_vt1724_amp_add_controls, + .subvendor = VT1724_SUBDEVICE_AUDIO2000, + .name = "AMP Ltd AUDIO2000", + .model = "amp2000", + .chip_init = snd_vt1724_amp_init, + .build_controls = snd_vt1724_amp_add_controls, }, { } /* terminator */ }; diff -Nru a/sound/pci/ice1712/aureon.c b/sound/pci/ice1712/aureon.c --- a/sound/pci/ice1712/aureon.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ice1712/aureon.c 2004-05-26 15:01:35 -07:00 @@ -38,6 +38,25 @@ * the analog mixing but not easily controllable (it's not connected * directly from envy24ht chip). so let's leave it as it is. * + * + * Lowlevel functions for AudioTrak Prodigy 7.1 (and possibly 192) cards + * Copyright (c) 2003 Dimitromanolakis Apostolos <apostol@cs.utoronto.ca> + * + * version 0.82: Stable / not all features work yet (no communication with AC97 secondary) + * added 64x/128x oversampling switch (should be 64x only for 96khz) + * fixed some recording labels (still need to check the rest) + * recording is working probably thanks to correct wm8770 initialization + * + * version 0.5: Initial release: + * working: analog output, mixer, headphone amplifier switch + * not working: prety much everything else, at least i could verify that + * we have no digital output, no capture, pretty bad clicks and poops + * on mixer switch and other coll stuff. + * + * - Prodigy boards are equipped with AC97 STAC9744 chip , too. it's used to do + * the analog mixing but not easily controllable (it's not connected + * directly from envy24ht chip). so let's leave it as it is. + * */ #include <sound/driver.h> @@ -77,12 +96,18 @@ static void aureon_spi_write(ice1712_t *ice, unsigned int cs, unsigned int data, int bits) { unsigned int tmp; + unsigned int cscs; int i; tmp = snd_ice1712_gpio_read(ice); + if (ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71) + cscs = PRODIGY_CS8415_CS; + else + cscs = AUREON_CS8415_CS; + snd_ice1712_gpio_set_mask(ice, ~(AUREON_WM_RW|AUREON_WM_DATA|AUREON_WM_CLK| - AUREON_WM_CS|AUREON_CS8415_CS)); + AUREON_WM_CS|cscs)); tmp |= AUREON_WM_RW; tmp &= ~cs; snd_ice1712_gpio_write(ice, tmp); @@ -135,6 +160,47 @@ } /* + * DAC mute control + */ +static int wm_dac_mute_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; + uinfo->count = 1; + uinfo->value.integer.min = 0; + uinfo->value.integer.max = 1; + return 0; +} + +static int wm_dac_mute_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + unsigned short val; + + down(&ice->gpio_mutex); + val = wm_get(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_MUTE); + ucontrol->value.integer.value[0] = ~val>>4 & 0x1; + up(&ice->gpio_mutex); + return 0; +} + +static int wm_dac_mute_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + unsigned short new, old; + int change; + + snd_ice1712_save_gpio_status(ice); + old = wm_get(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_MUTE); + new = (~ucontrol->value.integer.value[0]<<4&0x10) | (old&~0x10); + change = (new != old); + if (change) + wm_put(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_MUTE, new); + snd_ice1712_restore_gpio_status(ice); + + return change; +} + +/* * DAC volume attenuation mixer control */ static int wm_dac_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) @@ -192,6 +258,47 @@ } /* + * ADC mute control + */ +static int wm_adc_mute_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; + uinfo->count = 1; + uinfo->value.integer.min = 0; + uinfo->value.integer.max = 1; + return 0; +} + +static int wm_adc_mute_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + unsigned short val; + + down(&ice->gpio_mutex); + val = wm_get(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_ADC_GAIN); + ucontrol->value.integer.value[0] = ~val>>5 & 0x1; + up(&ice->gpio_mutex); + return 0; +} + +static int wm_adc_mute_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + unsigned short new, old; + int change; + + snd_ice1712_save_gpio_status(ice); + old = wm_get(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_ADC_GAIN); + new = (~ucontrol->value.integer.value[0]<<5&0x20) | (old&~0x20); + change = (new != old); + if (change) + wm_put(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_ADC_GAIN, new); + snd_ice1712_restore_gpio_status(ice); + + return change; +} + +/* * ADC gain mixer control */ static int wm_adc_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) @@ -227,10 +334,10 @@ snd_ice1712_save_gpio_status(ice); idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_ADC_GAIN; nvol = ucontrol->value.integer.value[0]; - ovol = wm_get(ice, idx) & 0x1f; - change = (ovol != nvol); + ovol = wm_get(ice, idx); + change = ((ovol & 0x1f) != nvol); if (change) - wm_put(ice, idx, nvol); + wm_put(ice, idx, nvol | (ovol & ~0x1f)); snd_ice1712_restore_gpio_status(ice); return change; } @@ -241,18 +348,15 @@ static int wm_adc_mux_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) { static char *texts[] = { - "CD Left", - "CD Right", - "Aux Left", - "Aux Right", - "Line Left", - "Line Right", - "Mic Left", - "Mic Right", + "CD", //AIN1 + "Aux", //AIN2 + "Line", //AIN3 + "Mic", //AIN4 + "AC97" //AIN5 }; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; - uinfo->count = 2; - uinfo->value.enumerated.items = 8; + uinfo->count = 1; + uinfo->value.enumerated.items = 5; if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); @@ -291,6 +395,127 @@ } /* + * Headphone Amplifier + */ +static int aureon_set_headphone_amp(ice1712_t *ice, int enable) +{ + unsigned int tmp, tmp2; + + tmp2 = tmp = snd_ice1712_gpio_read(ice); + if (enable) + tmp |= AUREON_HP_SEL; + else + tmp &= ~ AUREON_HP_SEL; + if (tmp != tmp2) { + snd_ice1712_gpio_write(ice, tmp); + return 1; + } + return 0; +} + +static int aureon_get_headphone_amp(ice1712_t *ice) +{ + unsigned int tmp = snd_ice1712_gpio_read(ice); + + return ( tmp & AUREON_HP_SEL )!= 0; +} + +static int aureon_bool_info(snd_kcontrol_t *k, snd_ctl_elem_info_t *uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; + uinfo->count = 1; + uinfo->value.integer.min = 0; + uinfo->value.integer.max = 1; + return 0; +} + +static int aureon_hpamp_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + + ucontrol->value.integer.value[0] = aureon_get_headphone_amp(ice); + return 0; +} + + +static int aureon_hpamp_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + + return aureon_set_headphone_amp(ice,ucontrol->value.integer.value[0]); +} + +/* + * Deemphasis + */ +static int aureon_deemp_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + ucontrol->value.integer.value[0] = (wm_get(ice, WM_DAC_CTRL2) & 0xf) == 0xf; + return 0; +} + +static int aureon_deemp_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + int temp, temp2; + temp2 = temp = wm_get(ice, WM_DAC_CTRL2); + if (ucontrol->value.integer.value[0]) + temp |= 0xf; + else + temp &= ~0xf; + if (temp != temp2) { + wm_put(ice, WM_DAC_CTRL2, temp); + return 1; + } + return 0; +} + +/* + * ADC Oversampling + */ +static int aureon_oversampling_info(snd_kcontrol_t *k, snd_ctl_elem_info_t *uinfo) +{ + static char *texts[2] = { "128x", "64x" }; + + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 2; + + if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) + uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + + return 0; +} + +static int aureon_oversampling_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + ucontrol->value.enumerated.item[0] = (wm_get(ice, WM_MASTER) & 0x8) == 0x8; + return 0; +} + +static int aureon_oversampling_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +{ + int temp, temp2; + ice1712_t *ice = snd_kcontrol_chip(kcontrol); + + temp2 = temp = wm_get(ice, WM_MASTER); + + if (ucontrol->value.enumerated.item[0]) + temp |= 0x8; + else + temp &= ~0x8; + + if (temp != temp2) { + wm_put(ice, WM_MASTER, temp); + return 1; + } + return 0; +} + +/* * mixers */ @@ -315,6 +540,13 @@ static snd_kcontrol_new_t wm_controls[] __devinitdata = { { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Master Playback Switch", + .info = wm_dac_mute_info, + .get = wm_dac_mute_get, + .put = wm_dac_mute_put, + }, + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "Master Playback Volume", .info = wm_dac_vol_info, .get = wm_dac_vol_get, @@ -323,6 +555,15 @@ }, { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "ADC Switch", + .count = 2, + .info = wm_adc_mute_info, + .get = wm_adc_mute_get, + .put = wm_adc_mute_put, + + }, + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "ADC Volume", .count = 2, .info = wm_adc_vol_info, @@ -336,6 +577,27 @@ .get = wm_adc_mux_get, .put = wm_adc_mux_put, }, + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Headphone Amplifier Switch", + .info = aureon_bool_info, + .get = aureon_hpamp_get, + .put = aureon_hpamp_put + }, + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "DAC Deemphasis Switch", + .info = aureon_bool_info, + .get = aureon_deemp_get, + .put = aureon_deemp_put + }, + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "ADC Oversampling", + .info = aureon_oversampling_info, + .get = aureon_oversampling_get, + .put = aureon_oversampling_put + }, }; @@ -365,7 +627,7 @@ */ static int __devinit aureon_init(ice1712_t *ice) { - static unsigned short wm_inits[] = { + static unsigned short wm_inits_aureon[] = { /* These come first to reduce init pop noise */ 0x1b, 0x000, /* ADC Mux */ 0x1c, 0x009, /* Out Mux1 */ @@ -399,20 +661,66 @@ 0x15, 0x000, /* no deemphasis, no ZFLG */ 0x19, 0x000, /* -12dB ADC/L */ 0x1a, 0x000, /* -12dB ADC/R */ + (unsigned short)-1 + }; + static unsigned short wm_inits_prodigy[] = { + + /* These come first to reduce init pop noise */ + 0x1b, 0x000, /* ADC Mux */ + 0x1c, 0x009, /* Out Mux1 */ + 0x1d, 0x009, /* Out Mux2 */ + + 0x18, 0x000, /* All power-up */ + + 0x16, 0x022, /* I2S, normal polarity, 24bit, high-pass on */ + 0x17, 0x006, /* 128fs, slave mode */ + + 0x00, 0, /* DAC1 analog mute */ + 0x01, 0, /* DAC2 analog mute */ + 0x02, 0, /* DAC3 analog mute */ + 0x03, 0, /* DAC4 analog mute */ + 0x04, 0, /* DAC5 analog mute */ + 0x05, 0, /* DAC6 analog mute */ + 0x06, 0, /* DAC7 analog mute */ + 0x07, 0, /* DAC8 analog mute */ + 0x08, 0x100, /* master analog mute */ + + 0x09, 0x7f, /* DAC1 digital full */ + 0x0a, 0x7f, /* DAC2 digital full */ + 0x0b, 0x7f, /* DAC3 digital full */ + 0x0c, 0x7f, /* DAC4 digital full */ + 0x0d, 0x7f, /* DAC5 digital full */ + 0x0e, 0x7f, /* DAC6 digital full */ + 0x0f, 0x7f, /* DAC7 digital full */ + 0x10, 0x7f, /* DAC8 digital full */ + 0x11, 0x1FF, /* master digital full */ + + 0x12, 0x000, /* phase normal */ + 0x13, 0x090, /* unmute DAC L/R */ + 0x14, 0x000, /* all unmute */ + 0x15, 0x000, /* no deemphasis, no ZFLG */ + + 0x19, 0x000, /* -12dB ADC/L */ + 0x1a, 0x000, /* -12dB ADC/R */ + (unsigned short)-1 + }; static unsigned short cs_inits[] = { 0x0441, /* RUN */ 0x0100, /* no mute */ 0x0200, /* */ 0x0600, /* slave, 24bit */ + (unsigned short)-1 }; unsigned int tmp; - unsigned int i; + unsigned short *p; + unsigned int cscs; if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AUREON51_SKY) { ice->num_total_dacs = 6; ice->num_total_adcs = 6; } else { + /* aureon 7.1 and prodigy 7.1 */ ice->num_total_dacs = 8; ice->num_total_adcs = 8; } @@ -423,16 +731,22 @@ return -ENOMEM; ice->akm_codecs = 1; + if (ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71) + cscs = PRODIGY_CS8415_CS; + else + cscs = AUREON_CS8415_CS; + snd_ice1712_gpio_set_dir(ice, 0xbfffff); /* fix this for the time being */ /* reset the wm codec as the SPI mode */ snd_ice1712_save_gpio_status(ice); - snd_ice1712_gpio_set_mask(ice, ~(AUREON_WM_RESET|AUREON_WM_CS|AUREON_CS8415_CS)); + snd_ice1712_gpio_set_mask(ice, ~(AUREON_WM_RESET|AUREON_WM_CS| + cscs|AUREON_HP_SEL)); tmp = snd_ice1712_gpio_read(ice); tmp &= ~AUREON_WM_RESET; snd_ice1712_gpio_write(ice, tmp); udelay(1); - tmp |= AUREON_WM_CS | AUREON_CS8415_CS; + tmp |= AUREON_WM_CS | cscs; snd_ice1712_gpio_write(ice, tmp); udelay(1); tmp |= AUREON_WM_RESET; @@ -440,13 +754,19 @@ udelay(1); /* initialize WM8770 codec */ - for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2) - wm_put(ice, wm_inits[i], wm_inits[i+1]); + if (ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71) + p = wm_inits_prodigy; + else + p = wm_inits_aureon; + for (; *p != (unsigned short)-1; p += 2) + wm_put(ice, p[0], p[1]); /* initialize CS8415A codec */ - for (i = 0; i < ARRAY_SIZE(cs_inits); i++) - aureon_spi_write(ice, AUREON_CS8415_CS, - cs_inits[i] | 0x200000, 24); + for (p = cs_inits; *p != (unsigned short)-1; p++) + aureon_spi_write(ice, cscs, + *p | 0x200000, 24); + + aureon_set_headphone_amp(ice, 1); snd_ice1712_restore_gpio_status(ice); @@ -460,7 +780,7 @@ */ static unsigned char aureon51_eeprom[] __devinitdata = { - 0x12, /* SYSCONF: clock 512, mpu401, spdif-in/ADC, 3DACs */ + 0x2a, /* SYSCONF: clock 512, mpu401, spdif-in/ADC, 3DACs */ 0x80, /* ACLINK: I2S */ 0xf8, /* I2S: vol, 96k, 24bit, 192k */ 0xc3, /* SPDIF: out-en, out-int, spdif-in */ @@ -476,7 +796,23 @@ }; static unsigned char aureon71_eeprom[] __devinitdata = { - 0x13, /* SYSCONF: clock 512, mpu401, spdif-in/ADC, 4DACs */ + 0x2b, /* SYSCONF: clock 512, mpu401, spdif-in/ADC, 4DACs */ + 0x80, /* ACLINK: I2S */ + 0xf8, /* I2S: vol, 96k, 24bit, 192k */ + 0xc3, /* SPDIF: out-en, out-int, spdif-in */ + 0xff, /* GPIO_DIR */ + 0xff, /* GPIO_DIR1 */ + 0xbf, /* GPIO_DIR2 */ + 0x00, /* GPIO_MASK */ + 0x00, /* GPIO_MASK1 */ + 0x00, /* GPIO_MASK2 */ + 0x00, /* GPIO_STATE */ + 0x00, /* GPIO_STATE1 */ + 0x00, /* GPIO_STATE2 */ +}; + +static unsigned char prodigy71_eeprom[] __devinitdata = { + 0x2b, /* SYSCONF: clock 512, mpu401, spdif-in/ADC, 4DACs */ 0x80, /* ACLINK: I2S */ 0xf8, /* I2S: vol, 96k, 24bit, 192k */ 0xc3, /* SPDIF: out-en, out-int, spdif-in */ @@ -496,6 +832,7 @@ { .subvendor = VT1724_SUBDEVICE_AUREON51_SKY, .name = "Terratec Aureon 5.1-Sky", + .model = "aureon51", .chip_init = aureon_init, .build_controls = aureon_add_controls, .eeprom_size = sizeof(aureon51_eeprom), @@ -504,10 +841,29 @@ { .subvendor = VT1724_SUBDEVICE_AUREON71_SPACE, .name = "Terratec Aureon 7.1-Space", + .model = "aureon71", .chip_init = aureon_init, .build_controls = aureon_add_controls, .eeprom_size = sizeof(aureon71_eeprom), .eeprom_data = aureon71_eeprom, + }, + { + .subvendor = VT1724_SUBDEVICE_AUREON71_UNIVERSE, + .name = "Terratec Aureon 7.1-Universe", + /* model not needed - identical with 7.1-Space */ + .chip_init = aureon_init, + .build_controls = aureon_add_controls, + .eeprom_size = sizeof(aureon71_eeprom), + .eeprom_data = aureon71_eeprom, + }, + { + .subvendor = VT1724_SUBDEVICE_PRODIGY71, + .name = "Audiotrak Prodigy 7.1", + .model = "prodigy71", + .chip_init = aureon_init, + .build_controls = aureon_add_controls, + .eeprom_size = sizeof(prodigy71_eeprom), + .eeprom_data = prodigy71_eeprom, }, { } /* terminator */ }; diff -Nru a/sound/pci/ice1712/aureon.h b/sound/pci/ice1712/aureon.h --- a/sound/pci/ice1712/aureon.h 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ice1712/aureon.h 2004-05-26 15:01:36 -07:00 @@ -25,10 +25,14 @@ */ #define AUREON_DEVICE_DESC "{Terratec,Aureon 5.1 Sky},"\ - "{Terratec,Aureon 7.1 Space}," + "{Terratec,Aureon 7.1 Space},"\ + "{Terratec,Aureon 7.1 Universe}," \ + "{AudioTrak,Prodigy 7.1}," #define VT1724_SUBDEVICE_AUREON51_SKY 0x3b154711 /* Aureon 5.1 Sky */ #define VT1724_SUBDEVICE_AUREON71_SPACE 0x3b154511 /* Aureon 7.1 Space */ +#define VT1724_SUBDEVICE_AUREON71_UNIVERSE 0x3b155311 /* Aureon 7.1 Universe */ +#define VT1724_SUBDEVICE_PRODIGY71 0x33495345 /* PRODIGY 7.1 */ extern struct snd_ice1712_card_info snd_vt1724_aureon_cards[]; @@ -43,5 +47,9 @@ #define AUREON_DIGITAL_SEL1 (1 << 15) #define AUREON_HP_SEL (1 << 14) #define AUREON_WM_CS (1 << 12) + +/* Prodigy has different pin assignment for chip select */ +#define PRODIGY_CS8415_CS (1 << 23) +#define PRODIGY_CS8415_CDTO (1 << 22) #endif /* __SOUND_AUREON_H */ diff -Nru a/sound/pci/ice1712/delta.c b/sound/pci/ice1712/delta.c --- a/sound/pci/ice1712/delta.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ice1712/delta.c 2004-05-26 15:01:35 -07:00 @@ -692,56 +692,64 @@ /* entry point */ struct snd_ice1712_card_info snd_ice1712_delta_cards[] __devinitdata = { { - ICE1712_SUBDEVICE_DELTA1010, - "M Audio Delta 1010", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - }, - { - ICE1712_SUBDEVICE_DELTADIO2496, - "M Audio Delta DiO 2496", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - 1, /* NO MPU */ - }, - { - ICE1712_SUBDEVICE_DELTA66, - "M Audio Delta 66", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - 1, /* NO MPU */ - }, - { - ICE1712_SUBDEVICE_DELTA44, - "M Audio Delta 44", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - 1, /* NO MPU */ - }, - { - ICE1712_SUBDEVICE_AUDIOPHILE, - "M Audio Audiophile 24/96", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - }, - { - ICE1712_SUBDEVICE_DELTA410, - "M Audio Delta 410", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - }, - { - ICE1712_SUBDEVICE_DELTA1010LT, - "M Audio Delta 1010LT", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - }, - { - ICE1712_SUBDEVICE_VX442, - "Digigram VX442", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - 1, /* NO MPU */ + .subvendor = ICE1712_SUBDEVICE_DELTA1010, + .name = "M Audio Delta 1010", + .model = "delta1010", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTADIO2496, + .name = "M Audio Delta DiO 2496", + .model = "dio2496", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + .no_mpu401 = 1, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTA66, + .name = "M Audio Delta 66", + .model = "delta66", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + .no_mpu401 = 1, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTA44, + .name = "M Audio Delta 44", + .model = "delta44", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + .no_mpu401 = 1, + }, + { + .subvendor = ICE1712_SUBDEVICE_AUDIOPHILE, + .name = "M Audio Audiophile 24/96", + .model = "audiophile", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTA410, + .name = "M Audio Delta 410", + .model = "delta410", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTA1010LT, + .name = "M Audio Delta 1010LT", + .model = "delta1010lt", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + }, + { + .subvendor = ICE1712_SUBDEVICE_VX442, + .name = "Digigram VX442", + .model = "vx442", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + .no_mpu401 = 1, }, { } /* terminator */ }; diff -Nru a/sound/pci/ice1712/envy24ht.h b/sound/pci/ice1712/envy24ht.h --- a/sound/pci/ice1712/envy24ht.h 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ice1712/envy24ht.h 2004-05-26 15:01:36 -07:00 @@ -209,4 +209,7 @@ #define VT1724_MT_PDMA1_COUNT 0x76 /* word */ +unsigned char snd_vt1724_read_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr); +void snd_vt1724_write_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr, unsigned char data); + #endif /* __SOUND_VT1724_H */ diff -Nru a/sound/pci/ice1712/ews.c b/sound/pci/ice1712/ews.c --- a/sound/pci/ice1712/ews.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ice1712/ews.c 2004-05-26 15:01:35 -07:00 @@ -971,34 +971,39 @@ /* entry point */ struct snd_ice1712_card_info snd_ice1712_ews_cards[] __devinitdata = { { - ICE1712_SUBDEVICE_EWX2496, - "TerraTec EWX24/96", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_EWX2496, + .name = "TerraTec EWX24/96", + .model = "ewx2496", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { - ICE1712_SUBDEVICE_EWS88MT, - "TerraTec EWS88MT", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_EWS88MT, + .name = "TerraTec EWS88MT", + .model = "ews88mt", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { - ICE1712_SUBDEVICE_EWS88MT_NEW, - "TerraTec EWS88MT", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_EWS88MT_NEW, + .name = "TerraTec EWS88MT", + .model = "ews88mt_new", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { - ICE1712_SUBDEVICE_EWS88D, - "TerraTec EWS88D", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_EWS88D, + .name = "TerraTec EWS88D", + .model = "ews88d", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { - ICE1712_SUBDEVICE_DMX6FIRE, - "TerraTec DMX6Fire", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_DMX6FIRE, + .name = "TerraTec DMX6Fire", + .model = "dmx6fire", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { } /* terminator */ }; diff -Nru a/sound/pci/ice1712/hoontech.c b/sound/pci/ice1712/hoontech.c --- a/sound/pci/ice1712/hoontech.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ice1712/hoontech.c 2004-05-26 15:01:36 -07:00 @@ -83,6 +83,7 @@ ICE1712_STDSP24_2_CHN4(ice->hoontech_boxbits, 0); ICE1712_STDSP24_2_MIDI1(ice->hoontech_boxbits, activate); snd_ice1712_stdsp24_gpio_write(ice, ice->hoontech_boxbits[2]); + snd_ice1712_stdsp24_gpio_write(ice, ice->hoontech_boxbits[3]); ICE1712_STDSP24_1_CHN1(ice->hoontech_boxbits, 1); ICE1712_STDSP24_1_CHN2(ice->hoontech_boxbits, 1); @@ -117,7 +118,7 @@ up(&ice->gpio_mutex); } -static void __devinit snd_ice1712_stdsp24_box_midi(ice1712_t *ice, int box, int master, int slave) +static void __devinit snd_ice1712_stdsp24_box_midi(ice1712_t *ice, int box, int master) { down(&ice->gpio_mutex); @@ -128,23 +129,26 @@ ICE1712_STDSP24_2_MIDIIN(ice->hoontech_boxbits, 1); ICE1712_STDSP24_2_MIDI1(ice->hoontech_boxbits, master); snd_ice1712_stdsp24_gpio_write(ice, ice->hoontech_boxbits[2]); + snd_ice1712_stdsp24_gpio_write(ice, ice->hoontech_boxbits[3]); udelay(100); ICE1712_STDSP24_2_MIDIIN(ice->hoontech_boxbits, 0); snd_ice1712_stdsp24_gpio_write(ice, ice->hoontech_boxbits[2]); - udelay(100); + mdelay(10); ICE1712_STDSP24_2_MIDIIN(ice->hoontech_boxbits, 1); snd_ice1712_stdsp24_gpio_write(ice, ice->hoontech_boxbits[2]); - udelay(100); + up(&ice->gpio_mutex); +} - /* MIDI2 is direct */ - ICE1712_STDSP24_3_MIDI2(ice->hoontech_boxbits, slave); +static void __devinit snd_ice1712_stdsp24_midi2(ice1712_t *ice, int activate) +{ + down(&ice->gpio_mutex); + ICE1712_STDSP24_3_MIDI2(ice->hoontech_boxbits, activate); snd_ice1712_stdsp24_gpio_write(ice, ice->hoontech_boxbits[3]); - up(&ice->gpio_mutex); } @@ -204,25 +208,118 @@ for (chn = 0; chn < 4; chn++) snd_ice1712_stdsp24_box_channel(ice, box, chn, (ice->hoontech_boxconfig[box] & (1 << chn)) ? 1 : 0); snd_ice1712_stdsp24_box_midi(ice, box, - (ice->hoontech_boxconfig[box] & ICE1712_STDSP24_BOX_MIDI1) ? 1 : 0, - (ice->hoontech_boxconfig[box] & ICE1712_STDSP24_BOX_MIDI2) ? 1 : 0); + (ice->hoontech_boxconfig[box] & ICE1712_STDSP24_BOX_MIDI1) ? 1 : 0); + if (ice->hoontech_boxconfig[box] & ICE1712_STDSP24_BOX_MIDI2) + snd_ice1712_stdsp24_midi2(ice, 1); } return 0; } +/* + * AK4524 access + */ + +/* start callback for STDSP24 with modified hardware */ +static void stdsp24_ak4524_lock(akm4xxx_t *ak, int chip) +{ + ice1712_t *ice = ak->private_data[0]; + unsigned char tmp; + snd_ice1712_save_gpio_status(ice); + tmp = ICE1712_STDSP24_SERIAL_DATA | + ICE1712_STDSP24_SERIAL_CLOCK | + ICE1712_STDSP24_AK4524_CS; + snd_ice1712_write(ice, ICE1712_IREG_GPIO_DIRECTION, + ice->gpio.direction | tmp); + snd_ice1712_write(ice, ICE1712_IREG_GPIO_WRITE_MASK, ~tmp); +} + +static int __devinit snd_ice1712_value_init(ice1712_t *ice) +{ + /* Hoontech STDSP24 with modified hardware */ + static akm4xxx_t akm_stdsp24_mv __devinitdata = { + .num_adcs = 2, + .num_dacs = 2, + .type = SND_AK4524, + .ops = { + .lock = stdsp24_ak4524_lock + } + }; + + static struct snd_ak4xxx_private akm_stdsp24_mv_priv __devinitdata = { + .caddr = 2, + .cif = 1, /* CIF high */ + .data_mask = ICE1712_STDSP24_SERIAL_DATA, + .clk_mask = ICE1712_STDSP24_SERIAL_CLOCK, + .cs_mask = ICE1712_STDSP24_AK4524_CS, + .cs_addr = ICE1712_STDSP24_AK4524_CS, + .cs_none = 0, + .add_flags = 0, + }; + + int err; + akm4xxx_t *ak; + + /* set the analog DACs */ + ice->num_total_dacs = 2; + + /* set the analog ADCs */ + ice->num_total_adcs = 2; + + /* analog section */ + ak = ice->akm = kmalloc(sizeof(akm4xxx_t), GFP_KERNEL); + if (! ak) + return -ENOMEM; + ice->akm_codecs = 1; + + err = snd_ice1712_akm4xxx_init(ak, &akm_stdsp24_mv, &akm_stdsp24_mv_priv, ice); + if (err < 0) + return err; + + /* ak4524 controls */ + err = snd_ice1712_akm4xxx_build_controls(ice); + if (err < 0) + return err; + + return 0; +} + +static int __devinit snd_ice1712_ez8_init(ice1712_t *ice) +{ + ice->gpio.write_mask = ice->eeprom.gpiomask; + ice->gpio.direction = ice->eeprom.gpiodir; + snd_ice1712_write(ice, ICE1712_IREG_GPIO_WRITE_MASK, ice->eeprom.gpiomask); + snd_ice1712_write(ice, ICE1712_IREG_GPIO_DIRECTION, ice->eeprom.gpiodir); + snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, ice->eeprom.gpiostate); + return 0; +} + /* entry point */ struct snd_ice1712_card_info snd_ice1712_hoontech_cards[] __devinitdata = { { - ICE1712_SUBDEVICE_STDSP24, - "Hoontech SoundTrack Audio DSP24", - snd_ice1712_hoontech_init, + .subvendor = ICE1712_SUBDEVICE_STDSP24, + .name = "Hoontech SoundTrack Audio DSP24", + .model = "dsp24", + .chip_init = snd_ice1712_hoontech_init, + }, + { + .subvendor = ICE1712_SUBDEVICE_STDSP24_VALUE, /* a dummy id */ + .name = "Hoontech SoundTrack Audio DSP24 Value", + .model = "dsp24_value", + .chip_init = snd_ice1712_value_init, + }, + { + .subvendor = ICE1712_SUBDEVICE_STDSP24_MEDIA7_1, + .name = "Hoontech STA DSP24 Media 7.1", + .model = "dsp24_71", + .chip_init = snd_ice1712_hoontech_init, }, { - ICE1712_SUBDEVICE_STDSP24_MEDIA7_1, - "Hoontech STA DSP24 Media 7.1", - snd_ice1712_hoontech_init, + .subvendor = ICE1712_SUBDEVICE_EVENT_EZ8, /* a dummy id */ + .name = "Event Electronics EZ8", + .model = "ez8", + .chip_init = snd_ice1712_ez8_init, }, { } /* terminator */ }; diff -Nru a/sound/pci/ice1712/hoontech.h b/sound/pci/ice1712/hoontech.h --- a/sound/pci/ice1712/hoontech.h 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ice1712/hoontech.h 2004-05-26 15:01:36 -07:00 @@ -25,12 +25,15 @@ */ #define HOONTECH_DEVICE_DESC \ - "{Hoontech SoundTrack DSP 24}," \ - "{Hoontech SoundTrack DSP 24 Value}," \ - "{Hoontech SoundTrack DSP 24 Media 7.1}," \ + "{Hoontech,SoundTrack DSP 24}," \ + "{Hoontech,SoundTrack DSP 24 Value}," \ + "{Hoontech,SoundTrack DSP 24 Media 7.1}," \ + "{Event Electronics,EZ8}," #define ICE1712_SUBDEVICE_STDSP24 0x12141217 /* Hoontech SoundTrack Audio DSP 24 */ +#define ICE1712_SUBDEVICE_STDSP24_VALUE 0x00010010 /* A dummy id for Hoontech SoundTrack Audio DSP 24 Value */ #define ICE1712_SUBDEVICE_STDSP24_MEDIA7_1 0x16141217 /* Hoontech ST Audio DSP24 Media 7.1 */ +#define ICE1712_SUBDEVICE_EVENT_EZ8 0x00010001 /* A dummy id for EZ8 */ extern struct snd_ice1712_card_info snd_ice1712_hoontech_cards[]; @@ -64,5 +67,11 @@ #define ICE1712_STDSP24_BOX_CHN4 (1<<3) /* input channel 4 */ #define ICE1712_STDSP24_BOX_MIDI1 (1<<8) #define ICE1712_STDSP24_BOX_MIDI2 (1<<9) + +/* Hoontech SoundTrack Audio DSP 24 Value definitions for modified hardware */ + +#define ICE1712_STDSP24_AK4524_CS 0x03 /* AK4524 chip select; low = active */ +#define ICE1712_STDSP24_SERIAL_DATA 0x0c /* ak4524 data */ +#define ICE1712_STDSP24_SERIAL_CLOCK 0x30 /* ak4524 clock */ #endif /* __SOUND_HOONTECH_H */ diff -Nru a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c --- a/sound/pci/ice1712/ice1712.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ice1712/ice1712.c 2004-05-26 15:01:35 -07:00 @@ -41,6 +41,9 @@ * 2003.02.20 Taksahi Iwai <tiwai@suse.de> * Split vt1724 part to an independent driver. * The GPIO is accessed through the callback functions now. + * + * 2004.03.31 Doug McLain <nostar@comcast.net> + * Added support for Event Electronics EZ8 card to hoontech.c. */ @@ -51,11 +54,11 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/cs8427.h> #include <sound/info.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/asoundef.h> @@ -81,24 +84,28 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ -static int omni[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 0}; /* Delta44 & 66 Omni I/O support */ +static char *model[SNDRV_CARDS]; +static int omni[SNDRV_CARDS]; /* Delta44 & 66 Omni I/O support */ static int cs8427_timeout[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 500}; /* CS8427 S/PDIF transciever reset timeout value in msec */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ICE1712 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ICE1712 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ICE1712 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(omni, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(omni, bool, boot_devs, 0444); MODULE_PARM_DESC(omni, "Enable Midiman M-Audio Delta Omni I/O support."); MODULE_PARM_SYNTAX(omni, SNDRV_ENABLED "," SNDRV_ENABLE_DESC); -MODULE_PARM(cs8427_timeout, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(cs8427_timeout, int, boot_devs, 0444); MODULE_PARM_DESC(cs8427_timeout, "Define reset timeout for cs8427 chip in msec resolution."); MODULE_PARM_SYNTAX(cs8427_timeout, SNDRV_ENABLED ", allows:{{1,1000}},default=500,skill:advanced"); +module_param_array(model, charp, boot_devs, 0444); +MODULE_PARM_DESC(model, "Use the given board model."); #ifndef PCI_VENDOR_ID_ICE #define PCI_VENDOR_ID_ICE 0x1412 @@ -1898,6 +1905,74 @@ .put = snd_ice1712_pro_internal_clock_put }; +static int snd_ice1712_pro_internal_clock_default_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + static char *texts[] = { + "8000", /* 0: 6 */ + "9600", /* 1: 3 */ + "11025", /* 2: 10 */ + "12000", /* 3: 2 */ + "16000", /* 4: 5 */ + "22050", /* 5: 9 */ + "24000", /* 6: 1 */ + "32000", /* 7: 4 */ + "44100", /* 8: 8 */ + "48000", /* 9: 0 */ + "64000", /* 10: 15 */ + "88200", /* 11: 11 */ + "96000", /* 12: 7 */ + // "IEC958 Input", /* 13: -- */ + }; + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 13; + if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) + uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_ice1712_pro_internal_clock_default_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + int val; + static unsigned int xrate[13] = { + 8000, 9600, 11025, 12000, 1600, 22050, 24000, + 32000, 44100, 48000, 64000, 88200, 96000 + }; + + for (val = 0; val < 13; val++) { + if (xrate[val] == PRO_RATE_DEFAULT) + break; + } + + ucontrol->value.enumerated.item[0] = val; + return 0; +} + +static int snd_ice1712_pro_internal_clock_default_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + static unsigned int xrate[13] = { + 8000, 9600, 11025, 12000, 1600, 22050, 24000, + 32000, 44100, 48000, 64000, 88200, 96000 + }; + unsigned char oval; + int change = 0; + + oval = PRO_RATE_DEFAULT; + PRO_RATE_DEFAULT = xrate[ucontrol->value.integer.value[0] % 13]; + change = PRO_RATE_DEFAULT != oval; + + return change; +} + +static snd_kcontrol_new_t snd_ice1712_pro_internal_clock_default __devinitdata = { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Multi Track Internal Clock Default", + .info = snd_ice1712_pro_internal_clock_default_info, + .get = snd_ice1712_pro_internal_clock_default_get, + .put = snd_ice1712_pro_internal_clock_default_put +}; + static int snd_ice1712_pro_rate_locking_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; @@ -2213,6 +2288,16 @@ * */ +/* + * list of available boards + */ +static struct snd_ice1712_card_info *card_tables[] __devinitdata = { + snd_ice1712_hoontech_cards, + snd_ice1712_delta_cards, + snd_ice1712_ews_cards, + 0, +}; + static unsigned char __devinit snd_ice1712_read_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr) @@ -2225,7 +2310,7 @@ return inb(ICEREG(ice, I2C_DATA)); } -static int __devinit snd_ice1712_read_eeprom(ice1712_t *ice) +static int __devinit snd_ice1712_read_eeprom(ice1712_t *ice, const char *modelname) { int dev = 0xa0; /* EEPROM device address */ unsigned int i, size; @@ -2234,10 +2319,23 @@ snd_printk("ICE1712 has not detected EEPROM\n"); return -EIO; } - ice->eeprom.subvendor = (snd_ice1712_read_i2c(ice, dev, 0x00) << 0) | - (snd_ice1712_read_i2c(ice, dev, 0x01) << 8) | - (snd_ice1712_read_i2c(ice, dev, 0x02) << 16) | - (snd_ice1712_read_i2c(ice, dev, 0x03) << 24); + if (modelname && *modelname) { + struct snd_ice1712_card_info **tbl, *c; + for (tbl = card_tables; *tbl; tbl++) { + for (c = *tbl; c->subvendor; c++) { + if (c->model && !strcmp(modelname, c->model)) { + /* use the given subvendor */ + printk(KERN_INFO "ice1712: Using board model %s\n", c->name); + ice->eeprom.subvendor = c->subvendor; + break; + } + } + } + } else + ice->eeprom.subvendor = (snd_ice1712_read_i2c(ice, dev, 0x00) << 0) | + (snd_ice1712_read_i2c(ice, dev, 0x01) << 8) | + (snd_ice1712_read_i2c(ice, dev, 0x02) << 16) | + (snd_ice1712_read_i2c(ice, dev, 0x03) << 24); ice->eeprom.size = snd_ice1712_read_i2c(ice, dev, 0x04); if (ice->eeprom.size < 6) ice->eeprom.size = 32; /* FIXME: any cards without the correct size? */ @@ -2335,6 +2433,9 @@ err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_pro_internal_clock, ice)); if (err < 0) return err; + err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_pro_internal_clock_default, ice)); + if (err < 0) + return err; err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_pro_rate_locking, ice)); if (err < 0) @@ -2407,6 +2508,7 @@ static int __devinit snd_ice1712_create(snd_card_t * card, struct pci_dev *pci, + const char *modelname, int omni, int cs8427_timeout, ice1712_t ** r_ice1712) @@ -2491,7 +2593,7 @@ ice->irq = pci->irq; - if (snd_ice1712_read_eeprom(ice) < 0) { + if (snd_ice1712_read_eeprom(ice, modelname) < 0) { snd_ice1712_free(ice); return -EIO; } @@ -2526,14 +2628,6 @@ static struct snd_ice1712_card_info no_matched __devinitdata; -static struct snd_ice1712_card_info *card_tables[] __devinitdata = { - snd_ice1712_hoontech_cards, - snd_ice1712_delta_cards, - snd_ice1712_ews_cards, - 0, -}; - - static int __devinit snd_ice1712_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) { @@ -2557,7 +2651,7 @@ strcpy(card->driver, "ICE1712"); strcpy(card->shortname, "ICEnsemble ICE1712"); - if ((err = snd_ice1712_create(card, pci, omni[dev], cs8427_timeout[dev], &ice)) < 0) { + if ((err = snd_ice1712_create(card, pci, model[dev], omni[dev], cs8427_timeout[dev], &ice)) < 0) { snd_card_free(card); return err; } @@ -2566,6 +2660,8 @@ for (c = *tbl; c->subvendor; c++) { if (c->subvendor == ice->eeprom.subvendor) { strcpy(card->shortname, c->name); + if (c->driver) /* specific driver? */ + strcpy(card->driver, c->driver); if (c->chip_init) { if ((err = c->chip_init(ice)) < 0) { snd_card_free(card); @@ -2659,15 +2755,7 @@ static int __init alsa_card_ice1712_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "ICE1712 soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_ice1712_exit(void) @@ -2677,24 +2765,3 @@ module_init(alsa_card_ice1712_init) module_exit(alsa_card_ice1712_exit) - -#ifndef MODULE - -/* format is: snd-ice1712=enable,index,id */ - -static int __init alsa_card_ice1712_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-ice1712=", alsa_card_ice1712_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/ice1712/ice1712.h b/sound/pci/ice1712/ice1712.h --- a/sound/pci/ice1712/ice1712.h 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ice1712/ice1712.h 2004-05-26 15:01:35 -07:00 @@ -329,6 +329,10 @@ unsigned int pro_volumes[20]; unsigned int omni: 1; /* Delta Omni I/O */ unsigned int vt1724: 1; + unsigned int vt1720: 1; + unsigned int has_spdif: 1; /* VT1720/4 - has SPDIF I/O */ + unsigned int force_pdma4: 1; /* VT1720/4 - PDMA4 as non-spdif */ + unsigned int force_rdma1: 1; /* VT1720/4 - RDMA1 as non-spdif */ unsigned int num_total_dacs; /* total DACs */ unsigned int num_total_adcs; /* total ADCs */ unsigned char hoontech_boxbits[4]; @@ -460,6 +464,8 @@ struct snd_ice1712_card_info { unsigned int subvendor; char *name; + char *model; + char *driver; int (*chip_init)(ice1712_t *); int (*build_controls)(ice1712_t *); int no_mpu401: 1; diff -Nru a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c --- a/sound/pci/ice1712/ice1724.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ice1712/ice1724.c 2004-05-26 15:01:35 -07:00 @@ -1,5 +1,6 @@ /* * ALSA driver for VT1724 ICEnsemble ICE1724 / VIA VT1724 (Envy24HT) + * VIA VT1720 (Envy24PT) * * Copyright (c) 2000 Jaroslav Kysela <perex@suse.cz> * 2002 James Stafford <jstafford@ampltd.com> @@ -28,10 +29,10 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/info.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/asoundef.h> @@ -43,35 +44,39 @@ #include "amp.h" #include "revo.h" #include "aureon.h" -#include "prodigy.h" MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); -MODULE_DESCRIPTION("ICEnsemble ICE1724 (Envy24HT)"); +MODULE_DESCRIPTION("VIA ICEnsemble ICE1724/1720 (Envy24HT/PT)"); MODULE_LICENSE("GPL"); MODULE_CLASSES("{sound}"); MODULE_DEVICES("{" REVO_DEVICE_DESC AMP_AUDIO2000_DEVICE_DESC AUREON_DEVICE_DESC - PRODIGY_DEVICE_DESC + "{VIA,VT1720}," "{VIA,VT1724}," "{ICEnsemble,Generic ICE1724}," - "{ICEnsemble,Generic Envy24HT}}"); + "{ICEnsemble,Generic Envy24HT}" + "{ICEnsemble,Generic Envy24PT}}"); static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static char *model[SNDRV_CARDS]; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for ICE1724 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for ICE1724 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ICE1724 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); +module_param_array(model, charp, boot_devs, 0444); +MODULE_PARM_DESC(model, "Use the given board model."); #ifndef PCI_VENDOR_ID_ICE #define PCI_VENDOR_ID_ICE 0x1412 @@ -80,6 +85,7 @@ #define PCI_DEVICE_ID_VT1724 0x1724 #endif +/* Both VT1720 and VT1724 have the same PCI IDs */ static struct pci_device_id snd_vt1724_ids[] = { { PCI_VENDOR_ID_ICE, PCI_DEVICE_ID_VT1724, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, { 0, } @@ -228,6 +234,17 @@ status &= ~(VT1724_IRQ_MPU_RX|VT1724_IRQ_MPU_TX); } if (status & VT1724_IRQ_MTPCM) { + /* + * Multi-track PCM + * PCM assignment are: + * Playback DMA0 (M/C) = playback_pro_substream + * Playback DMA1 = playback_con_substream_ds[0] + * Playback DMA2 = playback_con_substream_ds[1] + * Playback DMA3 = playback_con_substream_ds[2] + * Playback DMA4 (SPDIF) = playback_con_substream + * Record DMA0 = capture_pro_substream + * Record DMA1 = capture_con_substream + */ unsigned char mtstat = inb(ICEMT1724(ice, IRQ)); if (mtstat & VT1724_MULTI_PDMA0) { if (ice->playback_pro_substream) @@ -288,6 +305,12 @@ .mask = 0, }; +static snd_pcm_hw_constraint_list_t hw_constraints_rates_48 = { + .count = ARRAY_SIZE(rates) - 5, /* up to 48000 */ + .list = rates, + .mask = 0, +}; + static snd_pcm_hw_constraint_list_t hw_constraints_rates_192 = { .count = ARRAY_SIZE(rates), .list = rates, @@ -423,6 +446,15 @@ if (ice->akm[i].ops.set_rate_val) ice->akm[i].ops.set_rate_val(&ice->akm[i], rate); } + + /* set up AC97 registers if needed */ + if (! (ice->eeprom.data[ICE_EEP2_ACLINK] & 0x80) && ice->ac97) { + snd_ac97_set_rate(ice->ac97, AC97_PCM_FRONT_DAC_RATE, rate); + snd_ac97_set_rate(ice->ac97, AC97_PCM_SURR_DAC_RATE, rate); + snd_ac97_set_rate(ice->ac97, AC97_PCM_LFE_DAC_RATE, rate); + snd_ac97_set_rate(ice->ac97, AC97_SPDIF, rate); + snd_ac97_set_rate(ice->ac97, AC97_PCM_LR_ADC_RATE, rate); + } } static int snd_vt1724_pcm_hw_params(snd_pcm_substream_t * substream, @@ -435,6 +467,7 @@ down(&ice->open_mutex); /* mark surround channels */ if (substream == ice->playback_pro_substream) { + /* PDMA0 can be multi-channel up to 8 */ chs = chs / 2 - 1; for (i = 0; i < chs; i++) { if (ice->pcm_reserved[i] && ice->pcm_reserved[i] != substream) { @@ -449,6 +482,7 @@ } } else { for (i = 0; i < 3; i++) { + /* check individual playback stream */ if (ice->playback_con_substream_ds[i] == substream) { if (ice->pcm_reserved[i] && ice->pcm_reserved[i] != substream) { up(&ice->open_mutex); @@ -609,7 +643,7 @@ SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_SYNC_START), .formats = SNDRV_PCM_FMTBIT_S32_LE, .rates = SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_8000_192000, - .rate_min = 4000, + .rate_min = 8000, .rate_max = 192000, .channels_min = 2, .channels_max = 8, @@ -620,6 +654,25 @@ .periods_max = 1024, }; +static snd_pcm_hardware_t snd_vt1724_spdif = +{ + .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | + SNDRV_PCM_INFO_BLOCK_TRANSFER | + SNDRV_PCM_INFO_MMAP_VALID | + SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_SYNC_START), + .formats = SNDRV_PCM_FMTBIT_S32_LE, + .rates = SNDRV_PCM_RATE_32000|SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000, + .rate_min = 32000, + .rate_max = 48000, + .channels_min = 2, + .channels_max = 2, + .buffer_bytes_max = (1UL << 18), /* 16bits dword */ + .period_bytes_min = 2 * 4 * 2, + .period_bytes_max = (1UL << 18), + .periods_min = 2, + .periods_max = 1024, +}; + static snd_pcm_hardware_t snd_vt1724_2ch_stereo = { .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | @@ -628,7 +681,7 @@ SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_SYNC_START), .formats = SNDRV_PCM_FMTBIT_S32_LE, .rates = SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_8000_192000, - .rate_min = 4000, + .rate_min = 8000, .rate_max = 192000, .channels_min = 2, .channels_max = 2, @@ -639,6 +692,41 @@ .periods_max = 1024, }; +/* + * set rate constraints + */ +static int set_rate_constraints(ice1712_t *ice, snd_pcm_substream_t *substream) +{ + snd_pcm_runtime_t *runtime = substream->runtime; + if (ice->eeprom.data[ICE_EEP2_ACLINK] & 0x80) { + /* I2S */ + if (ice->eeprom.data[ICE_EEP2_I2S] & 0x08) + return snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_192); + else { + runtime->hw.rates = SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_8000_96000; + runtime->hw.rate_max = 96000; + return snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_96); + } + } else if (ice->ac97) { + /* ACLINK */ + int ratec; + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) + ratec = AC97_RATES_FRONT_DAC; + else + ratec = AC97_RATES_ADC; + runtime->hw.rates = ice->ac97->rates[ratec]; + runtime->hw.rate_max = 48000; + if (runtime->hw.rates == SNDRV_PCM_RATE_48000) { + runtime->hw.rate_min = 48000; + return 0; + } else { + runtime->hw.rates = SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_8000_48000; + return snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_48); + } + } + return 0; +} + /* multi-channel playback needs alignment 8x32bit regarless of the channels * actually used */ @@ -655,12 +743,7 @@ runtime->hw = snd_vt1724_playback_pro; snd_pcm_set_sync(substream); snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); - if ((ice->eeprom.data[ICE_EEP2_ACLINK] & 0x80) && - (ice->eeprom.data[ICE_EEP2_I2S] & 0x08)) - snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_192); - else - snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_96); - + set_rate_constraints(ice, substream); down(&ice->open_mutex); /* calculate the currently available channels */ for (chs = 0; chs < 3; chs++) { @@ -689,11 +772,7 @@ runtime->hw = snd_vt1724_2ch_stereo; snd_pcm_set_sync(substream); snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); - if ((ice->eeprom.data[ICE_EEP2_ACLINK] & 0x80) && - (ice->eeprom.data[ICE_EEP2_I2S] & 0x08)) - snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_192); - else - snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_96); + set_rate_constraints(ice, substream); return 0; } @@ -812,11 +891,13 @@ runtime->private_data = (void*)VT1724_PDMA4_START; /* irq/status/trigger bit */ ice->playback_con_substream = substream; - runtime->hw = snd_vt1724_2ch_stereo; + if (ice->force_pdma4) { + runtime->hw = snd_vt1724_2ch_stereo; + set_rate_constraints(ice, substream); + } else + runtime->hw = snd_vt1724_spdif; snd_pcm_set_sync(substream); snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); - - snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_192); return 0; } @@ -838,10 +919,13 @@ runtime->private_data = (void*)VT1724_RDMA1_START; /* irq/status/trigger bit */ ice->capture_con_substream = substream; - runtime->hw = snd_vt1724_2ch_stereo; + if (ice->force_rdma1) { + runtime->hw = snd_vt1724_2ch_stereo; + set_rate_constraints(ice, substream); + } else + runtime->hw = snd_vt1724_spdif; snd_pcm_set_sync(substream); snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); - snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_96); return 0; } @@ -881,22 +965,31 @@ static int __devinit snd_vt1724_pcm_spdif(ice1712_t * ice, int device) { + char *name; snd_pcm_t *pcm; int play, capt; int err; - if (ice->eeprom.data[ICE_EEP2_SPDIF] & VT1724_CFG_SPDIF_OUT_INT) + if (ice->force_pdma4 || + (ice->eeprom.data[ICE_EEP2_SPDIF] & VT1724_CFG_SPDIF_OUT_INT)) { play = 1; - else + ice->has_spdif = 1; + } else play = 0; - if (ice->eeprom.data[ICE_EEP2_SPDIF] & VT1724_CFG_SPDIF_IN) + if (ice->force_rdma1 || + (ice->eeprom.data[ICE_EEP2_SPDIF] & VT1724_CFG_SPDIF_IN)) { capt = 1; - else + ice->has_spdif = 1; + } else capt = 0; if (! play && ! capt) return 0; /* no spdif device */ - err = snd_pcm_new(ice->card, "ICE1724 IEC958", device, play, capt, &pcm); + if (ice->force_pdma4 || ice->force_rdma1) + name = "ICE1724 Secondary"; + else + name = "IEC1724 IEC958"; + err = snd_pcm_new(ice->card, name, device, play, capt, &pcm); if (err < 0) return err; @@ -909,7 +1002,7 @@ pcm->private_data = ice; pcm->info_flags = 0; - strcpy(pcm->name, "ICE1724 IEC958"); + strcpy(pcm->name, name); snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(ice->pci), 64*1024, 64*1024); @@ -983,8 +1076,7 @@ runtime->hw = snd_vt1724_2ch_stereo; snd_pcm_set_sync(substream); snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); - - snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_192); + set_rate_constraints(ice, substream); return 0; } @@ -1723,7 +1815,6 @@ snd_vt1724_revo_cards, snd_vt1724_amp_cards, snd_vt1724_aureon_cards, - snd_vt1724_prodigy_cards, 0, }; @@ -1731,9 +1822,7 @@ /* */ -static unsigned char __devinit snd_vt1724_read_i2c(ice1712_t *ice, - unsigned char dev, - unsigned char addr) +unsigned char snd_vt1724_read_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr) { long t = 0x10000; @@ -1743,49 +1832,71 @@ return inb(ICEREG1724(ice, I2C_DATA)); } -static int __devinit snd_vt1724_read_eeprom(ice1712_t *ice) +void snd_vt1724_write_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr, unsigned char data) { - int dev = 0xa0; /* EEPROM device address */ + long t = 0x10000; + + outb(addr, ICEREG1724(ice, I2C_BYTE_ADDR)); + outb(data, ICEREG1724(ice, I2C_DATA)); + outb(dev | VT1724_I2C_WRITE, ICEREG1724(ice, I2C_DEV_ADDR)); + while (t-- > 0 && (inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_BUSY)) ; +} + +static int __devinit snd_vt1724_read_eeprom(ice1712_t *ice, const char *modelname) +{ + const int dev = 0xa0; /* EEPROM device address */ unsigned int i, size; struct snd_ice1712_card_info **tbl, *c; - if ((inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_EEPROM) == 0) { - snd_printk(KERN_WARNING "ICE1724 has not detected EEPROM\n"); - // return -EIO; - } - ice->eeprom.subvendor = (snd_vt1724_read_i2c(ice, dev, 0x00) << 0) | + if (! modelname || ! *modelname) { + ice->eeprom.subvendor = 0; + if ((inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_EEPROM) != 0) + ice->eeprom.subvendor = (snd_vt1724_read_i2c(ice, dev, 0x00) << 0) | (snd_vt1724_read_i2c(ice, dev, 0x01) << 8) | (snd_vt1724_read_i2c(ice, dev, 0x02) << 16) | (snd_vt1724_read_i2c(ice, dev, 0x03) << 24); - - /* if the EEPROM is given by the driver, use it */ + if (ice->eeprom.subvendor == 0 || ice->eeprom.subvendor == (unsigned int)-1) { + /* invalid subvendor from EEPROM, try the PCI subststem ID instead */ + u16 vendor, device; + pci_read_config_word(ice->pci, PCI_SUBSYSTEM_VENDOR_ID, &vendor); + pci_read_config_word(ice->pci, PCI_SUBSYSTEM_ID, &device); + ice->eeprom.subvendor = ((unsigned int)swab16(vendor) << 16) | swab16(device); + if (ice->eeprom.subvendor == 0 || ice->eeprom.subvendor == (unsigned int)-1) { + printk(KERN_ERR "ice1724: No valid ID is found\n"); + return -ENXIO; + } + } + } for (tbl = card_tables; *tbl; tbl++) { for (c = *tbl; c->subvendor; c++) { - if (c->subvendor == ice->eeprom.subvendor) { - if (! c->eeprom_size || ! c->eeprom_data) - goto found; - snd_printdd("using the defined eeprom..\n"); - ice->eeprom.version = 2; - ice->eeprom.size = c->eeprom_size + 6; - memcpy(ice->eeprom.data, c->eeprom_data, c->eeprom_size); - goto read_skipped; - } + if (modelname && c->model && ! strcmp(modelname, c->model)) { + printk(KERN_INFO "ice1724: Using board model %s\n", c->name); + ice->eeprom.subvendor = c->subvendor; + } else if (c->subvendor != ice->eeprom.subvendor) + continue; + if (! c->eeprom_size || ! c->eeprom_data) + goto found; + /* if the EEPROM is given by the driver, use it */ + snd_printdd("using the defined eeprom..\n"); + ice->eeprom.version = 2; + ice->eeprom.size = c->eeprom_size + 6; + memcpy(ice->eeprom.data, c->eeprom_data, c->eeprom_size); + goto read_skipped; } } + printk(KERN_WARNING "ice1724: No matching model found for ID 0x%x\n", ice->eeprom.subvendor); found: ice->eeprom.size = snd_vt1724_read_i2c(ice, dev, 0x04); if (ice->eeprom.size < 6) ice->eeprom.size = 32; else if (ice->eeprom.size > 32) { - snd_printk("invalid EEPROM (size = %i)\n", ice->eeprom.size); + printk(KERN_ERR "ice1724: Invalid EEPROM (size = %i)\n", ice->eeprom.size); return -EIO; } ice->eeprom.version = snd_vt1724_read_i2c(ice, dev, 0x05); - if (ice->eeprom.version != 2) { - snd_printk("invalid EEPROM version %i\n", ice->eeprom.version); - // return -EIO; - } + if (ice->eeprom.version != 2) + printk(KERN_WARNING "ice1724: Invalid EEPROM version %i\n", ice->eeprom.version); size = ice->eeprom.size - 6; for (i = 0; i < size; i++) ice->eeprom.data[i] = snd_vt1724_read_i2c(ice, dev, i + 6); @@ -1819,6 +1930,9 @@ outb(0, ICEREG1724(ice, POWERDOWN)); + /* read back to check the availability of SPDIF out */ + ice->eeprom.data[ICE_EEP2_SPDIF] = inb(ICEREG1724(ice, SPDIF_CFG)); + return 0; } @@ -1880,7 +1994,10 @@ if (ice->num_total_dacs > 0) { snd_kcontrol_new_t tmp = snd_vt1724_mixer_pro_analog_route; - tmp.count = ice->num_total_dacs; + if (ice->vt1720) + tmp.count = 2; + else + tmp.count = ice->num_total_dacs; err = snd_ctl_add(ice->card, snd_ctl_new1(&tmp, ice)); if (err < 0) return err; @@ -1927,6 +2044,7 @@ static int __devinit snd_vt1724_create(snd_card_t * card, struct pci_dev *pci, + const char *modelname, ice1712_t ** r_ice1712) { ice1712_t *ice; @@ -1982,7 +2100,7 @@ ice->irq = pci->irq; - if (snd_vt1724_read_eeprom(ice) < 0) { + if (snd_vt1724_read_eeprom(ice, modelname) < 0) { snd_vt1724_free(ice); return -EIO; } @@ -2041,7 +2159,7 @@ strcpy(card->driver, "ICE1724"); strcpy(card->shortname, "ICEnsemble ICE1724"); - if ((err = snd_vt1724_create(card, pci, &ice)) < 0) { + if ((err = snd_vt1724_create(card, pci, model[dev], &ice)) < 0) { snd_card_free(card); return err; } @@ -2050,6 +2168,8 @@ for (c = *tbl; c->subvendor; c++) { if (c->subvendor == ice->eeprom.subvendor) { strcpy(card->shortname, c->name); + if (c->driver) /* specific driver? */ + strcpy(card->driver, c->driver); if (c->chip_init) { if ((err = c->chip_init(ice)) < 0) { snd_card_free(card); @@ -2088,7 +2208,7 @@ return err; } - if (ice->pcm) { /* has SPDIF I/O */ + if (ice->pcm && ice->has_spdif) { /* has SPDIF I/O */ if ((err = snd_vt1724_spdif_build_controls(ice)) < 0) { snd_card_free(card); return err; @@ -2141,15 +2261,7 @@ static int __init alsa_card_ice1724_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "ICE1724 soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_ice1724_exit(void) @@ -2159,24 +2271,3 @@ module_init(alsa_card_ice1724_init) module_exit(alsa_card_ice1724_exit) - -#ifndef MODULE - -/* format is: snd-ice1724=enable,index,id */ - -static int __init alsa_card_ice1724_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-ice1724=", alsa_card_ice1724_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/ice1712/prodigy.c b/sound/pci/ice1712/prodigy.c --- a/sound/pci/ice1712/prodigy.c 2004-05-26 15:01:36 -07:00 +++ /dev/null Wed Dec 31 16:00:00 196900 @@ -1,663 +0,0 @@ -/* - * ALSA driver for ICEnsemble VT1724 (Envy24HT) - * - * Lowlevel functions for AudioTrak Prodigy 7.1 (and possibly 192) cards - * Copyright (c) 2003 Dimitromanolakis Apostolos <apostol@cs.utoronto.ca> - * based on the aureon.c code (c) 2003 by Takashi Iwai <tiwai@suse.de> - * - * version 0.82: Stable / not all features work yet (no communication with AC97 secondary) - * added 64x/128x oversampling switch (should be 64x only for 96khz) - * fixed some recording labels (still need to check the rest) - * recording is working probably thanks to correct wm8770 initialization - * - * version 0.5: Initial release: - * working: analog output, mixer, headphone amplifier switch - * not working: prety much everything else, at least i could verify that - * we have no digital output, no capture, pretty bad clicks and poops - * on mixer switch and other coll stuff. - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - * NOTES: - * - * - * - * - we reuse the akm4xxx_t record for storing the wm8770 codec data. - * both wm and akm codecs are pretty similar, so we can integrate - * both controls in the future, once if wm codecs are reused in - * many boards. - * - * - writing over SPI is implemented but reading is not yet. - * the SPDIF-in channel status, etc. can be read from CS chip. - * - * - DAC digital volumes are not implemented in the mixer. - * if they show better response than DAC analog volumes, we can use them - * instead. - * - * - Prodigy boards are equipped with AC97 STAC9744 chip , too. it's used to do - * the analog mixing but not easily controllable (it's not connected - * directly from envy24ht chip). so let's leave it as it is. - * - */ - -#define REVISION 0.82b - -#include <sound/driver.h> -#include <asm/io.h> -#include <linux/delay.h> -#include <linux/interrupt.h> -#include <linux/init.h> -#include <linux/slab.h> -#include <sound/core.h> - -#include "ice1712.h" -#include "envy24ht.h" -#include "prodigy.h" - - -static int prodigy_set_headphone_amp(ice1712_t *ice, int enable) -{ - unsigned int tmp, tmp2; - - tmp2 = tmp = snd_ice1712_gpio_read(ice); - if (enable) - tmp |= PRODIGY_HP_AMP_EN; - else - tmp &= ~ PRODIGY_HP_AMP_EN; - if (tmp != tmp2) { - snd_ice1712_gpio_write(ice, tmp); - return 1; - } - return 0; -} - - -static int prodigy_get_headphone_amp(ice1712_t *ice) -{ - unsigned int tmp = snd_ice1712_gpio_read(ice); - - return ( tmp & PRODIGY_HP_AMP_EN )!= 0; -} - - -/* - * write data in the SPI mode - */ -static void prodigy_spi_write(ice1712_t *ice, unsigned int cs, unsigned int data, int bits) -{ - unsigned int tmp; - int i; - - tmp = snd_ice1712_gpio_read(ice); - - snd_ice1712_gpio_set_mask(ice, ~(PRODIGY_WM_RW|PRODIGY_WM_DATA|PRODIGY_WM_CLK| - PRODIGY_WM_CS|PRODIGY_CS8415_CS|PRODIGY_HP_AMP_EN)); - tmp |= PRODIGY_WM_RW; - tmp &= ~cs; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); - - for (i = bits - 1; i >= 0; i--) { - tmp &= ~PRODIGY_WM_CLK; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); - if (data & (1 << i)) - tmp |= PRODIGY_WM_DATA; - else - tmp &= ~PRODIGY_WM_DATA; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); - tmp |= PRODIGY_WM_CLK; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); - } - - tmp &= ~PRODIGY_WM_CLK; - tmp |= cs; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); - tmp |= PRODIGY_WM_CLK; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); -} - - -/* - * get the current register value of WM codec - */ -static unsigned short wm_get(ice1712_t *ice, int reg) -{ - reg <<= 1; - return ((unsigned short)ice->akm[0].images[reg] << 8) | - ice->akm[0].images[reg + 1]; -} - -/* - * set the register value of WM codec and remember it - */ -static void wm_put(ice1712_t *ice, int reg, unsigned short val) -{ - prodigy_spi_write(ice, PRODIGY_WM_CS, (reg << 9) | (val & 0x1ff), 16); - reg <<= 1; - ice->akm[0].images[reg] = val >> 8; - ice->akm[0].images[reg + 1] = val; -} - - -/********************************* - ********* Controls section ****** - *********************************/ - -#define PRODIGY_CON_HPAMP \ - { \ - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ - .name = "Headphone Amplifier", \ - .info = prodigy_hpamp_info, \ - .get = prodigy_hpamp_get, \ - .put = prodigy_hpamp_put \ - } - -static int prodigy_hpamp_info(snd_kcontrol_t *k, snd_ctl_elem_info_t *uinfo) -{ - static char *texts[2] = { - "Off", "On" - }; - - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; - uinfo->count = 1; - uinfo->value.enumerated.items = 2; - - if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) - uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); - - return 0; -} - - -static int prodigy_hpamp_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - - ucontrol->value.integer.value[0] = prodigy_get_headphone_amp(ice); - return 0; -} - - -static int prodigy_hpamp_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - - return prodigy_set_headphone_amp(ice,ucontrol->value.integer.value[0]); -} - - - -#define PRODIGY_CON_DEEMP \ - { \ - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ - .name = "DAC De-emphasis", \ - .info = prodigy_deemp_info, \ - .get = prodigy_deemp_get, \ - .put = prodigy_deemp_put \ - } - -static int prodigy_deemp_info(snd_kcontrol_t *k, snd_ctl_elem_info_t *uinfo) -{ - static char *texts[2] = { "Off", "On" }; - - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; - uinfo->count = 1; - uinfo->value.enumerated.items = 2; - - if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) - uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); - - return 0; -} - -static int prodigy_deemp_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - ucontrol->value.integer.value[0] = (wm_get(ice, 0x15) & 0xf) == 0xf; - return 0; -} - -static int prodigy_deemp_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - int temp, temp2; - temp2 = temp = wm_get(ice, 0x15); - temp = (temp & ~0xf) | ((ucontrol->value.integer.value[0])*0xf); - if (temp != temp2) { - wm_put(ice,0x15,temp); - return 1; - } - return 0; -} - - -#define PRODIGY_CON_OVERSAMPLING \ - { \ - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ - .name = "ADC Oversampling", \ - .info = prodigy_oversampling_info, \ - .get = prodigy_oversampling_get, \ - .put = prodigy_oversampling_put \ - } - -static int prodigy_oversampling_info(snd_kcontrol_t *k, snd_ctl_elem_info_t *uinfo) -{ - static char *texts[2] = { "128x", "64x" }; - - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; - uinfo->count = 1; - uinfo->value.enumerated.items = 2; - - if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) - uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); - - return 0; -} - -static int prodigy_oversampling_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - ucontrol->value.integer.value[0] = (wm_get(ice, 0x17) & 0x8) == 0x8; - return 0; -} - -static int prodigy_oversampling_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - int temp, temp2; - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - - temp2 = temp = wm_get(ice, 0x17); - - if( ucontrol->value.integer.value[0] ) { - temp |= 0x8; - } else { - temp &= ~0x8; - } - - if (temp != temp2) { - wm_put(ice,0x17,temp); - return 1; - } - return 0; -} - - - - -/* - * DAC volume attenuation mixer control - */ -static int wm_dac_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) -{ - uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; - uinfo->count = 1; - uinfo->value.integer.min = 0; /* mute */ - uinfo->value.integer.max = 101; /* 0dB */ - return 0; -} - -static int wm_dac_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - int idx; - unsigned short vol; - - down(&ice->gpio_mutex); - if (kcontrol->private_value) - idx = WM_DAC_MASTER_ATTEN; - else - idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_DAC_ATTEN; - vol = wm_get(ice, idx) & 0x7f; - if (vol <= 0x1a) - ucontrol->value.integer.value[0] = 0; - else - ucontrol->value.integer.value[0] = vol - 0x1a; - up(&ice->gpio_mutex); - - return 0; -} - -static int wm_dac_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - int idx; - unsigned short ovol, nvol; - int change; - - snd_ice1712_save_gpio_status(ice); - if (kcontrol->private_value) - idx = WM_DAC_MASTER_ATTEN; - else - idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_DAC_ATTEN; - nvol = ucontrol->value.integer.value[0] + 0x1a; - ovol = wm_get(ice, idx) & 0x7f; - change = (ovol != nvol); - if (change) { - if (nvol <= 0x1a && ovol <= 0x1a) - change = 0; - else - wm_put(ice, idx, nvol | 0x180); /* update on zero detect */ - } - snd_ice1712_restore_gpio_status(ice); - return change; -} - -/* - * ADC gain mixer control - */ -static int wm_adc_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) -{ - uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; - uinfo->count = 1; - uinfo->value.integer.min = 0; /* -12dB */ - uinfo->value.integer.max = 0x1f; /* 19dB */ - return 0; -} - -static int wm_adc_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - int idx; - unsigned short vol; - - down(&ice->gpio_mutex); - idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_ADC_GAIN; - vol = wm_get(ice, idx) & 0x1f; - ucontrol->value.integer.value[0] = vol; - up(&ice->gpio_mutex); - return 0; -} - -static int wm_adc_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - int idx; - unsigned short ovol, nvol; - int change; - - snd_ice1712_save_gpio_status(ice); - idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_ADC_GAIN; - nvol = ucontrol->value.integer.value[0]; - ovol = wm_get(ice, idx) & 0x1f; - change = (ovol != nvol); - if (change) - wm_put(ice, idx, nvol); - snd_ice1712_restore_gpio_status(ice); - return change; -} - -/* - * ADC input mux mixer control - */ -static int wm_adc_mux_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) -{ - static char *texts[] = { - "CD Left", - "CD Right", - "Line Left", - "Line Right", - "Aux Left", - "Aux Right", - "Mic Left", - "Mic Right", - }; - uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; - uinfo->count = 2; - uinfo->value.enumerated.items = 8; - if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) - uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; - strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); - return 0; -} - -static int wm_adc_mux_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - unsigned short val; - - down(&ice->gpio_mutex); - val = wm_get(ice, WM_ADC_MUX); - ucontrol->value.integer.value[0] = val & 7; - ucontrol->value.integer.value[1] = (val >> 4) & 7; - up(&ice->gpio_mutex); - return 0; -} - -static int wm_adc_mux_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - ice1712_t *ice = snd_kcontrol_chip(kcontrol); - unsigned short oval, nval; - int change; - - snd_ice1712_save_gpio_status(ice); - oval = wm_get(ice, WM_ADC_MUX); - nval = oval & ~0x77; - nval |= ucontrol->value.integer.value[0] & 7; - nval |= (ucontrol->value.integer.value[1] & 7) << 4; - change = (oval != nval); - if (change) - wm_put(ice, WM_ADC_MUX, nval); - snd_ice1712_restore_gpio_status(ice); - return 0; -} - -/* - * mixers - */ - -static snd_kcontrol_new_t prodigy71_dac_control __devinitdata = { - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, - .name = "DAC Volume", - .count = 8, - .info = wm_dac_vol_info, - .get = wm_dac_vol_get, - .put = wm_dac_vol_put, -}; - -static snd_kcontrol_new_t wm_controls[] __devinitdata = { - { - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, - .name = "Master Playback Volume", - .info = wm_dac_vol_info, - .get = wm_dac_vol_get, - .put = wm_dac_vol_put, - .private_value = 1, - }, - { - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, - .name = "ADC Volume", - .count = 2, - .info = wm_adc_vol_info, - .get = wm_adc_vol_get, - .put = wm_adc_vol_put, - }, - { - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, - .name = "Capture Route", - .info = wm_adc_mux_info, - .get = wm_adc_mux_get, - .put = wm_adc_mux_put, - }, - PRODIGY_CON_HPAMP , - PRODIGY_CON_DEEMP , - PRODIGY_CON_OVERSAMPLING -}; - - -static int __devinit prodigy_add_controls(ice1712_t *ice) -{ - unsigned int i; - int err; - - err = snd_ctl_add(ice->card, snd_ctl_new1(&prodigy71_dac_control, ice)); - if (err < 0) - return err; - - for (i = 0; i < ARRAY_SIZE(wm_controls); i++) { - err = snd_ctl_add(ice->card, snd_ctl_new1(&wm_controls[i], ice)); - if (err < 0) - return err; - } - return 0; -} - - -/* - * initialize the chip - */ -static int __devinit prodigy_init(ice1712_t *ice) -{ - static unsigned short wm_inits[] = { - - /* These come first to reduce init pop noise */ - 0x1b, 0x000, /* ADC Mux */ - 0x1c, 0x009, /* Out Mux1 */ - 0x1d, 0x009, /* Out Mux2 */ - - 0x18, 0x000, /* All power-up */ - - 0x16, 0x022, /* I2S, normal polarity, 24bit, high-pass on */ - 0x17, 0x006, /* 128fs, slave mode */ - - 0x00, 0, /* DAC1 analog mute */ - 0x01, 0, /* DAC2 analog mute */ - 0x02, 0, /* DAC3 analog mute */ - 0x03, 0, /* DAC4 analog mute */ - 0x04, 0, /* DAC5 analog mute */ - 0x05, 0, /* DAC6 analog mute */ - 0x06, 0, /* DAC7 analog mute */ - 0x07, 0, /* DAC8 analog mute */ - 0x08, 0x100, /* master analog mute */ - - 0x09, 0x7f, /* DAC1 digital full */ - 0x0a, 0x7f, /* DAC2 digital full */ - 0x0b, 0x7f, /* DAC3 digital full */ - 0x0c, 0x7f, /* DAC4 digital full */ - 0x0d, 0x7f, /* DAC5 digital full */ - 0x0e, 0x7f, /* DAC6 digital full */ - 0x0f, 0x7f, /* DAC7 digital full */ - 0x10, 0x7f, /* DAC8 digital full */ - 0x11, 0x1FF, /* master digital full */ - - 0x12, 0x000, /* phase normal */ - 0x13, 0x090, /* unmute DAC L/R */ - 0x14, 0x000, /* all unmute */ - 0x15, 0x000, /* no deemphasis, no ZFLG */ - - 0x19, 0x000, /* -12dB ADC/L */ - 0x1a, 0x000 /* -12dB ADC/R */ - - }; - - static unsigned short cs_inits[] = { - 0x0441, /* RUN */ - 0x0100, /* no mute */ - 0x0200, /* */ - 0x0600, /* slave, 24bit */ - }; - - unsigned int tmp; - unsigned int i; - - printk(KERN_INFO "ice1724: AudioTrak Prodigy 7.1 driver rev. 0.82b\n"); - printk(KERN_INFO "ice1724: This driver is in beta stage. Forsuccess/failure reporting contact\n"); - printk(KERN_INFO "ice1724: Apostolos Dimitromanolakis <apostol@cs.utoronto.ca>\n"); - - ice->num_total_dacs = 8; - ice->num_total_adcs = 8; - - /* to remeber the register values */ - ice->akm = snd_kcalloc(sizeof(akm4xxx_t), GFP_KERNEL); - if (! ice->akm) - return -ENOMEM; - ice->akm_codecs = 1; - - snd_ice1712_gpio_set_dir(ice, 0xbfffff); /* fix this for the time being */ - - /* reset the wm codec as the SPI mode */ - snd_ice1712_save_gpio_status(ice); - snd_ice1712_gpio_set_mask(ice,~( PRODIGY_WM_RESET|PRODIGY_WM_CS| - PRODIGY_CS8415_CS|PRODIGY_HP_AMP_EN )); - - tmp = snd_ice1712_gpio_read(ice); - tmp &= ~PRODIGY_WM_RESET; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); - tmp |= PRODIGY_WM_CS | PRODIGY_CS8415_CS; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); - tmp |= PRODIGY_WM_RESET; - snd_ice1712_gpio_write(ice, tmp); - udelay(1); - - /* initialize WM8770 codec */ - for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2) - wm_put(ice, wm_inits[i], wm_inits[i+1]); - - /* initialize CS8415A codec */ - for (i = 0; i < ARRAY_SIZE(cs_inits); i++) - prodigy_spi_write(ice, PRODIGY_CS8415_CS, - cs_inits[i] | 0x200000, 24); - - - prodigy_set_headphone_amp(ice, 1); - - snd_ice1712_restore_gpio_status(ice); - - return 0; -} - -/* - * Prodigy boards don't provide the EEPROM data except for the vendor IDs. - * hence the driver needs to sets up it properly. - */ - -static unsigned char prodigy71_eeprom[] __devinitdata = { - 0x2b, /* SYSCONF: clock 512, mpu401, spdif-in/ADC, 4DACs */ - 0x80, /* ACLINK: I2S */ - 0xf8, /* I2S: vol, 96k, 24bit, 192k */ - 0xc3, /* SPDIF: out-en, out-int, spdif-in */ - 0xff, /* GPIO_DIR */ - 0xff, /* GPIO_DIR1 */ - 0xbf, /* GPIO_DIR2 */ - 0x00, /* GPIO_MASK */ - 0x00, /* GPIO_MASK1 */ - 0x00, /* GPIO_MASK2 */ - 0x00, /* GPIO_STATE */ - 0x00, /* GPIO_STATE1 */ - 0x00, /* GPIO_STATE2 */ -}; - -/* entry point */ -struct snd_ice1712_card_info snd_vt1724_prodigy_cards[] __devinitdata = { - { - .subvendor = VT1724_SUBDEVICE_PRODIGY71, - .name = "Audiotrak Prodigy 7.1", - .chip_init = prodigy_init, - .build_controls = prodigy_add_controls, - .eeprom_size = sizeof(prodigy71_eeprom), - .eeprom_data = prodigy71_eeprom, - }, - { } /* terminator */ -}; diff -Nru a/sound/pci/ice1712/prodigy.h b/sound/pci/ice1712/prodigy.h --- a/sound/pci/ice1712/prodigy.h 2004-05-26 15:01:35 -07:00 +++ /dev/null Wed Dec 31 16:00:00 196900 @@ -1,67 +0,0 @@ -#ifndef __SOUND_PRODIGY_H -#define __SOUND_PRODIGY_H - -/* - * ALSA driver for VIA VT1724 (Envy24HT) - * - * Lowlevel functions for Terratec PRODIGY cards - * - * Copyright (c) 2003 Takashi Iwai <tiwai@suse.de> - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#define PRODIGY_DEVICE_DESC "{AudioTrak,Prodigy 7.1}," - -#define VT1724_SUBDEVICE_PRODIGY71 0x33495345 /* PRODIGY 7.1 */ - -extern struct snd_ice1712_card_info snd_vt1724_prodigy_cards[]; - -/* GPIO bits */ -#define PRODIGY_CS8415_CS (1 << 23) -#define PRODIGY_CS8415_CDTO (1 << 22) -#define PRODIGY_WM_RESET (1 << 20) -#define PRODIGY_WM_CLK (1 << 19) -#define PRODIGY_WM_DATA (1 << 18) -#define PRODIGY_WM_RW (1 << 17) -#define PRODIGY_AC97_RESET (1 << 16) -#define PRODIGY_DIGITAL_SEL1 (1 << 15) -// #define PRODIGY_HP_SEL (1 << 14) -#define PRODIGY_WM_CS (1 << 12) - -#define PRODIGY_HP_AMP_EN (1 << 14) - - -/* WM8770 registers */ -#define WM_DAC_ATTEN 0x00 /* DAC1-8 analog attenuation */ -#define WM_DAC_MASTER_ATTEN 0x08 /* DAC master analog attenuation */ -#define WM_DAC_DIG_ATTEN 0x09 /* DAC1-8 digital attenuation */ -#define WM_DAC_DIG_MATER_ATTEN 0x11 /* DAC master digital attenuation */ -#define WM_PHASE_SWAP 0x12 /* DAC phase */ -#define WM_DAC_CTRL1 0x13 /* DAC control bits */ -#define WM_MUTE 0x14 /* mute controls */ -#define WM_DAC_CTRL2 0x15 /* de-emphasis and zefo-flag */ -#define WM_INT_CTRL 0x16 /* interface control */ -#define WM_MASTER 0x17 /* master clock and mode */ -#define WM_POWERDOWN 0x18 /* power-down controls */ -#define WM_ADC_GAIN 0x19 /* ADC gain L(19)/R(1a) */ -#define WM_ADC_MUX 0x1b /* input MUX */ -#define WM_OUT_MUX1 0x1c /* output MUX */ -#define WM_OUT_MUX2 0x1e /* output MUX */ -#define WM_RESET 0x1f /* software reset */ - - -#endif /* __SOUND_PRODIGY_H */ diff -Nru a/sound/pci/ice1712/revo.c b/sound/pci/ice1712/revo.c --- a/sound/pci/ice1712/revo.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ice1712/revo.c 2004-05-26 15:01:36 -07:00 @@ -171,10 +171,11 @@ /* entry point */ struct snd_ice1712_card_info snd_vt1724_revo_cards[] __devinitdata = { { - VT1724_SUBDEVICE_REVOLUTION71, - "M Audio Revolution-7.1", - revo_init, - revo_add_controls, + .subvendor = VT1724_SUBDEVICE_REVOLUTION71, + .name = "M Audio Revolution-7.1", + .model = "revo71", + .chip_init = revo_init, + .build_controls = revo_add_controls, }, { } /* terminator */ }; diff -Nru a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c --- a/sound/pci/intel8x0.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/intel8x0.c 2004-05-26 15:01:36 -07:00 @@ -34,12 +34,12 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/ac97_codec.h> #include <sound/info.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> /* for 440MX workaround */ #include <asm/pgtable.h> @@ -81,29 +81,30 @@ #ifdef SUPPORT_MIDI static int mpu_port[SNDRV_CARDS]; /* disabled */ #endif +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Intel i8x0 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Intel i8x0 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Intel i8x0 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(ac97_clock, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ac97_clock, int, boot_devs, 0444); MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (0 = auto-detect)."); MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:0"); -MODULE_PARM(ac97_quirk, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ac97_quirk, int, boot_devs, 0444); MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware."); MODULE_PARM_SYNTAX(ac97_quirk, SNDRV_ENABLED ",allows:{{-1,4}},dialog:list,default:-1"); #ifdef SUPPORT_JOYSTICK -MODULE_PARM(joystick, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick, bool, boot_devs, 0444); MODULE_PARM_DESC(joystick, "Enable joystick for Intel i8x0 soundcard."); MODULE_PARM_SYNTAX(joystick, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); #endif #ifdef SUPPORT_MIDI -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mpu_port, int, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU401 port # for Intel i8x0 driver."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0},{0x330},{0x300}},dialog:list"); #endif @@ -235,6 +236,7 @@ #define ICH_P2INT 0x02000000 /* ICH4: PCM2-In interrupt */ #define ICH_M2INT 0x01000000 /* ICH4: Mic2-In interrupt */ #define ICH_SAMPLE_CAP 0x00c00000 /* ICH4: sample capability bits (RO) */ +#define ICH_SAMPLE_16_20 0x00400000 /* ICH4: 16- and 20-bit samples */ #define ICH_MULTICHAN_CAP 0x00300000 /* ICH4: multi-channel capability bits (RO) */ #define ICH_MD3 0x00020000 /* modem power down semaphore */ #define ICH_AD3 0x00010000 /* audio power down semaphore */ @@ -378,6 +380,7 @@ unsigned int fragsize; unsigned int fragsize1; unsigned int position; + unsigned int pos_shift; int frags; int lvi; int lvi_frag; @@ -441,10 +444,9 @@ struct snd_dma_buffer bdbars; u32 int_sta_reg; /* interrupt status register */ u32 int_sta_mask; /* interrupt status mask */ - unsigned int pcm_pos_shift; - + #ifdef CONFIG_PM - int in_suspend; + u32 pci_state[64 / sizeof(u32)]; #endif }; @@ -719,10 +721,10 @@ for (idx = 0; idx < (ICH_REG_LVI_MASK + 1) * 2; idx += 4) { bdbar[idx + 0] = cpu_to_le32(ichdev->physbuf); bdbar[idx + 1] = cpu_to_le32(0x80000000 | /* interrupt on completion */ - ichdev->fragsize1 >> chip->pcm_pos_shift); + ichdev->fragsize1 >> ichdev->pos_shift); bdbar[idx + 2] = cpu_to_le32(ichdev->physbuf + (ichdev->size >> 1)); bdbar[idx + 3] = cpu_to_le32(0x80000000 | /* interrupt on completion */ - ichdev->fragsize1 >> chip->pcm_pos_shift); + ichdev->fragsize1 >> ichdev->pos_shift); } ichdev->frags = 2; } else { @@ -731,7 +733,7 @@ for (idx = 0; idx < (ICH_REG_LVI_MASK + 1) * 2; idx += 2) { bdbar[idx + 0] = cpu_to_le32(ichdev->physbuf + (((idx >> 1) * ichdev->fragsize) % ichdev->size)); bdbar[idx + 1] = cpu_to_le32(0x80000000 | /* interrupt on completion */ - ichdev->fragsize >> chip->pcm_pos_shift); + ichdev->fragsize >> ichdev->pos_shift); // printk("bdbar[%i] = 0x%x [0x%x]\n", idx + 0, bdbar[idx + 0], bdbar[idx + 1]); } ichdev->frags = ichdev->size / ichdev->fragsize; @@ -773,11 +775,14 @@ static inline void snd_intel8x0_update(intel8x0_t *chip, ichdev_t *ichdev) { unsigned long port = ichdev->reg_offset; - int civ, i, step; + int status, civ, i, step; int ack = 0; + status = igetbyte(chip, port + ichdev->roff_sr); civ = igetbyte(chip, port + ICH_REG_OFF_CIV); - if (civ == ichdev->civ) { + if (!(status & ICH_BCIS)) { + step = 0; + } else if (civ == ichdev->civ) { // snd_printd("civ same %d\n", civ); step = 1; ichdev->civ++; @@ -811,7 +816,8 @@ snd_pcm_period_elapsed(ichdev->substream); spin_lock(&chip->reg_lock); } - iputbyte(chip, port + ichdev->roff_sr, ICH_FIFOE | ICH_BCIS | ICH_LVBCI); + iputbyte(chip, port + ichdev->roff_sr, + status & (ICH_FIFOE | ICH_BCIS | ICH_LVBCI)); } static irqreturn_t snd_intel8x0_interrupt(int irq, void *dev_id, struct pt_regs *regs) @@ -981,7 +987,8 @@ return snd_pcm_lib_free_pages(substream); } -static void snd_intel8x0_setup_multi_channels(intel8x0_t *chip, int channels) +static void snd_intel8x0_setup_pcm_out(intel8x0_t *chip, + int channels, int sample_bits) { unsigned int cnt; switch (chip->device_type) { @@ -1005,7 +1012,7 @@ break; default: cnt = igetdword(chip, ICHREG(GLOB_CNT)); - cnt &= ~ICH_PCM_246_MASK; + cnt &= ~(ICH_PCM_246_MASK | ICH_PCM_20BIT); if (chip->multi4 && channels == 4) cnt |= ICH_PCM_4; else if (chip->multi6 && channels == 6) @@ -1016,6 +1023,9 @@ */ iputdword(chip, ICHREG(GLOB_CNT), (cnt & 0xcfffff)); mdelay(50); /* grrr... */ + } else if (chip->device_type == DEVICE_INTEL_ICH4) { + if (sample_bits > 16) + cnt |= ICH_PCM_20BIT; } iputdword(chip, ICHREG(GLOB_CNT), cnt); break; @@ -1033,8 +1043,12 @@ ichdev->fragsize = snd_pcm_lib_period_bytes(substream); if (ichdev->ichd == ICHD_PCMOUT) { spin_lock(&chip->reg_lock); - snd_intel8x0_setup_multi_channels(chip, runtime->channels); + snd_intel8x0_setup_pcm_out(chip, runtime->channels, + runtime->sample_bits); spin_unlock(&chip->reg_lock); + if (chip->device_type == DEVICE_INTEL_ICH4) { + ichdev->pos_shift = (runtime->sample_bits > 16) ? 2 : 1; + } } snd_intel8x0_setup_periods(chip, ichdev); return 0; @@ -1047,7 +1061,7 @@ unsigned long flags; size_t ptr1, ptr; - ptr1 = igetword(chip, ichdev->reg_offset + ichdev->roff_picb) << chip->pcm_pos_shift; + ptr1 = igetword(chip, ichdev->reg_offset + ichdev->roff_picb) << ichdev->pos_shift; if (ptr1 != 0) ptr = ichdev->fragsize1 - ptr1; else @@ -1142,6 +1156,8 @@ runtime->hw.channels_max = 4; snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, &hw_constraints_channels4); } + if (chip->smp20bit) + runtime->hw.formats |= SNDRV_PCM_FMTBIT_S32_LE; return 0; } @@ -1844,6 +1860,7 @@ memset(&ac97, 0, sizeof(ac97)); ac97.private_data = chip; ac97.private_free = snd_intel8x0_mixer_free_ac97; + ac97.scaps = AC97_SCAP_SKIP_MODEM; if (chip->device_type != DEVICE_ALI) { glob_sta = igetdword(chip, ICHREG(GLOB_STA)); bus.write = snd_intel8x0_codec_write; @@ -1892,7 +1909,8 @@ for (i = 0; i < codecs; i++) { ac97.num = i; if ((err = snd_ac97_mixer(pbus, &ac97, &x97)) < 0) { - snd_printk(KERN_ERR "Unable to initialize codec #%d\n", i); + if (err != -EACCES) + snd_printk(KERN_ERR "Unable to initialize codec #%d\n", i); if (i == 0) goto __err; continue; @@ -1946,6 +1964,10 @@ if (pbus->pcms[0].r[0].slots & (1 << AC97_SLOT_LFE)) chip->multi6 = 1; } + if (chip->device_type == DEVICE_INTEL_ICH4) { + if ((igetdword(chip, ICHREG(GLOB_STA)) & ICH_SAMPLE_CAP) == ICH_SAMPLE_16_20) + chip->smp20bit = 1; + } if (chip->device_type == DEVICE_NFORCE) { /* 48kHz only */ chip->ichd[spdif_idx].pcm->rates = SNDRV_PCM_RATE_48000; @@ -2184,74 +2206,54 @@ /* * power management */ -static void intel8x0_suspend(intel8x0_t *chip) +static int intel8x0_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return -EINVAL); int i; - if (chip->in_suspend || - card->power_state == SNDRV_CTL_POWER_D3hot) - return; - - chip->in_suspend = 1; for (i = 0; i < chip->pcm_devs; i++) snd_pcm_suspend_all(chip->pcm[i]); + for (i = 0; i < 3; i++) + if (chip->ac97[i]) + snd_ac97_suspend(chip->ac97[i]); + pci_save_state(chip->pci, chip->pci_state); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void intel8x0_resume(intel8x0_t *chip) +static int intel8x0_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return -EINVAL); int i; - if (! chip->in_suspend || - card->power_state == SNDRV_CTL_POWER_D0) - return; - + pci_restore_state(chip->pci, chip->pci_state); pci_enable_device(chip->pci); pci_set_master(chip->pci); snd_intel8x0_chip_init(chip, 0); + + /* refill nocache */ + if (chip->fix_nocache) + fill_nocache(chip->bdbars.area, chip->bdbars.bytes, 1); + for (i = 0; i < 3; i++) if (chip->ac97[i]) snd_ac97_resume(chip->ac97[i]); - chip->in_suspend = 0; - snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int snd_intel8x0_suspend(struct pci_dev *dev, u32 state) -{ - intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return -ENXIO); - intel8x0_suspend(chip); - return 0; -} -static int snd_intel8x0_resume(struct pci_dev *dev) -{ - intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return -ENXIO); - intel8x0_resume(chip); - return 0; -} - -/* callback */ -static int snd_intel8x0_set_power_state(snd_card_t *card, unsigned int power_state) -{ - intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->power_state_private_data, return -ENXIO); - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - intel8x0_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - intel8x0_suspend(chip); - break; - default: - return -EINVAL; + /* refill nocache */ + if (chip->fix_nocache) { + for (i = 0; i < chip->bdbars_count; i++) { + ichdev_t *ichdev = &chip->ichd[i]; + if (ichdev->substream) { + snd_pcm_runtime_t *runtime = ichdev->substream->runtime; + if (runtime->dma_area) + fill_nocache(runtime->dma_area, runtime->dma_bytes, 1); + } + } } + + snd_power_change_state(card, SNDRV_CTL_POWER_D0); return 0; } - #endif /* CONFIG_PM */ #define INTEL8X0_TESTBUF_SIZE 32768 /* enough large for one shot */ @@ -2305,7 +2307,7 @@ spin_lock_irqsave(&chip->reg_lock, flags); /* check the position */ pos = ichdev->fragsize1; - pos -= igetword(chip, ichdev->reg_offset + ichdev->roff_picb) << chip->pcm_pos_shift; + pos -= igetword(chip, ichdev->reg_offset + ichdev->roff_picb) << ichdev->pos_shift; pos += ichdev->position; do_gettimeofday(&stop_time); /* stop */ @@ -2546,9 +2548,9 @@ } if (device_type == DEVICE_ALI) ichdev->ali_slot = (ichdev->reg_offset - 0x40) / 0x10; + /* SIS7012 handles the pcm data in bytes, others are in samples */ + ichdev->pos_shift = (device_type == DEVICE_SIS) ? 0 : 1; } - /* SIS7012 handles the pcm data in bytes, others are in words */ - chip->pcm_pos_shift = (device_type == DEVICE_SIS) ? 0 : 1; memset(&chip->dma_dev, 0, sizeof(chip->dma_dev)); chip->dma_dev.type = SNDRV_DMA_TYPE_DEV; @@ -2581,10 +2583,7 @@ return err; } -#ifdef CONFIG_PM - card->set_power_state = snd_intel8x0_set_power_state; - card->power_state_private_data = chip; -#endif + snd_card_set_pm_callback(card, intel8x0_suspend, intel8x0_resume, chip); if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { snd_intel8x0_free(chip); @@ -2692,16 +2691,14 @@ snd_card_free(card); return err; } - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_intel8x0_remove(struct pci_dev *pci) { - intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -2710,10 +2707,7 @@ .id_table = snd_intel8x0_ids, .probe = snd_intel8x0_probe, .remove = __devexit_p(snd_intel8x0_remove), -#ifdef CONFIG_PM - .suspend = snd_intel8x0_suspend, - .resume = snd_intel8x0_resume, -#endif + SND_PCI_PM_CALLBACKS }; @@ -2817,12 +2811,9 @@ { int err; - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Intel ICH soundcard not found or device busy\n"); -#endif + if ((err = pci_module_init(&driver)) < 0) return err; - } + #if defined(SUPPORT_JOYSTICK) || defined(SUPPORT_MIDI) if (pci_module_init(&joystick_driver) < 0) { snd_printdd(KERN_INFO "no joystick found\n"); @@ -2847,33 +2838,3 @@ module_init(alsa_card_intel8x0_init) module_exit(alsa_card_intel8x0_exit) - -#ifndef MODULE - -/* format is: snd-intel8x0=enable,index,id,ac97_clock,ac97_quirk,mpu_port,joystick */ - -static int __init alsa_card_intel8x0_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&ac97_clock[nr_dev]) == 2 && - get_option(&str,&ac97_quirk[nr_dev]) == 2 -#ifdef SUPPORT_MIDI - && get_option(&str,&mpu_port[nr_dev]) == 2 -#endif -#ifdef SUPPORT_JOYSTICK - && get_option(&str,&joystick[nr_dev]) == 2 -#endif - ); - nr_dev++; - return 1; -} - -__setup("snd-intel8x0=", alsa_card_intel8x0_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c --- a/sound/pci/intel8x0m.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/intel8x0m.c 2004-05-26 15:01:36 -07:00 @@ -31,12 +31,12 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/ac97_codec.h> #include <sound/info.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -56,17 +56,18 @@ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ static int ac97_clock[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Intel i8x0 modemcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Intel i8x0 modemcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Intel i8x0 modemcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(ac97_clock, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ac97_clock, int, boot_devs, 0444); MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (0 = auto-detect)."); MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:0"); @@ -266,10 +267,6 @@ u32 int_sta_reg; /* interrupt status register */ u32 int_sta_mask; /* interrupt status mask */ unsigned int pcm_pos_shift; - -#ifdef CONFIG_PM - int in_suspend; -#endif }; static struct pci_device_id snd_intel8x0m_ids[] = { @@ -905,6 +902,7 @@ memset(&ac97, 0, sizeof(ac97)); ac97.private_data = chip; ac97.private_free = snd_intel8x0_mixer_free_ac97; + ac97.scaps = AC97_SCAP_SKIP_AUDIO; glob_sta = igetdword(chip, ICHREG(GLOB_STA)); bus.write = snd_intel8x0_codec_write; @@ -1081,72 +1079,31 @@ /* * power management */ -static void intel8x0_suspend(intel8x0_t *chip) +static int intel8x0m_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return -EINVAL); int i; - if (chip->in_suspend || - card->power_state == SNDRV_CTL_POWER_D3hot) - return; - - chip->in_suspend = 1; for (i = 0; i < chip->pcm_devs; i++) snd_pcm_suspend_all(chip->pcm[i]); + if (chip->ac97) + snd_ac97_suspend(chip->ac97); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void intel8x0_resume(intel8x0_t *chip) +static int intel8x0m_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; - - if (! chip->in_suspend || - card->power_state == SNDRV_CTL_POWER_D0) - return; - + intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return -EINVAL); pci_enable_device(chip->pci); pci_set_master(chip->pci); snd_intel8x0_chip_init(chip, 0); if (chip->ac97) snd_ac97_resume(chip->ac97); - chip->in_suspend = 0; snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int snd_intel8x0m_suspend(struct pci_dev *dev, u32 state) -{ - intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return -ENXIO); - intel8x0_suspend(chip); - return 0; -} -static int snd_intel8x0m_resume(struct pci_dev *dev) -{ - intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return -ENXIO); - intel8x0_resume(chip); return 0; } - -/* callback */ -static int snd_intel8x0_set_power_state(snd_card_t *card, unsigned int power_state) -{ - intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->power_state_private_data, return -ENXIO); - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - intel8x0_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - intel8x0_suspend(chip); - break; - default: - return -EINVAL; - } - return 0; -} - #endif /* CONFIG_PM */ static void snd_intel8x0m_proc_read(snd_info_entry_t * entry, @@ -1338,10 +1295,7 @@ return err; } -#ifdef CONFIG_PM - card->set_power_state = snd_intel8x0_set_power_state; - card->power_state_private_data = chip; -#endif + snd_card_set_pm_callback(card, intel8x0m_suspend, intel8x0m_resume, chip); if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { snd_intel8x0_free(chip); @@ -1436,16 +1390,14 @@ snd_card_free(card); return err; } - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_intel8x0m_remove(struct pci_dev *pci) { - intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -1454,25 +1406,13 @@ .id_table = snd_intel8x0m_ids, .probe = snd_intel8x0m_probe, .remove = __devexit_p(snd_intel8x0m_remove), -#ifdef CONFIG_PM - .suspend = snd_intel8x0m_suspend, - .resume = snd_intel8x0m_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_intel8x0m_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Intel ICH modemcard not found or device busy\n"); -#endif - return err; - } - - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_intel8x0m_exit(void) @@ -1482,26 +1422,3 @@ module_init(alsa_card_intel8x0m_init) module_exit(alsa_card_intel8x0m_exit) - -#ifndef MODULE - -/* format is: snd-intel8x0=enable,index,id,ac97_clock,mpu_port,joystick */ - -static int __init alsa_card_intel8x0m_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&ac97_clock[nr_dev]) == 2 - ); - nr_dev++; - return 1; -} - -__setup("snd-intel8x0m=", alsa_card_intel8x0m_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c --- a/sound/pci/korg1212/korg1212.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/korg1212/korg1212.c 2004-05-26 15:01:35 -07:00 @@ -26,13 +26,13 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/wait.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/info.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/pcm_params.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/io.h> @@ -417,14 +417,15 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE; /* Enable this card */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Korg 1212 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Korg 1212 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>"); @@ -2504,15 +2505,14 @@ snd_card_free(card); return err; } - pci_set_drvdata(pci, korg1212); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_korg1212_remove(struct pci_dev *pci) { - korg1212_t *korg1212 = pci_get_drvdata(pci); - snd_card_free(korg1212->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -2525,15 +2525,7 @@ static int __init alsa_card_korg1212_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "No Korg 1212IO cards found\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_korg1212_exit(void) @@ -2543,25 +2535,3 @@ module_init(alsa_card_korg1212_init) module_exit(alsa_card_korg1212_exit) - -#ifndef MODULE - -/* format is: snd-korg1212=enable,index,id */ - -static int __init alsa_card_korg1212_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-korg1212=", alsa_card_korg1212_setup); - -#endif /* ifndef MODULE */ - diff -Nru a/sound/pci/maestro3.c b/sound/pci/maestro3.c --- a/sound/pci/maestro3.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/maestro3.c 2004-05-26 15:01:36 -07:00 @@ -39,13 +39,13 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/vmalloc.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/info.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/mpu401.h> #include <sound/ac97_codec.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Zach Brown <zab@zabbo.net>, Takashi Iwai <tiwai@suse.de>"); @@ -63,20 +63,21 @@ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* all enabled */ static int external_amp[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; static int amp_gpio[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = -1}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable this soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(external_amp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(external_amp, bool, boot_devs, 0444); MODULE_PARM_DESC(external_amp, "Enable external amp for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(external_amp, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); -MODULE_PARM(amp_gpio, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(amp_gpio, int, boot_devs, 0444); MODULE_PARM_DESC(amp_gpio, "GPIO pin number for external amp. (default = -1)"); MODULE_PARM_SYNTAX(amp_gpio, SNDRV_ENABLED); @@ -2410,18 +2411,16 @@ * APM support */ #ifdef CONFIG_PM - -static void m3_suspend(m3_t *chip) +static int m3_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + m3_t *chip = snd_magic_cast(m3_t, card->pm_private_data, return -EINVAL); int i, index; if (chip->suspend_mem == NULL) - return; - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; + return 0; snd_pcm_suspend_all(chip->pcm); + snd_ac97_suspend(chip->ac97); big_mdelay(10); /* give the assp a chance to idle.. */ @@ -2440,17 +2439,16 @@ snd_m3_outw(chip, 0xffff, 0x54); snd_m3_outw(chip, 0xffff, 0x56); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void m3_resume(m3_t *chip) +static int m3_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + m3_t *chip = snd_magic_cast(m3_t, card->pm_private_data, return -EINVAL); int i, index; if (chip->suspend_mem == NULL) - return; - if (card->power_state == SNDRV_CTL_POWER_D0) - return; + return 0; /* first lets just bring everything back. .*/ snd_m3_outw(chip, 0, 0x54); @@ -2481,41 +2479,8 @@ snd_m3_amp_enable(chip, 1); snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int snd_m3_suspend(struct pci_dev *pci, u32 state) -{ - m3_t *chip = snd_magic_cast(m3_t, pci_get_drvdata(pci), return -ENXIO); - m3_suspend(chip); - return 0; -} -static int snd_m3_resume(struct pci_dev *pci) -{ - m3_t *chip = snd_magic_cast(m3_t, pci_get_drvdata(pci), return -ENXIO); - m3_resume(chip); - return 0; -} - -/* callback */ -static int snd_m3_set_power_state(snd_card_t *card, unsigned int power_state) -{ - m3_t *chip = snd_magic_cast(m3_t, card->power_state_private_data, return -ENXIO); - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - m3_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - m3_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } - #endif /* CONFIG_PM */ @@ -2651,11 +2616,9 @@ #ifdef CONFIG_PM chip->suspend_mem = vmalloc(sizeof(u16) * (REV_B_CODE_MEMORY_LENGTH + REV_B_DATA_MEMORY_LENGTH)); if (chip->suspend_mem == NULL) - snd_printk("can't allocate apm buffer\n"); - else { - card->set_power_state = snd_m3_set_power_state; - card->power_state_private_data = chip; - } + snd_printk(KERN_WARNING "can't allocate apm buffer\n"); + else + snd_card_set_pm_callback(card, m3_suspend, m3_resume, chip); #endif if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { @@ -2738,16 +2701,14 @@ printk(KERN_WARNING "maestro3: no midi support.\n"); #endif - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_m3_remove(struct pci_dev *pci) { - m3_t *chip = snd_magic_cast(m3_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -2756,23 +2717,12 @@ .id_table = snd_m3_ids, .probe = snd_m3_probe, .remove = __devexit_p(snd_m3_remove), -#ifdef CONFIG_PM - .suspend = snd_m3_suspend, - .resume = snd_m3_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_m3_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Maestro3/Allegro soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_m3_exit(void) @@ -2782,26 +2732,3 @@ module_init(alsa_card_m3_init) module_exit(alsa_card_m3_exit) - -#ifndef MODULE - -/* format is: snd-maestro3=enable,index,id,external_amp,amp_gpio */ - -static int __init alsa_card_maestro3_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&external_amp[nr_dev]) == 2 && - get_option(&str,&_gpio[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-maestro3=", alsa_card_maestro3_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c --- a/sound/pci/mixart/mixart.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/mixart/mixart.c 2004-05-26 15:01:36 -07:00 @@ -25,8 +25,8 @@ #include <linux/init.h> #include <linux/interrupt.h> #include <linux/pci.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/info.h> #include <sound/control.h> @@ -48,16 +48,17 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static int boot_devs; #define chip_t mixart_t -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Digigram " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Digigram " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Digigram " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); @@ -1432,15 +1433,7 @@ static int __init alsa_card_mixart_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - snd_printk(KERN_ERR "Digigram miXart soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_mixart_exit(void) @@ -1450,24 +1443,3 @@ module_init(alsa_card_mixart_init) module_exit(alsa_card_mixart_exit) - -#ifndef MODULE - -/* format is: snd-mixart=enable,index,id */ - -static int __init alsa_card_mixart_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-mixart=", alsa_card_mixart_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c --- a/sound/pci/nm256/nm256.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/nm256/nm256.c 2004-05-26 15:01:36 -07:00 @@ -31,12 +31,12 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/info.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/ac97_codec.h> -#define SNDRV_GET_ID #include <sound/initval.h> #define CARD_NAME "NeoMagic 256AV/ZX" @@ -62,32 +62,33 @@ static int buffer_top[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; /* not specified */ static int use_cache[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; /* disabled */ static int vaio_hack[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; /* disabled */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable this soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(playback_bufsize, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(playback_bufsize, int, boot_devs, 0444); MODULE_PARM_DESC(playback_bufsize, "DAC frame size in kB for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(playback_bufsize, SNDRV_ENABLED); -MODULE_PARM(capture_bufsize, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(capture_bufsize, int, boot_devs, 0444); MODULE_PARM_DESC(capture_bufsize, "ADC frame size in kB for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(capture_bufsize, SNDRV_ENABLED); -MODULE_PARM(force_ac97, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(force_ac97, bool, boot_devs, 0444); MODULE_PARM_DESC(force_ac97, "Force to use AC97 codec for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(force_ac97, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -MODULE_PARM(buffer_top, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(buffer_top, int, boot_devs, 0444); MODULE_PARM_DESC(buffer_top, "Set the top address of audio buffer for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(buffer_top, SNDRV_ENABLED); -MODULE_PARM(use_cache, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(use_cache, bool, boot_devs, 0444); MODULE_PARM_DESC(use_cache, "Enable the cache for coefficient table access."); MODULE_PARM_SYNTAX(use_cache, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -MODULE_PARM(vaio_hack, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(vaio_hack, bool, boot_devs, 0444); MODULE_PARM_DESC(vaio_hack, "Enable workaround for Sony VAIO notebooks."); MODULE_PARM_SYNTAX(vaio_hack, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); @@ -274,11 +275,15 @@ #ifndef PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO #define PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO 0x8006 #endif +#ifndef PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO +#define PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO 0x8016 +#endif static struct pci_device_id snd_nm256_ids[] = { {PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {PCI_VENDOR_ID_NEOMAGIC, PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0,}, }; @@ -1283,24 +1288,20 @@ * APM event handler, so the card is properly reinitialized after a power * event. */ -static void nm256_suspend(nm256_t *chip) +static int nm256_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; - - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; + nm256_t *chip = snd_magic_cast(nm256_t, card->pm_private_data, return -EINVAL); snd_pcm_suspend_all(chip->pcm); + snd_ac97_suspend(chip->ac97); chip->coeffs_current = 0; snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void nm256_resume(nm256_t *chip) +static int nm256_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; - - if (card->power_state == SNDRV_CTL_POWER_D0) - return; + nm256_t *chip = snd_magic_cast(nm256_t, card->pm_private_data, return -EINVAL); /* Perform a full reset on the hardware */ pci_enable_device(chip->pci); @@ -1310,41 +1311,8 @@ snd_ac97_resume(chip->ac97); snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int snd_nm256_suspend(struct pci_dev *dev, u32 state) -{ - nm256_t *chip = snd_magic_cast(nm256_t, pci_get_drvdata(dev), return -ENXIO); - nm256_suspend(chip); - return 0; -} -static int snd_nm256_resume(struct pci_dev *dev) -{ - nm256_t *chip = snd_magic_cast(nm256_t, pci_get_drvdata(dev), return -ENXIO); - nm256_resume(chip); - return 0; -} - -/* callback */ -static int snd_nm256_set_power_state(snd_card_t *card, unsigned int power_state) -{ - nm256_t *chip = snd_magic_cast(nm256_t, card->power_state_private_data, return -ENXIO); - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - nm256_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - nm256_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } - #endif /* CONFIG_PM */ static int snd_nm256_free(nm256_t *chip) @@ -1552,10 +1520,7 @@ // pci_set_master(pci); /* needed? */ -#ifdef CONFIG_PM - card->set_power_state = snd_nm256_set_power_state; - card->power_state_private_data = chip; -#endif + snd_card_set_pm_callback(card, nm256_suspend, nm256_resume, chip); if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) goto __error; @@ -1571,6 +1536,21 @@ } +struct nm256_quirk { + unsigned short vendor; + unsigned short device; + int type; +}; + +#define NM_BLACKLISTED 1 + +static struct nm256_quirk nm256_quirks[] __devinitdata = { + /* HP omnibook 4150 has cs4232 codec internally */ + { .vendor = 0x103c, .device = 0x0007, .type = NM_BLACKLISTED }, + { } /* terminator */ +}; + + static int __devinit snd_nm256_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) { @@ -1579,6 +1559,8 @@ nm256_t *chip; int err; unsigned int xbuffer_top; + struct nm256_quirk *q; + u16 subsystem_vendor, subsystem_device; if ((err = pci_enable_device(pci)) < 0) return err; @@ -1590,6 +1572,18 @@ return -ENOENT; } + pci_read_config_word(pci, PCI_SUBSYSTEM_VENDOR_ID, &subsystem_vendor); + pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &subsystem_device); + + for (q = nm256_quirks; q->vendor; q++) { + if (q->vendor == subsystem_vendor && q->device == subsystem_device) { + if (q->type == NM_BLACKLISTED) { + printk(KERN_INFO "nm256: The device is blacklisted. Loading stopped\n"); + return -ENODEV; + } + } + } + card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); if (card == NULL) return -ENOMEM; @@ -1601,6 +1595,9 @@ case PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO: strcpy(card->driver, "NM256ZX"); break; + case PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO: + strcpy(card->driver, "NM256XL+"); + break; default: snd_printk("invalid device id 0x%x\n", pci->device); snd_card_free(card); @@ -1641,16 +1638,14 @@ return err; } - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_nm256_remove(struct pci_dev *pci) { - nm256_t *chip = snd_magic_cast(nm256_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -1660,23 +1655,13 @@ .id_table = snd_nm256_ids, .probe = snd_nm256_probe, .remove = __devexit_p(snd_nm256_remove), -#ifdef CONFIG_PM - .suspend = snd_nm256_suspend, - .resume = snd_nm256_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_nm256_init(void) { - int err; - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "NeoMagic 256 audio soundchip not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_nm256_exit(void) @@ -1686,31 +1671,3 @@ module_init(alsa_card_nm256_init) module_exit(alsa_card_nm256_exit) - -#ifndef MODULE - -/* format is: snd-nm256=enable,index,id, - playback_bufsize,capture_bufsize, - force_ac97,buffer_top,use_cache */ - -static int __init alsa_card_nm256_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&playback_bufsize[nr_dev]) == 2 && - get_option(&str,&capture_bufsize[nr_dev]) == 2 && - get_option(&str,&force_ac97[nr_dev]) == 2 && - get_option(&str,&buffer_top[nr_dev]) == 2 && - get_option(&str,&use_cache[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-nm256=", alsa_card_nm256_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/rme32.c b/sound/pci/rme32.c --- a/sound/pci/rme32.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/rme32.c 2004-05-26 15:01:36 -07:00 @@ -61,6 +61,7 @@ #include <linux/interrupt.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/info.h> @@ -68,7 +69,6 @@ #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/asoundef.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/io.h> @@ -76,14 +76,15 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for RME Digi32 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for RME Digi32 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable RME Digi32 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); MODULE_AUTHOR("Martin Langer <martin-langer@gmx.de>"); @@ -1995,15 +1996,7 @@ static int __init alsa_card_rme32_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - snd_printk("No RME Digi32 cards found\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_rme32_exit(void) @@ -2013,22 +2006,3 @@ module_init(alsa_card_rme32_init) module_exit(alsa_card_rme32_exit) - -#ifndef MODULE - -static int __init alsa_card_rme32_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void) (get_option(&str, &enable[nr_dev]) == 2 && - get_option(&str, &index[nr_dev]) == 2 && - get_id(&str, &id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-rme32=", alsa_card_rme32_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/rme96.c b/sound/pci/rme96.c --- a/sound/pci/rme96.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/rme96.c 2004-05-26 15:01:35 -07:00 @@ -29,6 +29,7 @@ #include <linux/interrupt.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/info.h> @@ -36,7 +37,6 @@ #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/asoundef.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/io.h> @@ -57,14 +57,15 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for RME Digi96 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for RME Digi96 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable RME Digi96 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); @@ -2565,15 +2566,7 @@ static int __init alsa_card_rme96_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "No RME Digi96 cards found\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_rme96_exit(void) @@ -2583,24 +2576,3 @@ module_init(alsa_card_rme96_init) module_exit(alsa_card_rme96_exit) - -#ifndef MODULE - -/* format is: snd-rme96=enable,index,id */ - -static int __init alsa_card_rme96_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-rme96=", alsa_card_rme96_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c --- a/sound/pci/rme9652/hdsp.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/rme9652/hdsp.c 2004-05-26 15:01:35 -07:00 @@ -27,6 +27,7 @@ #include <linux/interrupt.h> #include <linux/slab.h> #include <linux/pci.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> @@ -35,7 +36,6 @@ #include <sound/asoundef.h> #include <sound/rawmidi.h> #include <sound/hwdep.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/hdsp.h> @@ -48,20 +48,21 @@ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ static int precise_ptr[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0 }; /* Enable precise pointer */ static int line_outs_monitor[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0}; /* Send all inputs/playback to line outs */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for RME Hammerfall DSP interface."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable/disable specific Hammerfall DSP soundcards."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(precise_ptr, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(precise_ptr, bool, boot_devs, 0444); MODULE_PARM_DESC(precise_ptr, "Enable precise pointer (doesn't work reliably)."); MODULE_PARM_SYNTAX(precise_ptr, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -MODULE_PARM(line_outs_monitor,"1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(line_outs_monitor, bool, boot_devs, 0444); MODULE_PARM_DESC(line_outs_monitor, "Send all input and playback streams to line outs by default."); MODULE_PARM_SYNTAX(line_outs_monitor, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); MODULE_AUTHOR("Paul Davis <paul@linuxaudiosystems.com>, Marcus Andersson, Thomas Charbonnel <thomas@undata.org>"); @@ -634,6 +635,7 @@ case 0xa: return (64 * out) + (32 + (in)); case 0x96: + case 0x97: return (32 * out) + (16 + (in)); default: return (52 * out) + (26 + (in)); @@ -646,6 +648,7 @@ case 0xa: return (64 * out) + in; case 0x96: + case 0x97: return (32 * out) + in; default: return (52 * out) + in; @@ -4120,10 +4123,10 @@ return -EIO; } - spin_lock_irq(&hdsp->lock); + spin_lock(&hdsp->lock); if (!hdsp->running) hdsp_reset_hw_pointer(hdsp); - spin_unlock_irq(&hdsp->lock); + spin_unlock(&hdsp->lock); return result; } @@ -5018,6 +5021,7 @@ is_9652 = 1; break; case 0x96: + case 0x97: hdsp->card_name = "RME HDSP 9632"; hdsp->max_channels = 16; is_9632 = 1; @@ -5198,14 +5202,7 @@ static int __init alsa_card_hdsp_init(void) { - if (pci_module_init(&driver) < 0) { -#ifdef MODULE - printk(KERN_ERR "RME Hammerfall-DSP: no cards found\n"); -#endif - return -ENODEV; - } - - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_hdsp_exit(void) @@ -5215,24 +5212,3 @@ module_init(alsa_card_hdsp_init) module_exit(alsa_card_hdsp_exit) - -#ifndef MODULE - -/* format is: snd-hdsp=enable,index,id */ - -static int __init alsa_card_hdsp_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-hdsp=", alsa_card_hdsp_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c --- a/sound/pci/rme9652/rme9652.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/rme9652/rme9652.c 2004-05-26 15:01:35 -07:00 @@ -26,13 +26,13 @@ #include <linux/interrupt.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/control.h> #include <sound/pcm.h> #include <sound/info.h> #include <sound/asoundef.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/current.h> @@ -42,17 +42,18 @@ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ static int precise_ptr[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0 }; /* Enable precise pointer */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for RME Digi9652 (Hammerfall) soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for RME Digi9652 (Hammerfall) soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable/disable specific RME96{52,36} soundcards."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(precise_ptr, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(precise_ptr, bool, boot_devs, 0444); MODULE_PARM_DESC(precise_ptr, "Enable precise pointer (doesn't work reliably)."); MODULE_PARM_SYNTAX(precise_ptr, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); MODULE_AUTHOR("Paul Davis <pbd@op.net>, Winfried Ritsch"); @@ -2262,10 +2263,10 @@ rme9652_t *rme9652 = _snd_pcm_substream_chip(substream); int result = 0; - spin_lock_irq(&rme9652->lock); + spin_lock(&rme9652->lock); if (!rme9652->running) rme9652_reset_hw_pointer(rme9652); - spin_unlock_irq(&rme9652->lock); + spin_unlock(&rme9652->lock); return result; } @@ -2748,14 +2749,7 @@ static int __init alsa_card_hammerfall_init(void) { - if (pci_module_init(&driver) < 0) { -#ifdef MODULE - printk(KERN_ERR "RME Digi9652/Digi9636: no cards found\n"); -#endif - return -ENODEV; - } - - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_hammerfall_exit(void) @@ -2765,24 +2759,3 @@ module_init(alsa_card_hammerfall_init) module_exit(alsa_card_hammerfall_exit) - -#ifndef MODULE - -/* format is: snd-rme9652=enable,index,id */ - -static int __init alsa_card_rme9652_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-rme9652=", alsa_card_rme9652_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c --- a/sound/pci/sonicvibes.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/sonicvibes.c 2004-05-26 15:01:36 -07:00 @@ -29,6 +29,7 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> @@ -36,7 +37,6 @@ #include <sound/control.h> #include <sound/mpu401.h> #include <sound/opl3.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/io.h> @@ -60,23 +60,24 @@ static int reverb[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; static int mge[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; static unsigned int dmaio = 0x7a00; /* DDMA i/o address */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for S3 SonicVibes soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for S3 SonicVibes soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable S3 SonicVibes soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(reverb, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(reverb, bool, boot_devs, 0444); MODULE_PARM_DESC(reverb, "Enable reverb (SRAM is present) for S3 SonicVibes soundcard."); MODULE_PARM_SYNTAX(reverb, SNDRV_ENABLED "," SNDRV_ENABLE_DESC); -MODULE_PARM(mge, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mge, bool, boot_devs, 0444); MODULE_PARM_DESC(mge, "MIC Gain Enable for S3 SonicVibes soundcard."); MODULE_PARM_SYNTAX(mge, SNDRV_ENABLED "," SNDRV_ENABLE_DESC); -MODULE_PARM(dmaio, "i"); +module_param(dmaio, uint, 0444); MODULE_PARM_DESC(dmaio, "DDMA i/o base address for S3 SonicVibes soundcard."); MODULE_PARM_SYNTAX(dmaio, "global," SNDRV_PORT_DESC); @@ -1535,15 +1536,7 @@ static int __init alsa_card_sonicvibes_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "S3 SonicVibes soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_sonicvibes_exit(void) @@ -1553,28 +1546,3 @@ module_init(alsa_card_sonicvibes_init) module_exit(alsa_card_sonicvibes_exit) - -#ifndef MODULE - -/* format is: snd-sonicvibes=enable,index,id, - reverb,mge,dmaio */ - -static int __init alsa_card_sonicvibes_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&reverb[nr_dev]) == 2 && - get_option(&str,&mge[nr_dev]) == 2 && - get_option(&str,(int *)&dmaio) == 2); - nr_dev++; - return 1; -} - -__setup("snd-sonicvibes=", alsa_card_sonicvibes_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c --- a/sound/pci/trident/trident.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/trident/trident.c 2004-05-26 15:01:35 -07:00 @@ -25,9 +25,9 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/time.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/trident.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, <audio@tridentmicro.com>"); @@ -52,20 +52,21 @@ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ static int pcm_channels[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 32}; static int wavetable_size[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 8192}; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Trident 4DWave PCI soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Trident 4DWave PCI soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Trident 4DWave PCI soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(pcm_channels, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pcm_channels, int, boot_devs, 0444); MODULE_PARM_DESC(pcm_channels, "Number of hardware channels assigned for PCM."); MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",default:32,allows:{{1,32}}"); -MODULE_PARM(wavetable_size, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(wavetable_size, int, boot_devs, 0444); MODULE_PARM_DESC(wavetable_size, "Maximum memory size in kB for wavetable synth."); MODULE_PARM_SYNTAX(wavetable_size, SNDRV_ENABLED ",default:8192,skill:advanced"); @@ -169,56 +170,28 @@ snd_card_free(card); return err; } - pci_set_drvdata(pci, trident); + pci_set_drvdata(pci, card); dev++; return 0; } static void __devexit snd_trident_remove(struct pci_dev *pci) { - trident_t *trident = snd_magic_cast(trident_t, pci_get_drvdata(pci), return); - if (trident) - snd_card_free(trident->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } -#ifdef CONFIG_PM -static int snd_card_trident_suspend(struct pci_dev *pci, u32 state) -{ - trident_t *chip = snd_magic_cast(trident_t, pci_get_drvdata(pci), return -ENXIO); - snd_trident_suspend(chip); - return 0; -} -static int snd_card_trident_resume(struct pci_dev *pci) -{ - trident_t *chip = snd_magic_cast(trident_t, pci_get_drvdata(pci), return -ENXIO); - snd_trident_resume(chip); - return 0; -} -#endif - static struct pci_driver driver = { .name = "Trident4DWaveAudio", .id_table = snd_trident_ids, .probe = snd_trident_probe, .remove = __devexit_p(snd_trident_remove), -#ifdef CONFIG_PM - .suspend = snd_card_trident_suspend, - .resume = snd_card_trident_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_trident_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Trident 4DWave PCI soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_trident_exit(void) @@ -228,27 +201,3 @@ module_init(alsa_card_trident_init) module_exit(alsa_card_trident_exit) - -#ifndef MODULE - -/* format is: snd-trident=enable,index,id, - pcm_channels,wavetable_size */ - -static int __init alsa_card_trident_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option(&str,&pcm_channels[nr_dev]) == 2 && - get_option(&str,&wavetable_size[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-trident=", alsa_card_trident_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/trident/trident_main.c b/sound/pci/trident/trident_main.c --- a/sound/pci/trident/trident_main.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/trident/trident_main.c 2004-05-26 15:01:36 -07:00 @@ -50,7 +50,8 @@ static int snd_trident_pcm_mixer_free(trident_t *trident, snd_trident_voice_t * voice, snd_pcm_substream_t *substream); static irqreturn_t snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs); #ifdef CONFIG_PM -static int snd_trident_set_power_state(snd_card_t *card, unsigned int power_state); +static int snd_trident_suspend(snd_card_t *card, unsigned int state); +static int snd_trident_resume(snd_card_t *card, unsigned int state); #endif static int snd_trident_sis_reset(trident_t *trident); @@ -3646,10 +3647,8 @@ snd_trident_enable_eso(trident); -#ifdef CONFIG_PM - card->set_power_state = snd_trident_set_power_state; - card->power_state_private_data = trident; -#endif + + snd_card_set_pm_callback(card, snd_trident_suspend, snd_trident_resume, trident); snd_trident_proc_init(trident); if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, trident, &ops)) < 0) { @@ -3949,19 +3948,21 @@ } #ifdef CONFIG_PM - -void snd_trident_suspend(trident_t *trident) +static int snd_trident_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = trident->card; + trident_t *trident = snd_magic_cast(trident_t, card->pm_private_data, return -EINVAL); - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; trident->in_suspend = 1; snd_pcm_suspend_all(trident->pcm); if (trident->foldback) snd_pcm_suspend_all(trident->foldback); if (trident->spdif) snd_pcm_suspend_all(trident->spdif); + + snd_ac97_suspend(trident->ac97); + if (trident->ac97_sec) + snd_ac97_suspend(trident->ac97_sec); + switch (trident->device) { case TRIDENT_DEVICE_ID_DX: case TRIDENT_DEVICE_ID_NX: @@ -3970,14 +3971,12 @@ break; } snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -void snd_trident_resume(trident_t *trident) +static int snd_trident_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = trident->card; - - if (card->power_state == SNDRV_CTL_POWER_D0) - return; + trident_t *trident = snd_magic_cast(trident_t, card->pm_private_data, return -EINVAL); pci_enable_device(trident->pci); if (pci_set_dma_mask(trident->pci, 0x3fffffff) < 0 || @@ -3998,6 +3997,8 @@ } snd_ac97_resume(trident->ac97); + if (trident->ac97_sec) + snd_ac97_resume(trident->ac97_sec); /* restore some registers */ outl(trident->musicvol_wavevol, TRID_REG(trident, T4D_MUSICVOL_WAVEVOL)); @@ -4006,28 +4007,8 @@ snd_power_change_state(card, SNDRV_CTL_POWER_D0); trident->in_suspend = 0; + return 0; } - -static int snd_trident_set_power_state(snd_card_t *card, unsigned int power_state) -{ - trident_t *chip = snd_magic_cast(trident_t, card->power_state_private_data, return -ENXIO); - - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_trident_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_trident_suspend(chip); - break; - default: - return -EINVAL; - } - return 0; -} - #endif /* CONFIG_PM */ EXPORT_SYMBOL(snd_trident_alloc_voice); diff -Nru a/sound/pci/via82xx.c b/sound/pci/via82xx.c --- a/sound/pci/via82xx.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/via82xx.c 2004-05-26 15:01:36 -07:00 @@ -51,13 +51,13 @@ #include <linux/pci.h> #include <linux/slab.h> #include <linux/gameport.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/info.h> #include <sound/ac97_codec.h> #include <sound/mpu401.h> -#define SNDRV_GET_ID #include <sound/initval.h> #if 0 @@ -84,31 +84,32 @@ static int ac97_clock[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 48000}; static int ac97_quirk[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = AC97_TUNE_DEFAULT}; static int dxs_support[SNDRV_CARDS]; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for VIA 82xx bridge."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for VIA 82xx bridge."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable audio part of VIA 82xx bridge."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 port. (VT82C686x only)"); MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT_DESC); #ifdef SUPPORT_JOYSTICK -MODULE_PARM(joystick, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(joystick, bool, boot_devs, 0444); MODULE_PARM_DESC(joystick, "Enable joystick. (VT82C686x only)"); MODULE_PARM_SYNTAX(joystick, SNDRV_ENABLE_DESC "," SNDRV_BOOLEAN_FALSE_DESC); #endif -MODULE_PARM(ac97_clock, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ac97_clock, int, boot_devs, 0444); MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (default 48000Hz)."); MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:48000"); -MODULE_PARM(ac97_quirk, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ac97_quirk, int, boot_devs, 0444); MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware."); MODULE_PARM_SYNTAX(ac97_quirk, SNDRV_ENABLED ",allows:{{-1,4}},dialog:list,default:-1"); -MODULE_PARM(dxs_support, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(dxs_support, int, boot_devs, 0444); MODULE_PARM_DESC(dxs_support, "Support for DXS channels (0 = auto, 1 = enable, 2 = disable, 3 = 48k only, 4 = no VRA)"); MODULE_PARM_SYNTAX(dxs_support, SNDRV_ENABLED ",allows:{{0,4}},dialog:list"); @@ -368,6 +369,14 @@ unsigned char old_legacy; unsigned char old_legacy_cfg; +#ifdef CONFIG_PM + unsigned char legacy_saved; + unsigned char legacy_cfg_saved; + unsigned char spdif_ctrl_saved; + unsigned char capture_src_saved[2]; + unsigned int mpu_port_saved; + u32 pci_state[16]; +#endif unsigned char playback_volume[4][2]; /* for VIA8233/C/8235; default = 0 */ @@ -384,6 +393,7 @@ unsigned int no_vra: 1; /* no need to set VRA on DXS channels */ unsigned int spdif_on: 1; /* only spdif rates work to external DACs */ + snd_pcm_t *pcms[2]; snd_rawmidi_t *rmidi; ac97_bus_t *ac97_bus; @@ -1289,6 +1299,7 @@ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_via8233_capture_ops); pcm->private_data = chip; strcpy(pcm->name, chip->card->shortname); + chip->pcms[0] = pcm; /* set up playbacks */ for (i = 0; i < 4; i++) init_viadev(chip, i, 0x10 * i, 0); @@ -1307,6 +1318,7 @@ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_via8233_capture_ops); pcm->private_data = chip; strcpy(pcm->name, chip->card->shortname); + chip->pcms[1] = pcm; /* set up playback */ init_viadev(chip, chip->multi_devno, VIA_REG_MULTPLAY_STATUS, 0); /* set up capture */ @@ -1341,6 +1353,7 @@ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_via8233_capture_ops); pcm->private_data = chip; strcpy(pcm->name, chip->card->shortname); + chip->pcms[0] = pcm; /* set up playback */ init_viadev(chip, chip->multi_devno, VIA_REG_MULTPLAY_STATUS, 0); /* capture */ @@ -1357,6 +1370,7 @@ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_via8233_playback_ops); pcm->private_data = chip; strcpy(pcm->name, chip->card->shortname); + chip->pcms[1] = pcm; /* set up playback */ init_viadev(chip, chip->playback_devno, 0x30, 0); @@ -1387,6 +1401,7 @@ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_via686_capture_ops); pcm->private_data = chip; strcpy(pcm->name, chip->card->shortname); + chip->pcms[0] = pcm; init_viadev(chip, 0, VIA_REG_PLAYBACK_STATUS, 0); init_viadev(chip, 1, VIA_REG_CAPTURE_STATUS, 1); @@ -1404,8 +1419,11 @@ static int snd_via8233_capture_source_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) { + /* formerly they were "Line" and "Mic", but it looks like that they + * have nothing to do with the actual physical connections... + */ static char *texts[2] = { - "Line", "Mic" + "Input1", "Input2" }; uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; @@ -1584,6 +1602,12 @@ .name = "Mitac Mobo", .type = AC97_TUNE_ALC_JACK }, + { + .vendor = 0x161f, + .device = 0x202b, + .name = "Arima Notebook", + .type = AC97_TUNE_HP_ONLY, + }, { } /* terminator */ }; @@ -1667,6 +1691,9 @@ if (mpu_port[dev] >= 0x200) { /* force MIDI */ mpu_port[dev] &= 0xfffc; pci_write_config_dword(chip->pci, 0x18, mpu_port[dev] | 0x01); +#ifdef CONFIG_PM + chip->mpu_port_saved = mpu_port[dev]; +#endif } else { mpu_port[dev] = pci_resource_start(chip->pci, 2); } @@ -1725,6 +1752,11 @@ gameport_register_port(&chip->gameport); #endif +#ifdef CONFIG_PM + chip->legacy_saved = legacy; + chip->legacy_cfg_saved = legacy_cfg; +#endif + return 0; } @@ -1865,6 +1897,74 @@ return 0; } +#ifdef CONFIG_PM +/* + * power management + */ +static int snd_via82xx_suspend(snd_card_t *card, unsigned int state) +{ + via82xx_t *chip = snd_magic_cast(via82xx_t, card->pm_private_data, return -EINVAL); + int i; + + for (i = 0; i < 2; i++) + if (chip->pcms[i]) + snd_pcm_suspend_all(chip->pcms[i]); + for (i = 0; i < chip->num_devs; i++) + snd_via82xx_channel_reset(chip, &chip->devs[i]); + synchronize_irq(chip->irq); + snd_ac97_suspend(chip->ac97); + + /* save misc values */ + if (chip->chip_type != TYPE_VIA686) { + pci_read_config_byte(chip->pci, VIA8233_SPDIF_CTRL, &chip->spdif_ctrl_saved); + chip->capture_src_saved[0] = inb(chip->port + VIA_REG_CAPTURE_CHANNEL); + chip->capture_src_saved[1] = inb(chip->port + VIA_REG_CAPTURE_CHANNEL + 0x10); + } + + pci_save_state(chip->pci, chip->pci_state); + pci_set_power_state(chip->pci, 3); + pci_disable_device(chip->pci); + snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; +} + +static int snd_via82xx_resume(snd_card_t *card, unsigned int state) +{ + via82xx_t *chip = snd_magic_cast(via82xx_t, card->pm_private_data, return -EINVAL); + int idx, i; + + pci_enable_device(chip->pci); + pci_restore_state(chip->pci, chip->pci_state); + pci_set_power_state(chip->pci, 0); + + snd_via82xx_chip_init(chip); + + if (chip->chip_type == TYPE_VIA686) { + if (chip->mpu_port_saved) + pci_write_config_dword(chip->pci, 0x18, chip->mpu_port_saved | 0x01); + pci_write_config_byte(chip->pci, VIA_FUNC_ENABLE, chip->legacy_saved); + pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, chip->legacy_cfg_saved); + } else { + pci_write_config_byte(chip->pci, VIA8233_SPDIF_CTRL, chip->spdif_ctrl_saved); + outb(chip->capture_src_saved[0], chip->port + VIA_REG_CAPTURE_CHANNEL); + outb(chip->capture_src_saved[1], chip->port + VIA_REG_CAPTURE_CHANNEL + 0x10); + for (idx = 0; idx < 4; idx++) { + unsigned long port = chip->port + 0x10 * idx; + for (i = 0; i < 2; i++) + outb(chip->playback_volume[idx][i], port + VIA_REG_OFS_PLAYBACK_VOLUME_L + i); + } + } + + snd_ac97_resume(chip->ac97); + + for (i = 0; i < chip->num_devs; i++) + snd_via82xx_channel_reset(chip, &chip->devs[i]); + + snd_power_change_state(card, SNDRV_CTL_POWER_D0); + return 0; +} +#endif /* CONFIG_PM */ + static int snd_via82xx_free(via82xx_t *chip) { unsigned int i; @@ -2010,7 +2110,8 @@ static struct dxs_whitelist whitelist[] = { { .vendor = 0x1005, .device = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */ { .vendor = 0x1019, .device = 0x0996, .action = VIA_DXS_48K }, - { .vendor = 0x1043, .device = 0x8095, .action = VIA_DXS_ENABLE }, /* ASUS A7V8X */ + { .vendor = 0x1019, .device = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */ + { .vendor = 0x1043, .device = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/ { .vendor = 0x1043, .device = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */ { .vendor = 0x1043, .device = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/ { .vendor = 0x10cf, .device = 0x118e, .action = VIA_DXS_ENABLE }, /* FSC laptop */ @@ -2025,6 +2126,8 @@ { .vendor = 0x1462, .device = 0x7120, .action = VIA_DXS_ENABLE }, /* MSI KT4V */ { .vendor = 0x1462, .device = 0x5901, .action = VIA_DXS_NO_VRA }, /* MSI KT6 Delta-SR */ { .vendor = 0x1584, .device = 0x8120, .action = VIA_DXS_ENABLE }, /* Gericom/Targa/Vobis/Uniwill laptop */ + { .vendor = 0x161f, .device = 0x202b, .action = VIA_DXS_NO_VRA }, /* Amira Note book */ + { .vendor = 0x161f, .device = 0x2032, .action = VIA_DXS_48K }, /* m680x machines */ { .vendor = 0x1631, .device = 0xe004, .action = VIA_DXS_ENABLE }, /* Easy Note 3174, Packard Bell */ { .vendor = 0x1695, .device = 0x3005, .action = VIA_DXS_ENABLE }, /* EPoX EP-8K9A */ { .vendor = 0x1849, .device = 0x3059, .action = VIA_DXS_NO_VRA }, /* ASRock K7VM2 */ @@ -2145,6 +2248,9 @@ if ((err = snd_via8233_init_misc(chip, dev)) < 0) goto __error; } + + snd_card_set_pm_callback(card, snd_via82xx_suspend, snd_via82xx_resume, chip); + /* disable interrupts */ for (i = 0; i < chip->num_devs; i++) snd_via82xx_channel_reset(chip, &chip->devs[i]); @@ -2178,19 +2284,12 @@ .id_table = snd_via82xx_ids, .probe = snd_via82xx_probe, .remove = __devexit_p(snd_via82xx_remove), + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_via82xx_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "VIA 82xx soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_via82xx_exit(void) @@ -2200,33 +2299,3 @@ module_init(alsa_card_via82xx_init) module_exit(alsa_card_via82xx_exit) - -#ifndef MODULE - -/* format is: snd-via82xx=enable,index,id, - mpu_port,joystick, - ac97_quirk,ac97_clock,dxs_support */ - -static int __init alsa_card_via82xx_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2 && -#ifdef SUPPORT_JOYSTICK - get_option(&str,&joystick[nr_dev]) == 2 && -#endif - get_option(&str,&ac97_quirk[nr_dev]) == 2 && - get_option(&str,&ac97_clock[nr_dev]) == 2 && - get_option(&str,&dxs_support[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-via82xx=", alsa_card_via82xx_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/vx222/vx222.c b/sound/pci/vx222/vx222.c --- a/sound/pci/vx222/vx222.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/vx222/vx222.c 2004-05-26 15:01:36 -07:00 @@ -23,8 +23,8 @@ #include <linux/interrupt.h> #include <linux/pci.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include "vx222.h" @@ -43,20 +43,21 @@ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ static int mic[SNDRV_CARDS]; /* microphone */ static int ibl[SNDRV_CARDS]; /* microphone */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Digigram " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Digigram " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Digigram " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(mic, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(mic, bool, boot_devs, 0444); MODULE_PARM_DESC(mic, "Enable Microphone."); MODULE_PARM_SYNTAX(mic, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -MODULE_PARM(ibl, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ibl, int, boot_devs, 0444); MODULE_PARM_DESC(ibl, "Capture IBL size."); MODULE_PARM_SYNTAX(ibl, SNDRV_ENABLED); @@ -272,15 +273,7 @@ static int __init alsa_card_vx222_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Digigram VX222 soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_vx222_exit(void) @@ -290,24 +283,3 @@ module_init(alsa_card_vx222_init) module_exit(alsa_card_vx222_exit) - -#ifndef MODULE - -/* format is: snd-vx222=enable,index,id */ - -static int __init alsa_card_vx222_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-vx222=", alsa_card_vx222_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c --- a/sound/pci/ymfpci/ymfpci.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pci/ymfpci/ymfpci.c 2004-05-26 15:01:35 -07:00 @@ -23,11 +23,11 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/time.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/ymfpci.h> #include <sound/mpu401.h> #include <sound/opl3.h> -#define SNDRV_GET_ID #include <sound/initval.h> MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); @@ -50,28 +50,29 @@ static long joystick_port[SNDRV_CARDS]; #endif static int rear_switch[SNDRV_CARDS]; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for the Yamaha DS-XG PCI soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for the Yamaha DS-XG PCI soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Yamaha DS-XG soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(mpu_port, long, boot_devs, 0444); MODULE_PARM_DESC(mpu_port, "MPU-401 Port."); MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED); -MODULE_PARM(fm_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(fm_port, long, boot_devs, 0444); MODULE_PARM_DESC(fm_port, "FM OPL-3 Port."); MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED); #ifdef SUPPORT_JOYSTICK -MODULE_PARM(joystick_port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); +module_param_array(joystick_port, long, boot_devs, 0444); MODULE_PARM_DESC(joystick_port, "Joystick port address"); MODULE_PARM_SYNTAX(joystick_port, SNDRV_ENABLED); #endif -MODULE_PARM(rear_switch, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(rear_switch, bool, boot_devs, 0444); MODULE_PARM_DESC(rear_switch, "Enable shared rear/line-in switch"); MODULE_PARM_SYNTAX(rear_switch, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); @@ -311,31 +312,14 @@ snd_card_free(card); return err; } - pci_set_drvdata(pci, chip); + pci_set_drvdata(pci, card); dev++; return 0; } -#ifdef CONFIG_PM -static int snd_card_ymfpci_suspend(struct pci_dev *pci, u32 state) -{ - ymfpci_t *chip = snd_magic_cast(ymfpci_t, pci_get_drvdata(pci), return -ENXIO); - snd_ymfpci_suspend(chip); - return 0; -} -static int snd_card_ymfpci_resume(struct pci_dev *pci) -{ - ymfpci_t *chip = snd_magic_cast(ymfpci_t, pci_get_drvdata(pci), return -ENXIO); - snd_ymfpci_resume(chip); - return 0; -} -#endif - static void __devexit snd_card_ymfpci_remove(struct pci_dev *pci) { - ymfpci_t *chip = snd_magic_cast(ymfpci_t, pci_get_drvdata(pci), return); - if (chip) - snd_card_free(chip->card); + snd_card_free(pci_get_drvdata(pci)); pci_set_drvdata(pci, NULL); } @@ -344,23 +328,12 @@ .id_table = snd_ymfpci_ids, .probe = snd_card_ymfpci_probe, .remove = __devexit_p(snd_card_ymfpci_remove), -#ifdef CONFIG_PM - .suspend = snd_card_ymfpci_suspend, - .resume = snd_card_ymfpci_resume, -#endif + SND_PCI_PM_CALLBACKS }; static int __init alsa_card_ymfpci_init(void) { - int err; - - if ((err = pci_module_init(&driver)) < 0) { -#ifdef MODULE - printk(KERN_ERR "Yamaha DS-XG PCI soundcard not found or device busy\n"); -#endif - return err; - } - return 0; + return pci_module_init(&driver); } static void __exit alsa_card_ymfpci_exit(void) @@ -370,27 +343,3 @@ module_init(alsa_card_ymfpci_init) module_exit(alsa_card_ymfpci_exit) - -#ifndef MODULE - -/* format is: snd-ymfpci=enable,index,id, - fm_port,mpu_port */ - -static int __init alsa_card_ymfpci_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&enable[nr_dev]) == 2 && - get_option(&str,&index[nr_dev]) == 2 && - get_id(&str,&id[nr_dev]) == 2 && - get_option_long(&str,&fm_port[nr_dev]) == 2 && - get_option_long(&str,&mpu_port[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-ymfpci=", alsa_card_ymfpci_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c --- a/sound/pci/ymfpci/ymfpci_main.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pci/ymfpci/ymfpci_main.c 2004-05-26 15:01:36 -07:00 @@ -2157,33 +2157,30 @@ }; #define YDSXGR_NUM_SAVED_REGS ARRAY_SIZE(saved_regs_index) -void snd_ymfpci_suspend(ymfpci_t *chip) +static int snd_ymfpci_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + ymfpci_t *chip = snd_magic_cast(ymfpci_t, card->pm_private_data, return -EINVAL); unsigned int i; - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; snd_pcm_suspend_all(chip->pcm); snd_pcm_suspend_all(chip->pcm2); snd_pcm_suspend_all(chip->pcm_spdif); snd_pcm_suspend_all(chip->pcm_4ch); + snd_ac97_suspend(chip->ac97); for (i = 0; i < YDSXGR_NUM_SAVED_REGS; i++) chip->saved_regs[i] = snd_ymfpci_readl(chip, saved_regs_index[i]); chip->saved_ydsxgr_mode = snd_ymfpci_readl(chip, YDSXGR_MODE); snd_ymfpci_writel(chip, YDSXGR_NATIVEDACOUTVOL, 0); snd_ymfpci_disable_dsp(chip); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -void snd_ymfpci_resume(ymfpci_t *chip) +static int snd_ymfpci_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + ymfpci_t *chip = snd_magic_cast(ymfpci_t, card->pm_private_data, return -EINVAL); unsigned int i; - if (card->power_state == SNDRV_CTL_POWER_D0) - return; - pci_enable_device(chip->pci); pci_set_master(chip->pci); snd_ymfpci_aclink_reset(chip->pci); @@ -2205,25 +2202,6 @@ spin_unlock_irqrestore(&chip->reg_lock, flags); } snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -static int snd_ymfpci_set_power_state(snd_card_t *card, unsigned int power_state) -{ - ymfpci_t *chip = snd_magic_cast(ymfpci_t, card->power_state_private_data, return -ENXIO); - - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_ymfpci_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_ymfpci_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } #endif /* CONFIG_PM */ @@ -2304,8 +2282,7 @@ snd_ymfpci_free(chip); return -ENOMEM; } - card->set_power_state = snd_ymfpci_set_power_state; - card->power_state_private_data = chip; + snd_card_set_pm_callback(card, snd_ymfpci_suspend, snd_ymfpci_resume, chip); #endif snd_ymfpci_proc_init(card, chip); diff -Nru a/sound/pcmcia/Kconfig b/sound/pcmcia/Kconfig --- a/sound/pcmcia/Kconfig 2004-05-26 15:01:36 -07:00 +++ b/sound/pcmcia/Kconfig 2004-05-26 15:01:36 -07:00 @@ -20,6 +20,7 @@ config SND_PDAUDIOCF tristate "Sound Core PDAudioCF" depends on SND && PCMCIA && ISA + select SND_PCM help Say 'Y' or 'M' to include support for Sound Core PDAudioCF soundcard. diff -Nru a/sound/pcmcia/pdaudiocf/pdaudiocf.c b/sound/pcmcia/pdaudiocf/pdaudiocf.c --- a/sound/pcmcia/pdaudiocf/pdaudiocf.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pcmcia/pdaudiocf/pdaudiocf.c 2004-05-26 15:01:35 -07:00 @@ -21,6 +21,7 @@ #include <sound/driver.h> #include <sound/core.h> #include <linux/slab.h> +#include <linux/moduleparam.h> #include <pcmcia/version.h> #include <pcmcia/ciscode.h> #include <pcmcia/cisreg.h> @@ -44,19 +45,20 @@ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable switches */ static unsigned int irq_mask = 0xffff; static int irq_list[4] = { -1 }; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(irq_mask, "i"); +module_param(irq_mask, int, 0444); MODULE_PARM_DESC(irq_mask, "IRQ bitmask for " CARD_NAME " soundcard."); -MODULE_PARM(irq_list, "1-4i"); +module_param_array(irq_list, int, boot_devs, 0444); MODULE_PARM_DESC(irq_list, "List of Available interrupts for " CARD_NAME " soundcard."); @@ -242,10 +244,7 @@ if (err < 0) return err; -#ifdef CONFIG_PM - card->power_state_private_data = pdacf; - card->set_power_state = snd_pdacf_set_power_state; -#endif + snd_card_set_pm_callback(card, snd_pdacf_suspend, snd_pdacf_resume, pdacf); if ((err = snd_card_register(card)) < 0) return err; @@ -370,7 +369,7 @@ link->state |= DEV_SUSPEND; if (chip) { snd_printdd(KERN_DEBUG "snd_pdacf_suspend calling\n"); - snd_pdacf_suspend(chip); + snd_pdacf_suspend(chip->card, 0); } /* Fall through... */ case CS_EVENT_RESET_PHYSICAL: @@ -389,7 +388,7 @@ pcmcia_request_configuration(link->handle, &link->conf); if (chip) { snd_printdd(KERN_DEBUG "calling snd_pdacf_resume\n"); - snd_pdacf_resume(chip); + snd_pdacf_resume(chip->card, 0); } } snd_printdd(KERN_DEBUG "resume done!\n"); diff -Nru a/sound/pcmcia/pdaudiocf/pdaudiocf.h b/sound/pcmcia/pdaudiocf/pdaudiocf.h --- a/sound/pcmcia/pdaudiocf/pdaudiocf.h 2004-05-26 15:01:35 -07:00 +++ b/sound/pcmcia/pdaudiocf/pdaudiocf.h 2004-05-26 15:01:35 -07:00 @@ -136,12 +136,11 @@ int snd_pdacf_ak4117_create(pdacf_t *pdacf); void snd_pdacf_powerdown(pdacf_t *chip); #ifdef CONFIG_PM -void snd_pdacf_suspend(pdacf_t *chip); -void snd_pdacf_resume(pdacf_t *chip); -int snd_pdacf_set_power_state(snd_card_t *card, unsigned int power_state); +int snd_pdacf_suspend(snd_card_t *card, unsigned int state); +int snd_pdacf_resume(snd_card_t *card, unsigned int state); #endif int snd_pdacf_pcm_new(pdacf_t *chip); -void pdacf_interrupt(int irq, void *dev, struct pt_regs *regs); +irqreturn_t pdacf_interrupt(int irq, void *dev, struct pt_regs *regs); void pdacf_tasklet(unsigned long private_data); void pdacf_reinit(pdacf_t *chip, int resume); diff -Nru a/sound/pcmcia/pdaudiocf/pdaudiocf_core.c b/sound/pcmcia/pdaudiocf/pdaudiocf_core.c --- a/sound/pcmcia/pdaudiocf/pdaudiocf_core.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pcmcia/pdaudiocf/pdaudiocf_core.c 2004-05-26 15:01:35 -07:00 @@ -255,13 +255,11 @@ #ifdef CONFIG_PM -void snd_pdacf_suspend(pdacf_t *chip) +int snd_pdacf_suspend(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + pdacf_t *chip = snd_magic_cast(pdacf_t, card->pm_private_data, return -EINVAL); u16 val; - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; snd_pcm_suspend_all(chip->pcm); /* disable interrupts, but use direct write to preserve old register value in chip->regmap */ val = inw(chip->port + PDAUDIOCF_REG_IER); @@ -270,6 +268,7 @@ chip->chip_status |= PDAUDIOCF_STAT_IS_SUSPENDED; /* ignore interrupts from now */ snd_pdacf_powerdown(chip); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } static inline int check_signal(pdacf_t *chip) @@ -277,13 +276,11 @@ return (chip->ak4117->rcs0 & AK4117_UNLCK) == 0; } -void snd_pdacf_resume(pdacf_t *chip) +int snd_pdacf_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; + pdacf_t *chip = snd_magic_cast(pdacf_t, card->pm_private_data, return -EINVAL); int timeout = 40; - if (card->power_state == SNDRV_CTL_POWER_D0) - return; pdacf_reinit(chip, 1); /* wait for AK4117's PLL */ while (timeout-- > 0 && @@ -291,26 +288,6 @@ mdelay(1); chip->chip_status &= ~PDAUDIOCF_STAT_IS_SUSPENDED; snd_power_change_state(card, SNDRV_CTL_POWER_D0); -} - -int snd_pdacf_set_power_state(snd_card_t *card, unsigned int power_state) -{ - pdacf_t *chip = snd_magic_cast(pdacf_t, card->power_state_private_data, return -ENXIO); - - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_pdacf_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_pdacf_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } - #endif diff -Nru a/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c b/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c --- a/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c 2004-05-26 15:01:36 -07:00 +++ b/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c 2004-05-26 15:01:36 -07:00 @@ -26,15 +26,15 @@ /* * */ -void pdacf_interrupt(int irq, void *dev, struct pt_regs *regs) +irqreturn_t pdacf_interrupt(int irq, void *dev, struct pt_regs *regs) { - pdacf_t *chip = snd_magic_cast(pdacf_t, dev, return); + pdacf_t *chip = snd_magic_cast(pdacf_t, dev, return IRQ_NONE); unsigned short stat; if ((chip->chip_status & (PDAUDIOCF_STAT_IS_STALE| PDAUDIOCF_STAT_IS_CONFIGURED| PDAUDIOCF_STAT_IS_SUSPENDED)) != PDAUDIOCF_STAT_IS_CONFIGURED) - return; + return IRQ_HANDLED; /* IRQ_NONE here? */ stat = inw(chip->port + PDAUDIOCF_REG_ISR); if (stat & (PDAUDIOCF_IRQLVL|PDAUDIOCF_IRQOVR)) { @@ -47,6 +47,7 @@ } if (regs != NULL) snd_ak4117_check_rate_and_errors(chip->ak4117, 0); + return IRQ_HANDLED; } static inline void pdacf_transfer_mono16(u16 *dst, u16 xor, unsigned int size, unsigned long rdp_port) diff -Nru a/sound/pcmcia/vx/vxpocket.c b/sound/pcmcia/vx/vxpocket.c --- a/sound/pcmcia/vx/vxpocket.c 2004-05-26 15:01:35 -07:00 +++ b/sound/pcmcia/vx/vxpocket.c 2004-05-26 15:01:35 -07:00 @@ -32,6 +32,7 @@ #include <sound/driver.h> #include <linux/init.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <pcmcia/version.h> #include "vxpocket.h" @@ -58,21 +59,22 @@ static unsigned int irq_mask = 0xffff; static int irq_list[4] = { -1 }; static int ibl[SNDRV_CARDS]; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(irq_mask, "i"); +module_param(irq_mask, int, 0444); MODULE_PARM_DESC(irq_mask, "IRQ bitmask for " CARD_NAME " soundcard."); -MODULE_PARM(irq_list, "1-4i"); +module_param_array(irq_list, int, boot_devs, 0444); MODULE_PARM_DESC(irq_list, "List of Available interrupts for " CARD_NAME " soundcard."); -MODULE_PARM(ibl, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(ibl, int, boot_devs, 0444); MODULE_PARM_DESC(ibl, "Capture IBL size for " CARD_NAME " soundcard."); MODULE_PARM_SYNTAX(ibl, SNDRV_ENABLED); diff -Nru a/sound/ppc/keywest.c b/sound/ppc/keywest.c --- a/sound/ppc/keywest.c 2004-05-26 15:01:36 -07:00 +++ b/sound/ppc/keywest.c 2004-05-26 15:01:36 -07:00 @@ -79,12 +79,7 @@ new_client->id = keywest_ctx->id++; /* Automatically unique */ keywest_ctx->client = new_client; - - if ((err = keywest_ctx->init_client(keywest_ctx)) < 0) { - snd_printk(KERN_ERR "tumbler: cannot initialize the MCS\n"); - goto __err; - } - + /* Tell the i2c layer a new client has arrived */ if (i2c_attach_client(new_client)) { snd_printk(KERN_ERR "tumbler: cannot attach i2c client\n"); @@ -119,6 +114,17 @@ i2c_del_driver(&keywest_driver); keywest_ctx = NULL; } +} + +int __init snd_pmac_tumbler_post_init(void) +{ + int err; + + if ((err = keywest_ctx->init_client(keywest_ctx)) < 0) { + snd_printk(KERN_ERR "tumbler: %i :cannot initialize the MCS\n", err); + return err; + } + return 0; } /* exported */ diff -Nru a/sound/ppc/pmac.c b/sound/ppc/pmac.c --- a/sound/ppc/pmac.c 2004-05-26 15:01:36 -07:00 +++ b/sound/ppc/pmac.c 2004-05-26 15:01:36 -07:00 @@ -42,7 +42,8 @@ #if defined(CONFIG_PM) && defined(CONFIG_PMAC_PBOOK) static int snd_pmac_register_sleep_notifier(pmac_t *chip); static int snd_pmac_unregister_sleep_notifier(pmac_t *chip); -static int snd_pmac_set_power_state(snd_card_t *card, unsigned int power_state); +static int snd_pmac_suspend(snd_card_t *card, unsigned int state); +static int snd_pmac_resume(snd_card_t *card, unsigned int state); #endif @@ -687,7 +688,7 @@ static irqreturn_t snd_pmac_tx_intr(int irq, void *devid, struct pt_regs *regs) { - pmac_t *chip = snd_magic_cast(pmac_t, devid, return); + pmac_t *chip = snd_magic_cast(pmac_t, devid, return IRQ_NONE); snd_pmac_pcm_update(chip, &chip->playback); return IRQ_HANDLED; } @@ -696,7 +697,7 @@ static irqreturn_t snd_pmac_rx_intr(int irq, void *devid, struct pt_regs *regs) { - pmac_t *chip = snd_magic_cast(pmac_t, devid, return); + pmac_t *chip = snd_magic_cast(pmac_t, devid, return IRQ_NONE); snd_pmac_pcm_update(chip, &chip->capture); return IRQ_HANDLED; } @@ -705,7 +706,7 @@ static irqreturn_t snd_pmac_ctrl_intr(int irq, void *devid, struct pt_regs *regs) { - pmac_t *chip = snd_magic_cast(pmac_t, devid, return); + pmac_t *chip = snd_magic_cast(pmac_t, devid, return IRQ_NONE); int ctrl = in_le32(&chip->awacs->control); /*printk("pmac: control interrupt.. 0x%x\n", ctrl);*/ @@ -1170,9 +1171,8 @@ #if defined(CONFIG_PM) && defined(CONFIG_PMAC_PBOOK) /* add sleep notifier */ - snd_pmac_register_sleep_notifier(chip); - card->set_power_state = snd_pmac_set_power_state; - card->power_state_private_data = chip; + if (! snd_pmac_register_sleep_notifier(chip)) + snd_card_set_pm_callback(chip->card, snd_pmac_suspend, snd_pmac_resume, chip); #endif if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) @@ -1197,13 +1197,10 @@ * Save state when going to sleep, restore it afterwards. */ -static void snd_pmac_suspend(pmac_t *chip) +static int snd_pmac_suspend(snd_card_t *card, unsigned int state) { + pmac_t *chip = snd_magic_cast(pmac_t, card->pm_private_data, return -EINVAL); unsigned long flags; - snd_card_t *card = chip->card; - - if (card->power_state == SNDRV_CTL_POWER_D3hot) - return; if (chip->suspend) chip->suspend(chip); @@ -1219,14 +1216,12 @@ disable_irq(chip->rx_irq); snd_pmac_sound_feature(chip, 0); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + return 0; } -static void snd_pmac_resume(pmac_t *chip) +static int snd_pmac_resume(snd_card_t *card, unsigned int state) { - snd_card_t *card = chip->card; - - if (card->power_state == SNDRV_CTL_POWER_D0) - return; + pmac_t *chip = snd_magic_cast(pmac_t, card->pm_private_data, return -EINVAL); snd_pmac_sound_feature(chip, 1); if (chip->resume) @@ -1248,6 +1243,7 @@ enable_irq(chip->rx_irq); snd_power_change_state(card, SNDRV_CTL_POWER_D0); + return 0; } /* the chip is stored statically by snd_pmac_register_sleep_notifier @@ -1264,10 +1260,10 @@ switch (when) { case PBOOK_SLEEP_NOW: - snd_pmac_suspend(chip); + snd_pmac_suspend(chip->card, 0); break; case PBOOK_WAKE: - snd_pmac_resume(chip); + snd_pmac_resume(chip->card, 0); break; } return PBOOK_SLEEP_OK; @@ -1280,45 +1276,18 @@ static int __init snd_pmac_register_sleep_notifier(pmac_t *chip) { /* should be protected here.. */ - if (sleeping_pmac) { - snd_printd("sleep notifier already reigistered\n"); - return -EBUSY; - } + snd_assert(! sleeping_pmac, return -EBUSY); sleeping_pmac = chip; pmu_register_sleep_notifier(&snd_pmac_sleep_notifier); - chip->sleep_registered = 1; return 0; } static int snd_pmac_unregister_sleep_notifier(pmac_t *chip) { - if (! chip->sleep_registered) - return 0; /* should be protected here.. */ - if (sleeping_pmac != chip) - return -ENODEV; + snd_assert(sleeping_pmac == chip, return -ENODEV); pmu_unregister_sleep_notifier(&snd_pmac_sleep_notifier); sleeping_pmac = NULL; - return 0; -} - -/* callback */ -static int snd_pmac_set_power_state(snd_card_t *card, unsigned int power_state) -{ - pmac_t *chip = snd_magic_cast(pmac_t, card->power_state_private_data, return -ENXIO); - switch (power_state) { - case SNDRV_CTL_POWER_D0: - case SNDRV_CTL_POWER_D1: - case SNDRV_CTL_POWER_D2: - snd_pmac_resume(chip); - break; - case SNDRV_CTL_POWER_D3hot: - case SNDRV_CTL_POWER_D3cold: - snd_pmac_suspend(chip); - break; - default: - return -EINVAL; - } return 0; } diff -Nru a/sound/ppc/pmac.h b/sound/ppc/pmac.h --- a/sound/ppc/pmac.h 2004-05-26 15:01:36 -07:00 +++ b/sound/ppc/pmac.h 2004-05-26 15:01:36 -07:00 @@ -162,7 +162,6 @@ void (*update_automute)(pmac_t *chip, int do_notify); int (*detect_headphone)(pmac_t *chip); #ifdef CONFIG_PMAC_PBOOK - unsigned int sleep_registered : 1; void (*suspend)(pmac_t *chip); void (*resume)(pmac_t *chip); #endif @@ -180,6 +179,7 @@ int snd_pmac_burgundy_init(pmac_t *chip); int snd_pmac_daca_init(pmac_t *chip); int snd_pmac_tumbler_init(pmac_t *chip); +int snd_pmac_tumbler_post_init(void); /* i2c functions */ typedef struct snd_pmac_keywest { diff -Nru a/sound/ppc/powermac.c b/sound/ppc/powermac.c --- a/sound/ppc/powermac.c 2004-05-26 15:01:36 -07:00 +++ b/sound/ppc/powermac.c 2004-05-26 15:01:36 -07:00 @@ -20,8 +20,8 @@ #include <sound/driver.h> #include <linux/init.h> +#include <linux/moduleparam.h> #include <sound/core.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include "pmac.h" #include "awacs.h" @@ -41,17 +41,17 @@ static int enable_beep = 1; #endif -MODULE_PARM(index, "i"); +module_param(index, int, 0444); MODULE_PARM_DESC(index, "Index value for " CHIP_NAME " soundchip."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "s"); +module_param(id, charp, 0444); MODULE_PARM_DESC(id, "ID string for " CHIP_NAME " soundchip."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -/* MODULE_PARM(enable, "i"); +/* module_param(enable, bool, 0444); MODULE_PARM_DESC(enable, "Enable this soundchip."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); */ #ifdef PMAC_SUPPORT_PCM_BEEP -MODULE_PARM(enable_beep, "i"); +module_param(enable_beep, bool, 0444); MODULE_PARM_DESC(enable_beep, "Enable beep using PCM."); MODULE_PARM_SYNTAX(enable_beep, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); #endif @@ -104,7 +104,7 @@ sprintf(card->shortname, "PowerMac %s", name_ext); sprintf(card->longname, "%s (Dev %d) Sub-frame %d", card->shortname, chip->device_id, chip->subframe); - if ((err = snd_pmac_tumbler_init(chip)) < 0) + if ( snd_pmac_tumbler_init(chip) < 0 || snd_pmac_tumbler_post_init() < 0) goto __error; break; case PMAC_AWACS: @@ -175,26 +175,3 @@ module_init(alsa_card_pmac_init) module_exit(alsa_card_pmac_exit) - -#ifndef MODULE - -/* format is: snd-pmac=enable,index,id,enable_beep - */ - -static int __init alsa_card_pmac_setup(char *str) -{ - int __attribute__ ((__unused__)) enable = 1; - - (void)(get_option(&str,&enable) == 2 && - get_option(&str,&index) == 2 && - get_id(&str,&id) == 2 -#ifdef PMAC_SUPPORT_PCM_BEEP - && get_option(&str,&enable_beep) == 2 -#endif - ); - return 1; -} - -__setup("snd-pmac=", alsa_card_pmac_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c --- a/sound/ppc/tumbler.c 2004-05-26 15:01:35 -07:00 +++ b/sound/ppc/tumbler.c 2004-05-26 15:01:35 -07:00 @@ -684,6 +684,8 @@ static int snapper_set_capture_source(pmac_tumbler_t *mix) { + if (! mix->i2c.client) + return -ENODEV; return snd_pmac_keywest_write_byte(&mix->i2c, TAS_REG_ACS, mix->capture_source ? 2 : 0); } @@ -870,7 +872,7 @@ /* interrupt - headphone plug changed */ static irqreturn_t headphone_intr(int irq, void *devid, struct pt_regs *regs) { - pmac_t *chip = snd_magic_cast(pmac_t, devid, return); + pmac_t *chip = snd_magic_cast(pmac_t, devid, return IRQ_NONE); if (chip->update_automute && chip->initialized) { chip->update_automute(chip, 1); return IRQ_HANDLED; diff -Nru a/sound/sparc/amd7930.c b/sound/sparc/amd7930.c --- a/sound/sparc/amd7930.c 2004-05-26 15:01:35 -07:00 +++ b/sound/sparc/amd7930.c 2004-05-26 15:01:35 -07:00 @@ -34,13 +34,13 @@ #include <linux/slab.h> #include <linux/init.h> #include <linux/interrupt.h> +#include <linux/moduleparam.h> #include <sound/driver.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/info.h> #include <sound/control.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <asm/io.h> @@ -50,14 +50,15 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Sun AMD7930 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Sun AMD7930 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Sun AMD7930 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); MODULE_AUTHOR("Thomas K. Dyas and David S. Miller"); @@ -1152,24 +1153,3 @@ module_init(amd7930_init); module_exit(amd7930_exit); - -#ifndef MODULE - -/* format is: snd-sun-amd7930=index,id,enable */ - -static int __init alsa_card_sun_amd7930_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&index[nr_dev]) == 2 && - get_option(&str,&id[nr_dev]) == 2 && - get_id(&str,&enable[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-sun-amd7930=", alsa_card_sun_amd7930_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c --- a/sound/sparc/cs4231.c 2004-05-26 15:01:35 -07:00 +++ b/sound/sparc/cs4231.c 2004-05-26 15:01:35 -07:00 @@ -15,6 +15,7 @@ #include <linux/delay.h> #include <linux/init.h> #include <linux/interrupt.h> +#include <linux/moduleparam.h> #include <sound/driver.h> #include <sound/core.h> @@ -22,7 +23,6 @@ #include <sound/info.h> #include <sound/control.h> #include <sound/timer.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include <sound/pcm_params.h> @@ -49,14 +49,15 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for Sun CS4231 soundcard."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for Sun CS4231 soundcard."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable Sun CS4231 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); MODULE_AUTHOR("Jaroslav Kysela, Derrick J. Brashear and David S. Miller"); @@ -2251,24 +2252,3 @@ module_init(cs4231_init); module_exit(cs4231_exit); - -#ifndef MODULE - -/* format is: snd-sun-cs4231=index,id,enable */ - -static int __init alsa_card_sun_cs4231_setup(char *str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str,&index[nr_dev]) == 2 && - get_option(&str,&id[nr_dev]) == 2 && - get_id(&str,&enable[nr_dev]) == 2); - nr_dev++; - return 1; -} - -__setup("snd-sun-cs4231=", alsa_card_sun_cs4231_setup); - -#endif /* ifndef MODULE */ diff -Nru a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c --- a/sound/usb/usbaudio.c 2004-05-26 15:01:36 -07:00 +++ b/sound/usb/usbaudio.c 2004-05-26 15:01:36 -07:00 @@ -45,11 +45,11 @@ #include <linux/slab.h> #include <linux/string.h> #include <linux/usb.h> +#include <linux/moduleparam.h> #include <sound/core.h> #include <sound/info.h> #include <sound/pcm.h> #include <sound/pcm_params.h> -#define SNDRV_GET_ID #include <sound/initval.h> #include "usbaudio.h" @@ -69,26 +69,27 @@ static int pid[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = -1 }; /* Product ID for this card */ static int nrpacks = 4; /* max. number of packets per urb */ static int async_unlink = 1; +static int boot_devs; -MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(index, int, boot_devs, 0444); MODULE_PARM_DESC(index, "Index value for the USB audio adapter."); MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC); -MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s"); +module_param_array(id, charp, boot_devs, 0444); MODULE_PARM_DESC(id, "ID string for the USB audio adapter."); MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC); -MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable USB audio adapter."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -MODULE_PARM(vid, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(vid, int, boot_devs, 0444); MODULE_PARM_DESC(vid, "Vendor ID for the USB audio device."); MODULE_PARM_SYNTAX(vid, SNDRV_ENABLED ",allows:{{-1,0xffff}},base:16"); -MODULE_PARM(pid, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +module_param_array(pid, int, boot_devs, 0444); MODULE_PARM_DESC(pid, "Product ID for the USB audio device."); MODULE_PARM_SYNTAX(pid, SNDRV_ENABLED ",allows:{{-1,0xffff}},base:16"); -MODULE_PARM(nrpacks, "i"); +module_param(nrpacks, int, 0444); MODULE_PARM_DESC(nrpacks, "Max. number of packets per URB."); MODULE_PARM_SYNTAX(nrpacks, SNDRV_ENABLED ",allows:{{1,10}}"); -MODULE_PARM(async_unlink, "i"); +module_param(async_unlink, bool, 0444); MODULE_PARM_DESC(async_unlink, "Use async unlink mode."); MODULE_PARM_SYNTAX(async_unlink, SNDRV_BOOLEAN_TRUE_DESC); @@ -1146,7 +1147,7 @@ /* if endpoint has pitch control, enable it */ if (fmt->attributes & EP_CS_ATTR_PITCH_CONTROL) { data[0] = 1; - if ((err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, + if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, PITCH_CONTROL << 8, ep, data, 1, HZ)) < 0) { snd_printk(KERN_ERR "%d:%d:%d: cannot set enable PITCH\n", @@ -1172,14 +1173,14 @@ data[0] = rate; data[1] = rate >> 8; data[2] = rate >> 16; - if ((err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, + if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) { snd_printk(KERN_ERR "%d:%d:%d: cannot set freq %d to ep 0x%x\n", dev->devnum, iface, fmt->altsetting, rate, ep); return err; } - if ((err = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, + if ((err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR, USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_IN, SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) { snd_printk(KERN_ERR "%d:%d:%d: cannot get freq at ep 0x%x\n", @@ -1231,7 +1232,7 @@ dev->devnum, fmt->iface, fmt->altsetting); return -EIO; } - snd_printdd(KERN_INFO "setting usb interface %d:%d\n", fmt->iface, fmt->altset_idx); + snd_printdd(KERN_INFO "setting usb interface %d:%d\n", fmt->iface, fmt->altsetting); subs->interface = fmt->iface; subs->format = fmt->altset_idx; } @@ -1884,6 +1885,32 @@ return NULL; } +/* + * Wrapper for usb_control_msg(). + * Allocates a temp buffer to prevent dmaing from/to the stack. + */ +int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe, __u8 request, + __u8 requesttype, __u16 value, __u16 index, void *data, + __u16 size, int timeout) +{ + int err; + void *buf = NULL; + + if (size > 0) { + buf = kmalloc(size, GFP_KERNEL); + if (!buf) + return -ENOMEM; + memcpy(buf, data, size); + } + err = usb_control_msg(dev, pipe, request, requesttype, + value, index, buf, size, timeout); + if (size > 0) { + memcpy(data, buf, size); + kfree(buf); + } + return err; +} + /* * entry point for linux usb interface @@ -1926,7 +1953,7 @@ struct audioformat *fp; fp = list_entry(p, struct audioformat, list); snd_iprintf(buffer, " Interface %d\n", fp->iface); - snd_iprintf(buffer, " Altset %d\n", fp->altset_idx); + snd_iprintf(buffer, " Altset %d\n", fp->altsetting); snd_iprintf(buffer, " Format: %s\n", snd_pcm_format_name(fp->format)); snd_iprintf(buffer, " Channels: %d\n", fp->channels); snd_iprintf(buffer, " Endpoint: %d %s (%s)\n", @@ -2640,6 +2667,7 @@ struct audioformat *fp; struct usb_host_interface *alts; int stream, err; + int *rate_table = NULL; fp = kmalloc(sizeof(*fp), GFP_KERNEL); if (! fp) { @@ -2647,16 +2675,30 @@ return -ENOMEM; } memcpy(fp, quirk->data, sizeof(*fp)); + if (fp->nr_rates > 0) { + rate_table = kmalloc(sizeof(int) * fp->nr_rates, GFP_KERNEL); + if (!rate_table) { + kfree(fp); + return -ENOMEM; + } + memcpy(rate_table, fp->rate_table, sizeof(int) * fp->nr_rates); + fp->rate_table = rate_table; + } + stream = (fp->endpoint & USB_DIR_IN) ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; err = add_audio_endpoint(chip, stream, fp); if (err < 0) { kfree(fp); + if (rate_table) + kfree(rate_table); return err; } if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber || fp->altset_idx >= iface->num_altsetting) { kfree(fp); + if (rate_table) + kfree(rate_table); return -EINVAL; } alts = &iface->altsetting[fp->altset_idx]; @@ -2700,6 +2742,83 @@ return 0; } +/* + * Create a stream for an Edirol UA-700 interface. The only way + * to detect the sample rate is by looking at wMaxPacketSize. + */ +static int create_ua700_quirk(snd_usb_audio_t *chip, struct usb_interface *iface) +{ + static const struct audioformat ua700_format = { + .format = SNDRV_PCM_FORMAT_S24_3LE, + .channels = 2, + .fmt_type = USB_FORMAT_TYPE_I, + .altsetting = 1, + .altset_idx = 1, + .rates = SNDRV_PCM_RATE_CONTINUOUS, + }; + struct usb_host_interface *alts; + struct usb_interface_descriptor *altsd; + struct audioformat *fp; + int stream, err; + + /* both PCM and MIDI interfaces have 2 altsettings */ + if (iface->num_altsetting != 2) + return -ENXIO; + alts = &iface->altsetting[1]; + altsd = get_iface_desc(alts); + + if (altsd->bNumEndpoints == 2) { + static const snd_usb_midi_endpoint_info_t ep = { + .out_cables = 0x0003, + .in_cables = 0x0003 + }; + static const snd_usb_audio_quirk_t quirk = { + .type = QUIRK_MIDI_FIXED_ENDPOINT, + .data = &ep + }; + return snd_usb_create_midi_interface(chip, iface, &quirk); + } + + if (altsd->bNumEndpoints != 1) + return -ENXIO; + + fp = kmalloc(sizeof(*fp), GFP_KERNEL); + if (!fp) + return -ENOMEM; + memcpy(fp, &ua700_format, sizeof(*fp)); + + fp->iface = altsd->bInterfaceNumber; + fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; + fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; + fp->maxpacksize = get_endpoint(alts, 0)->wMaxPacketSize; + + switch (fp->maxpacksize) { + case 0x120: + fp->rate_max = fp->rate_min = 44100; + break; + case 0x138: + fp->rate_max = fp->rate_min = 48000; + break; + case 0x258: + fp->rate_max = fp->rate_min = 96000; + break; + default: + snd_printk(KERN_ERR "unknown sample rate\n"); + kfree(fp); + return -ENXIO; + } + + stream = (fp->endpoint & USB_DIR_IN) + ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; + err = add_audio_endpoint(chip, stream, fp); + if (err < 0) { + kfree(fp); + return err; + } + usb_set_interface(chip->dev, fp->iface, 0); + return 0; +} + static int snd_usb_create_quirk(snd_usb_audio_t *chip, struct usb_interface *iface, const snd_usb_audio_quirk_t *quirk); @@ -2747,7 +2866,7 @@ get_cfg_desc(config)->wTotalLength == EXTIGY_FIRMWARE_SIZE_NEW) { snd_printdd("sending Extigy boot sequence...\n"); /* Send message to force it to reconnect with full interface. */ - err = usb_control_msg(dev, usb_sndctrlpipe(dev,0), + err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev,0), 0x10, 0x43, 0x0001, 0x000a, NULL, 0, HZ); if (err < 0) snd_printdd("error sending boot message: %d\n", err); err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, @@ -2787,6 +2906,8 @@ case QUIRK_AUDIO_STANDARD_INTERFACE: case QUIRK_MIDI_STANDARD_INTERFACE: return create_standard_interface_quirk(chip, iface, quirk); + case QUIRK_AUDIO_EDIROL_UA700: + return create_ua700_quirk(chip, iface); default: snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type); return -ENXIO; @@ -3124,26 +3245,3 @@ module_init(snd_usb_audio_init); module_exit(snd_usb_audio_cleanup); - -#ifndef MODULE -/* - * format is snd-usb-audio=enable,index,id,vid,pid - */ -static int __init snd_usb_audio_module_setup(char* str) -{ - static unsigned __initdata nr_dev = 0; - - if (nr_dev >= SNDRV_CARDS) - return 0; - (void)(get_option(&str, &enable[nr_dev]) == 2 && - get_option(&str, &index[nr_dev]) == 2 && - get_id(&str, &id[nr_dev]) == 2 && - get_option(&str, &vid[nr_dev]) == 2 && - get_option(&str, &pid[nr_dev]) == 2); - ++nr_dev; - return 1; -} - -__setup("snd-usb-audio=", snd_usb_audio_module_setup); - -#endif /* !MODULE */ diff -Nru a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h --- a/sound/usb/usbaudio.h 2004-05-26 15:01:36 -07:00 +++ b/sound/usb/usbaudio.h 2004-05-26 15:01:36 -07:00 @@ -154,6 +154,7 @@ #define QUIRK_AUDIO_FIXED_ENDPOINT 4 #define QUIRK_AUDIO_STANDARD_INTERFACE 5 #define QUIRK_MIDI_STANDARD_INTERFACE 6 +#define QUIRK_AUDIO_EDIROL_UA700 7 typedef struct snd_usb_audio_quirk snd_usb_audio_quirk_t; typedef struct snd_usb_midi_endpoint_info snd_usb_midi_endpoint_info_t; @@ -185,6 +186,8 @@ /* for QUIRK_AUDIO/MIDI_STANDARD_INTERFACE, data is NULL */ +/* for QUIRK_AUDIO_EDIROL_UA700, data is NULL */ + /* */ @@ -196,6 +199,8 @@ void *snd_usb_find_desc(void *descstart, int desclen, void *after, u8 dtype); void *snd_usb_find_csint_desc(void *descstart, int desclen, void *after, u8 dsubtype); + +int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout); int snd_usb_create_mixer(snd_usb_audio_t *chip, int ctrlif); diff -Nru a/sound/usb/usbmixer.c b/sound/usb/usbmixer.c --- a/sound/usb/usbmixer.c 2004-05-26 15:01:35 -07:00 +++ b/sound/usb/usbmixer.c 2004-05-26 15:01:35 -07:00 @@ -301,7 +301,7 @@ int timeout = 10; while (timeout-- > 0) { - if (usb_control_msg(cval->chip->dev, usb_rcvctrlpipe(cval->chip->dev, 0), + if (snd_usb_ctl_msg(cval->chip->dev, usb_rcvctrlpipe(cval->chip->dev, 0), request, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, validx, cval->ctrlif | (cval->id << 8), @@ -339,7 +339,7 @@ buf[0] = value_set & 0xff; buf[1] = (value_set >> 8) & 0xff; while (timeout -- > 0) - if (usb_control_msg(cval->chip->dev, usb_sndctrlpipe(cval->chip->dev, 0), + if (snd_usb_ctl_msg(cval->chip->dev, usb_sndctrlpipe(cval->chip->dev, 0), request, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT, validx, cval->ctrlif | (cval->id << 8), diff -Nru a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h --- a/sound/usb/usbquirks.h 2004-05-26 15:01:35 -07:00 +++ b/sound/usb/usbquirks.h 2004-05-26 15:01:35 -07:00 @@ -113,7 +113,7 @@ .product_name = "UA-100", .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, - .data = & (const snd_usb_audio_quirk_t[]) { + .data = (const snd_usb_audio_quirk_t[]) { { .ifnum = 0, .type = QUIRK_AUDIO_FIXED_ENDPOINT, @@ -274,7 +274,7 @@ .product_name = "SC-D70", .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, - .data = & (const snd_usb_audio_quirk_t[]) { + .data = (const snd_usb_audio_quirk_t[]) { { .ifnum = 0, .type = QUIRK_AUDIO_FIXED_ENDPOINT, @@ -338,7 +338,7 @@ .product_name = "UA-5", .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, - .data = & (const snd_usb_audio_quirk_t[]) { + .data = (const snd_usb_audio_quirk_t[]) { { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE @@ -443,7 +443,7 @@ .product_name = "UA-20", .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, - .data = & (const snd_usb_audio_quirk_t[]) { + .data = (const snd_usb_audio_quirk_t[]) { { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE @@ -488,16 +488,34 @@ } } }, -{ +{ /* + * This quirk is for the "Advanced" modes of the Edirol UA-700. + * If the sample format switch is not in an advanced setting, the + * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks), + * but offers only 16-bit PCM and no MIDI. + */ USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b), .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .vendor_name = "EDIROL", .product_name = "UA-700", - .ifnum = 3, - .type = QUIRK_MIDI_FIXED_ENDPOINT, - .data = & (const snd_usb_midi_endpoint_info_t) { - .out_cables = 0x0003, - .in_cables = 0x0003 + .ifnum = QUIRK_ANY_INTERFACE, + .type = QUIRK_COMPOSITE, + .data = (const snd_usb_audio_quirk_t[]) { + { + .ifnum = 1, + .type = QUIRK_AUDIO_EDIROL_UA700 + }, + { + .ifnum = 2, + .type = QUIRK_AUDIO_EDIROL_UA700 + }, + { + .ifnum = 3, + .type = QUIRK_AUDIO_EDIROL_UA700 + }, + { + .ifnum = -1 + } } } }, @@ -580,6 +598,62 @@ } }, { + USB_DEVICE(0x0582, 0x0044), + .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { + .vendor_name = "Roland", + .product_name = "UA-1000", + .ifnum = QUIRK_ANY_INTERFACE, + .type = QUIRK_COMPOSITE, + .data = (const snd_usb_audio_quirk_t[]) { + { + .ifnum = 1, + .type = QUIRK_AUDIO_FIXED_ENDPOINT, + .data = & (const struct audioformat) { + .format = SNDRV_PCM_FORMAT_S24, + .channels = 12, + .iface = 1, + .altsetting = 1, + .altset_idx = 1, + .attributes = 0, + .endpoint = 0x81, + .ep_attr = 0x01, + .rates = SNDRV_PCM_RATE_CONTINUOUS, + .rate_min = 48000, + .rate_max = 48000, + } + }, + { + .ifnum = 2, + .type = QUIRK_AUDIO_FIXED_ENDPOINT, + .data = & (const struct audioformat) { + .format = SNDRV_PCM_FORMAT_S24, + .channels = 10, + .iface = 2, + .altsetting = 1, + .altset_idx = 1, + .attributes = 0, + .endpoint = 0x02, + .ep_attr = 0x01, + .rates = SNDRV_PCM_RATE_CONTINUOUS, + .rate_min = 48000, + .rate_max = 48000, + } + }, + { + .ifnum = 3, + .type = QUIRK_MIDI_FIXED_ENDPOINT, + .data = & (const snd_usb_midi_endpoint_info_t) { + .out_cables = 0x0003, + .in_cables = 0x0003 + } + }, + { + .ifnum = -1 + } + } + } +}, +{ USB_DEVICE(0x0582, 0x0048), .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .vendor_name = "EDIROL", @@ -629,7 +703,7 @@ .product_name = "UA-3FX", .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, - .data = & (const snd_usb_audio_quirk_t[]) { + .data = (const snd_usb_audio_quirk_t[]) { { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE