(2006-08-06) rescue-bootcd
This commit is contained in:
1
extra/linux-2.6.10/drivers/ide/.built-in.o.cmd
Normal file
1
extra/linux-2.6.10/drivers/ide/.built-in.o.cmd
Normal file
@@ -0,0 +1 @@
|
||||
cmd_drivers/ide/built-in.o := ld -m elf_i386 -r -o drivers/ide/built-in.o drivers/ide/pci/built-in.o drivers/ide/ide-core.o drivers/ide/ide-generic.o drivers/ide/ide-disk.o drivers/ide/ide-cd.o drivers/ide/legacy/built-in.o drivers/ide/arm/built-in.o
|
||||
326
extra/linux-2.6.10/drivers/ide/.ide-cd.o.cmd
Normal file
326
extra/linux-2.6.10/drivers/ide/.ide-cd.o.cmd
Normal file
@@ -0,0 +1,326 @@
|
||||
cmd_drivers/ide/ide-cd.o := gcc -Wp,-MD,drivers/ide/.ide-cd.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_cd -DKBUILD_MODNAME=ide_cd -c -o drivers/ide/ide-cd.o drivers/ide/ide-cd.c
|
||||
|
||||
deps_drivers/ide/ide-cd.o := \
|
||||
drivers/ide/ide-cd.c \
|
||||
$(wildcard include/config/flags.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/cdrom.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
include/scsi/scsi.h \
|
||||
include/asm/unaligned.h \
|
||||
drivers/ide/ide-cd.h \
|
||||
|
||||
drivers/ide/ide-cd.o: $(deps_drivers/ide/ide-cd.o)
|
||||
|
||||
$(deps_drivers/ide/ide-cd.o):
|
||||
1
extra/linux-2.6.10/drivers/ide/.ide-core.o.cmd
Normal file
1
extra/linux-2.6.10/drivers/ide/.ide-core.o.cmd
Normal file
@@ -0,0 +1 @@
|
||||
cmd_drivers/ide/ide-core.o := ld -m elf_i386 -r -o drivers/ide/ide-core.o drivers/ide/ide.o drivers/ide/ide-default.o drivers/ide/ide-io.o drivers/ide/ide-iops.o drivers/ide/ide-lib.o drivers/ide/ide-probe.o drivers/ide/ide-taskfile.o drivers/ide/pci/cmd640.o drivers/ide/setup-pci.o drivers/ide/ide-dma.o drivers/ide/ide-proc.o
|
||||
323
extra/linux-2.6.10/drivers/ide/.ide-default.o.cmd
Normal file
323
extra/linux-2.6.10/drivers/ide/.ide-default.o.cmd
Normal file
@@ -0,0 +1,323 @@
|
||||
cmd_drivers/ide/ide-default.o := gcc -Wp,-MD,drivers/ide/.ide-default.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_default -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide-default.o drivers/ide/ide-default.c
|
||||
|
||||
deps_drivers/ide/ide-default.o := \
|
||||
drivers/ide/ide-default.c \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/cdrom.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
include/asm/unaligned.h \
|
||||
|
||||
drivers/ide/ide-default.o: $(deps_drivers/ide/ide-default.o)
|
||||
|
||||
$(deps_drivers/ide/ide-default.o):
|
||||
323
extra/linux-2.6.10/drivers/ide/.ide-disk.o.cmd
Normal file
323
extra/linux-2.6.10/drivers/ide/.ide-disk.o.cmd
Normal file
@@ -0,0 +1,323 @@
|
||||
cmd_drivers/ide/ide-disk.o := gcc -Wp,-MD,drivers/ide/.ide-disk.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_disk -DKBUILD_MODNAME=ide_disk -c -o drivers/ide/ide-disk.o drivers/ide/ide-disk.c
|
||||
|
||||
deps_drivers/ide/ide-disk.o := \
|
||||
drivers/ide/ide-disk.c \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/idedisk/multi/mode.h) \
|
||||
$(wildcard include/config/alpha.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/ide-disk.o: $(deps_drivers/ide/ide-disk.o)
|
||||
|
||||
$(deps_drivers/ide/ide-disk.o):
|
||||
322
extra/linux-2.6.10/drivers/ide/.ide-dma.o.cmd
Normal file
322
extra/linux-2.6.10/drivers/ide/.ide-dma.o.cmd
Normal file
@@ -0,0 +1,322 @@
|
||||
cmd_drivers/ide/ide-dma.o := gcc -Wp,-MD,drivers/ide/.ide-dma.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_dma -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide-dma.o drivers/ide/ide-dma.c
|
||||
|
||||
deps_drivers/ide/ide-dma.o := \
|
||||
drivers/ide/ide-dma.c \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/scatterlist.h \
|
||||
|
||||
drivers/ide/ide-dma.o: $(deps_drivers/ide/ide-dma.o)
|
||||
|
||||
$(deps_drivers/ide/ide-dma.o):
|
||||
319
extra/linux-2.6.10/drivers/ide/.ide-generic.o.cmd
Normal file
319
extra/linux-2.6.10/drivers/ide/.ide-generic.o.cmd
Normal file
@@ -0,0 +1,319 @@
|
||||
cmd_drivers/ide/ide-generic.o := gcc -Wp,-MD,drivers/ide/.ide-generic.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_generic -DKBUILD_MODNAME=ide_generic -c -o drivers/ide/ide-generic.o drivers/ide/ide-generic.c
|
||||
|
||||
deps_drivers/ide/ide-generic.o := \
|
||||
drivers/ide/ide-generic.c \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/linux/linkage.h \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
$(wildcard include/config/smp.h) \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/thread_info.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/ide-generic.o: $(deps_drivers/ide/ide-generic.o)
|
||||
|
||||
$(deps_drivers/ide/ide-generic.o):
|
||||
327
extra/linux-2.6.10/drivers/ide/.ide-io.o.cmd
Normal file
327
extra/linux-2.6.10/drivers/ide/.ide-io.o.cmd
Normal file
@@ -0,0 +1,327 @@
|
||||
cmd_drivers/ide/ide-io.o := gcc -Wp,-MD,drivers/ide/.ide-io.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_io -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide-io.o drivers/ide/ide-io.c
|
||||
|
||||
deps_drivers/ide/ide-io.o := \
|
||||
drivers/ide/ide-io.c \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/blkpg.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
include/linux/reboot.h \
|
||||
include/linux/notifier.h \
|
||||
include/linux/cdrom.h \
|
||||
include/linux/seq_file.h \
|
||||
include/linux/scatterlist.h \
|
||||
|
||||
drivers/ide/ide-io.o: $(deps_drivers/ide/ide-io.o)
|
||||
|
||||
$(deps_drivers/ide/ide-io.o):
|
||||
326
extra/linux-2.6.10/drivers/ide/.ide-iops.o.cmd
Normal file
326
extra/linux-2.6.10/drivers/ide/.ide-iops.o.cmd
Normal file
@@ -0,0 +1,326 @@
|
||||
cmd_drivers/ide/ide-iops.o := gcc -Wp,-MD,drivers/ide/.ide-iops.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_iops -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide-iops.o drivers/ide/ide-iops.c
|
||||
|
||||
deps_drivers/ide/ide-iops.o := \
|
||||
drivers/ide/ide-iops.c \
|
||||
$(wildcard include/config/atari.h) \
|
||||
$(wildcard include/config/q40.h) \
|
||||
$(wildcard include/config/idepci/share/irq.h) \
|
||||
$(wildcard include/config/idedma/ivb.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/blkpg.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/ide-iops.o: $(deps_drivers/ide/ide-iops.o)
|
||||
|
||||
$(deps_drivers/ide/ide-iops.o):
|
||||
322
extra/linux-2.6.10/drivers/ide/.ide-lib.o.cmd
Normal file
322
extra/linux-2.6.10/drivers/ide/.ide-lib.o.cmd
Normal file
@@ -0,0 +1,322 @@
|
||||
cmd_drivers/ide/ide-lib.o := gcc -Wp,-MD,drivers/ide/.ide-lib.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_lib -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide-lib.o drivers/ide/ide-lib.c
|
||||
|
||||
deps_drivers/ide/ide-lib.o := \
|
||||
drivers/ide/ide-lib.c \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/blkpg.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/ide-lib.o: $(deps_drivers/ide/ide-lib.o)
|
||||
|
||||
$(deps_drivers/ide/ide-lib.o):
|
||||
329
extra/linux-2.6.10/drivers/ide/.ide-probe.o.cmd
Normal file
329
extra/linux-2.6.10/drivers/ide/.ide-probe.o.cmd
Normal file
@@ -0,0 +1,329 @@
|
||||
cmd_drivers/ide/ide-probe.o := gcc -Wp,-MD,drivers/ide/.ide-probe.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_probe -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide-probe.o drivers/ide/ide-probe.c
|
||||
|
||||
deps_drivers/ide/ide-probe.o := \
|
||||
drivers/ide/ide-probe.c \
|
||||
$(wildcard include/config/scsi/eata/dma.h) \
|
||||
$(wildcard include/config/scsi/eata/pio.h) \
|
||||
$(wildcard include/config/scsi/eata.h) \
|
||||
$(wildcard include/config/ppc.h) \
|
||||
$(wildcard include/config/idedma/onlydisk.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/apus.h) \
|
||||
$(wildcard include/config/idepci/share/irq.h) \
|
||||
$(wildcard include/config/blk/dev/hd.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/ide-probe.o: $(deps_drivers/ide/ide-probe.o)
|
||||
|
||||
$(deps_drivers/ide/ide-probe.o):
|
||||
321
extra/linux-2.6.10/drivers/ide/.ide-proc.o.cmd
Normal file
321
extra/linux-2.6.10/drivers/ide/.ide-proc.o.cmd
Normal file
@@ -0,0 +1,321 @@
|
||||
cmd_drivers/ide/ide-proc.o := gcc -Wp,-MD,drivers/ide/.ide-proc.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_proc -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide-proc.o drivers/ide/ide-proc.c
|
||||
|
||||
deps_drivers/ide/ide-proc.o := \
|
||||
drivers/ide/ide-proc.c \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/ctype.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
include/linux/seq_file.h \
|
||||
|
||||
drivers/ide/ide-proc.o: $(deps_drivers/ide/ide-proc.o)
|
||||
|
||||
$(deps_drivers/ide/ide-proc.o):
|
||||
322
extra/linux-2.6.10/drivers/ide/.ide-taskfile.o.cmd
Normal file
322
extra/linux-2.6.10/drivers/ide/.ide-taskfile.o.cmd
Normal file
@@ -0,0 +1,322 @@
|
||||
cmd_drivers/ide/ide-taskfile.o := gcc -Wp,-MD,drivers/ide/.ide-taskfile.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide_taskfile -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide-taskfile.o drivers/ide/ide-taskfile.c
|
||||
|
||||
deps_drivers/ide/ide-taskfile.o := \
|
||||
drivers/ide/ide-taskfile.c \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/blkpg.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/ide-taskfile.o: $(deps_drivers/ide/ide-taskfile.o)
|
||||
|
||||
$(deps_drivers/ide/ide-taskfile.o):
|
||||
352
extra/linux-2.6.10/drivers/ide/.ide.o.cmd
Normal file
352
extra/linux-2.6.10/drivers/ide/.ide.o.cmd
Normal file
@@ -0,0 +1,352 @@
|
||||
cmd_drivers/ide/ide.o := gcc -Wp,-MD,drivers/ide/.ide.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=ide -DKBUILD_MODNAME=ide_core -c -o drivers/ide/ide.o drivers/ide/ide.c
|
||||
|
||||
deps_drivers/ide/ide.o := \
|
||||
drivers/ide/ide.c \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/idedma/auto.h) \
|
||||
$(wildcard include/config/blk/dev/hd.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/ide/arm.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/blk/dev/idecs.h) \
|
||||
$(wildcard include/config/amiga.h) \
|
||||
$(wildcard include/config/mac.h) \
|
||||
$(wildcard include/config/blk/dev/dtc2278.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/ide/task/ioctl.h) \
|
||||
$(wildcard include/config/blk/dev/ali14xx.h) \
|
||||
$(wildcard include/config/blk/dev/umc8672.h) \
|
||||
$(wildcard include/config/blk/dev/ht6560b.h) \
|
||||
$(wildcard include/config/blk/dev/qd65xx.h) \
|
||||
$(wildcard include/config/blk/dev/idedoubler.h) \
|
||||
$(wildcard include/config/blk/dev/cmd640.h) \
|
||||
$(wildcard include/config/blk/dev/4drives.h) \
|
||||
$(wildcard include/config/etrax/ide.h) \
|
||||
$(wildcard include/config/blk/dev/ide/pmac.h) \
|
||||
$(wildcard include/config/blk/dev/gayle.h) \
|
||||
$(wildcard include/config/blk/dev/falcon/ide.h) \
|
||||
$(wildcard include/config/blk/dev/mac/ide.h) \
|
||||
$(wildcard include/config/blk/dev/q40ide.h) \
|
||||
$(wildcard include/config/blk/dev/buddha.h) \
|
||||
$(wildcard include/config/blk/dev/idepnp.h) \
|
||||
$(wildcard include/config/h8300.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/blkpg.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
include/linux/devfs_fs_kernel.h \
|
||||
$(wildcard include/config/devfs/fs.h) \
|
||||
include/linux/reboot.h \
|
||||
include/linux/notifier.h \
|
||||
include/linux/cdrom.h \
|
||||
include/linux/seq_file.h \
|
||||
|
||||
drivers/ide/ide.o: $(deps_drivers/ide/ide.o)
|
||||
|
||||
$(deps_drivers/ide/ide.o):
|
||||
321
extra/linux-2.6.10/drivers/ide/.setup-pci.o.cmd
Normal file
321
extra/linux-2.6.10/drivers/ide/.setup-pci.o.cmd
Normal file
@@ -0,0 +1,321 @@
|
||||
cmd_drivers/ide/setup-pci.o := gcc -Wp,-MD,drivers/ide/.setup-pci.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=setup_pci -DKBUILD_MODNAME=ide_core -c -o drivers/ide/setup-pci.o drivers/ide/setup-pci.c
|
||||
|
||||
deps_drivers/ide/setup-pci.o := \
|
||||
drivers/ide/setup-pci.c \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/forced.h) \
|
||||
$(wildcard include/config/idedma/pci/auto.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/setup-pci.o: $(deps_drivers/ide/setup-pci.o)
|
||||
|
||||
$(deps_drivers/ide/setup-pci.o):
|
||||
1057
extra/linux-2.6.10/drivers/ide/Kconfig
Normal file
1057
extra/linux-2.6.10/drivers/ide/Kconfig
Normal file
File diff suppressed because it is too large
Load Diff
55
extra/linux-2.6.10/drivers/ide/Makefile
Normal file
55
extra/linux-2.6.10/drivers/ide/Makefile
Normal file
@@ -0,0 +1,55 @@
|
||||
#
|
||||
# Makefile for the kernel ata, atapi, and ide block device drivers.
|
||||
#
|
||||
# 12 September 2000, Bartlomiej Zolnierkiewicz <bkz@linux-ide.org>
|
||||
# Rewritten to use lists instead of if-statements.
|
||||
#
|
||||
# Note : at this point, these files are compiled on all systems.
|
||||
# In the future, some of these should be built conditionally.
|
||||
#
|
||||
# First come modules that register themselves with the core
|
||||
|
||||
EXTRA_CFLAGS += -Idrivers/ide
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_IDE) += pci/
|
||||
|
||||
ide-core-y += ide.o ide-default.o ide-io.o ide-iops.o ide-lib.o ide-probe.o \
|
||||
ide-taskfile.o
|
||||
|
||||
ide-core-$(CONFIG_BLK_DEV_CMD640) += pci/cmd640.o
|
||||
|
||||
# Core IDE code - must come before legacy
|
||||
ide-core-$(CONFIG_BLK_DEV_IDEPCI) += setup-pci.o
|
||||
ide-core-$(CONFIG_BLK_DEV_IDEDMA) += ide-dma.o
|
||||
ide-core-$(CONFIG_BLK_DEV_IDE_TCQ) += ide-tcq.o
|
||||
ide-core-$(CONFIG_PROC_FS) += ide-proc.o
|
||||
ide-core-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o
|
||||
|
||||
# built-in only drivers from arm/
|
||||
ide-core-$(CONFIG_IDE_ARM) += arm/ide_arm.o
|
||||
|
||||
# built-in only drivers from legacy/
|
||||
ide-core-$(CONFIG_BLK_DEV_BUDDHA) += legacy/buddha.o
|
||||
ide-core-$(CONFIG_BLK_DEV_FALCON_IDE) += legacy/falconide.o
|
||||
ide-core-$(CONFIG_BLK_DEV_GAYLE) += legacy/gayle.o
|
||||
ide-core-$(CONFIG_BLK_DEV_MAC_IDE) += legacy/macide.o
|
||||
ide-core-$(CONFIG_BLK_DEV_Q40IDE) += legacy/q40ide.o
|
||||
|
||||
# built-in only drivers from ppc/
|
||||
ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE) += ppc/mpc8xx.o
|
||||
ide-core-$(CONFIG_BLK_DEV_IDE_PMAC) += ppc/pmac.o
|
||||
|
||||
# built-in only drivers from h8300/
|
||||
ide-core-$(CONFIG_H8300) += h8300/ide-h8300.o
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_IDE) += ide-core.o
|
||||
obj-$(CONFIG_IDE_GENERIC) += ide-generic.o
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_IDEDISK) += ide-disk.o
|
||||
obj-$(CONFIG_BLK_DEV_IDECD) += ide-cd.o
|
||||
obj-$(CONFIG_BLK_DEV_IDETAPE) += ide-tape.o
|
||||
obj-$(CONFIG_BLK_DEV_IDEFLOPPY) += ide-floppy.o
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_IDE) += legacy/ arm/
|
||||
obj-$(CONFIG_BLK_DEV_HD) += legacy/
|
||||
obj-$(CONFIG_ETRAX_IDE) += cris/
|
||||
1
extra/linux-2.6.10/drivers/ide/arm/.built-in.o.cmd
Normal file
1
extra/linux-2.6.10/drivers/ide/arm/.built-in.o.cmd
Normal file
@@ -0,0 +1 @@
|
||||
cmd_drivers/ide/arm/built-in.o := rm -f drivers/ide/arm/built-in.o; ar rcs drivers/ide/arm/built-in.o
|
||||
6
extra/linux-2.6.10/drivers/ide/arm/Makefile
Normal file
6
extra/linux-2.6.10/drivers/ide/arm/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_IDE_ICSIDE) += icside.o
|
||||
obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o
|
||||
obj-$(CONFIG_BLK_DEV_IDE_BAST) += bast-ide.o
|
||||
|
||||
EXTRA_CFLAGS := -Idrivers/ide
|
||||
71
extra/linux-2.6.10/drivers/ide/arm/bast-ide.c
Normal file
71
extra/linux-2.6.10/drivers/ide/arm/bast-ide.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/* linux/drivers/ide/arm/bast-ide.c
|
||||
*
|
||||
* Copyright (c) 2003-2004 Simtec Electronics
|
||||
* Ben Dooks <ben@simtec.co.uk>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* 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/errno.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/arch/map.h>
|
||||
#include <asm/arch/bast-map.h>
|
||||
#include <asm/arch/bast-irq.h>
|
||||
|
||||
/* list of registered interfaces */
|
||||
static ide_hwif_t *ifs[2];
|
||||
|
||||
static int __init
|
||||
bastide_register(unsigned int base, unsigned int aux, int irq,
|
||||
ide_hwif_t **hwif)
|
||||
{
|
||||
hw_regs_t hw;
|
||||
int i;
|
||||
|
||||
memset(&hw, 0, sizeof(hw));
|
||||
|
||||
base += BAST_IDE_CS;
|
||||
aux += BAST_IDE_CS;
|
||||
|
||||
for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
|
||||
hw.io_ports[i] = (unsigned long)base;
|
||||
base += 0x20;
|
||||
}
|
||||
|
||||
hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20);
|
||||
hw.irq = irq;
|
||||
|
||||
ide_register_hw(&hw, hwif);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init bastide_init(void)
|
||||
{
|
||||
/* we can treat the VR1000 and the BAST the same */
|
||||
|
||||
if (!(machine_is_bast() || machine_is_vr1000()))
|
||||
return 0;
|
||||
|
||||
printk("BAST: IDE driver, (c) 2003-2004 Simtec Electronics\n");
|
||||
|
||||
bastide_register(BAST_VA_IDEPRI, BAST_VA_IDEPRIAUX, IRQ_IDE0, &ifs[0]);
|
||||
bastide_register(BAST_VA_IDESEC, BAST_VA_IDESECAUX, IRQ_IDE1, &ifs[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(bastide_init);
|
||||
|
||||
MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("Simtec BAST / Thorcom VR1000 IDE driver");
|
||||
1
extra/linux-2.6.10/drivers/ide/arm/built-in.o
Normal file
1
extra/linux-2.6.10/drivers/ide/arm/built-in.o
Normal file
@@ -0,0 +1 @@
|
||||
!<arch>
|
||||
899
extra/linux-2.6.10/drivers/ide/arm/icside.c
Normal file
899
extra/linux-2.6.10/drivers/ide/arm/icside.c
Normal file
@@ -0,0 +1,899 @@
|
||||
/*
|
||||
* linux/drivers/ide/arm/icside.c
|
||||
*
|
||||
* Copyright (c) 1996-2004 Russell King.
|
||||
*
|
||||
* Please note that this platform does not support 32-bit IDE IO.
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
#include <asm/dma.h>
|
||||
#include <asm/ecard.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#define ICS_IDENT_OFFSET 0x2280
|
||||
|
||||
#define ICS_ARCIN_V5_INTRSTAT 0x0000
|
||||
#define ICS_ARCIN_V5_INTROFFSET 0x0004
|
||||
#define ICS_ARCIN_V5_IDEOFFSET 0x2800
|
||||
#define ICS_ARCIN_V5_IDEALTOFFSET 0x2b80
|
||||
#define ICS_ARCIN_V5_IDESTEPPING 6
|
||||
|
||||
#define ICS_ARCIN_V6_IDEOFFSET_1 0x2000
|
||||
#define ICS_ARCIN_V6_INTROFFSET_1 0x2200
|
||||
#define ICS_ARCIN_V6_INTRSTAT_1 0x2290
|
||||
#define ICS_ARCIN_V6_IDEALTOFFSET_1 0x2380
|
||||
#define ICS_ARCIN_V6_IDEOFFSET_2 0x3000
|
||||
#define ICS_ARCIN_V6_INTROFFSET_2 0x3200
|
||||
#define ICS_ARCIN_V6_INTRSTAT_2 0x3290
|
||||
#define ICS_ARCIN_V6_IDEALTOFFSET_2 0x3380
|
||||
#define ICS_ARCIN_V6_IDESTEPPING 6
|
||||
|
||||
struct cardinfo {
|
||||
unsigned int dataoffset;
|
||||
unsigned int ctrloffset;
|
||||
unsigned int stepping;
|
||||
};
|
||||
|
||||
static struct cardinfo icside_cardinfo_v5 = {
|
||||
.dataoffset = ICS_ARCIN_V5_IDEOFFSET,
|
||||
.ctrloffset = ICS_ARCIN_V5_IDEALTOFFSET,
|
||||
.stepping = ICS_ARCIN_V5_IDESTEPPING,
|
||||
};
|
||||
|
||||
static struct cardinfo icside_cardinfo_v6_1 = {
|
||||
.dataoffset = ICS_ARCIN_V6_IDEOFFSET_1,
|
||||
.ctrloffset = ICS_ARCIN_V6_IDEALTOFFSET_1,
|
||||
.stepping = ICS_ARCIN_V6_IDESTEPPING,
|
||||
};
|
||||
|
||||
static struct cardinfo icside_cardinfo_v6_2 = {
|
||||
.dataoffset = ICS_ARCIN_V6_IDEOFFSET_2,
|
||||
.ctrloffset = ICS_ARCIN_V6_IDEALTOFFSET_2,
|
||||
.stepping = ICS_ARCIN_V6_IDESTEPPING,
|
||||
};
|
||||
|
||||
struct icside_state {
|
||||
unsigned int channel;
|
||||
unsigned int enabled;
|
||||
void __iomem *irq_port;
|
||||
void __iomem *ioc_base;
|
||||
unsigned int type;
|
||||
/* parent device... until the IDE core gets one of its own */
|
||||
struct device *dev;
|
||||
ide_hwif_t *hwif[2];
|
||||
};
|
||||
|
||||
#define ICS_TYPE_A3IN 0
|
||||
#define ICS_TYPE_A3USER 1
|
||||
#define ICS_TYPE_V6 3
|
||||
#define ICS_TYPE_V5 15
|
||||
#define ICS_TYPE_NOTYPE ((unsigned int)-1)
|
||||
|
||||
/* ---------------- Version 5 PCB Support Functions --------------------- */
|
||||
/* Prototype: icside_irqenable_arcin_v5 (struct expansion_card *ec, int irqnr)
|
||||
* Purpose : enable interrupts from card
|
||||
*/
|
||||
static void icside_irqenable_arcin_v5 (struct expansion_card *ec, int irqnr)
|
||||
{
|
||||
struct icside_state *state = ec->irq_data;
|
||||
|
||||
writeb(0, state->irq_port + ICS_ARCIN_V5_INTROFFSET);
|
||||
}
|
||||
|
||||
/* Prototype: icside_irqdisable_arcin_v5 (struct expansion_card *ec, int irqnr)
|
||||
* Purpose : disable interrupts from card
|
||||
*/
|
||||
static void icside_irqdisable_arcin_v5 (struct expansion_card *ec, int irqnr)
|
||||
{
|
||||
struct icside_state *state = ec->irq_data;
|
||||
|
||||
readb(state->irq_port + ICS_ARCIN_V5_INTROFFSET);
|
||||
}
|
||||
|
||||
static const expansioncard_ops_t icside_ops_arcin_v5 = {
|
||||
.irqenable = icside_irqenable_arcin_v5,
|
||||
.irqdisable = icside_irqdisable_arcin_v5,
|
||||
};
|
||||
|
||||
|
||||
/* ---------------- Version 6 PCB Support Functions --------------------- */
|
||||
/* Prototype: icside_irqenable_arcin_v6 (struct expansion_card *ec, int irqnr)
|
||||
* Purpose : enable interrupts from card
|
||||
*/
|
||||
static void icside_irqenable_arcin_v6 (struct expansion_card *ec, int irqnr)
|
||||
{
|
||||
struct icside_state *state = ec->irq_data;
|
||||
void __iomem *base = state->irq_port;
|
||||
|
||||
state->enabled = 1;
|
||||
|
||||
switch (state->channel) {
|
||||
case 0:
|
||||
writeb(0, base + ICS_ARCIN_V6_INTROFFSET_1);
|
||||
readb(base + ICS_ARCIN_V6_INTROFFSET_2);
|
||||
break;
|
||||
case 1:
|
||||
writeb(0, base + ICS_ARCIN_V6_INTROFFSET_2);
|
||||
readb(base + ICS_ARCIN_V6_INTROFFSET_1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Prototype: icside_irqdisable_arcin_v6 (struct expansion_card *ec, int irqnr)
|
||||
* Purpose : disable interrupts from card
|
||||
*/
|
||||
static void icside_irqdisable_arcin_v6 (struct expansion_card *ec, int irqnr)
|
||||
{
|
||||
struct icside_state *state = ec->irq_data;
|
||||
|
||||
state->enabled = 0;
|
||||
|
||||
readb(state->irq_port + ICS_ARCIN_V6_INTROFFSET_1);
|
||||
readb(state->irq_port + ICS_ARCIN_V6_INTROFFSET_2);
|
||||
}
|
||||
|
||||
/* Prototype: icside_irqprobe(struct expansion_card *ec)
|
||||
* Purpose : detect an active interrupt from card
|
||||
*/
|
||||
static int icside_irqpending_arcin_v6(struct expansion_card *ec)
|
||||
{
|
||||
struct icside_state *state = ec->irq_data;
|
||||
|
||||
return readb(state->irq_port + ICS_ARCIN_V6_INTRSTAT_1) & 1 ||
|
||||
readb(state->irq_port + ICS_ARCIN_V6_INTRSTAT_2) & 1;
|
||||
}
|
||||
|
||||
static const expansioncard_ops_t icside_ops_arcin_v6 = {
|
||||
.irqenable = icside_irqenable_arcin_v6,
|
||||
.irqdisable = icside_irqdisable_arcin_v6,
|
||||
.irqpending = icside_irqpending_arcin_v6,
|
||||
};
|
||||
|
||||
/*
|
||||
* Handle routing of interrupts. This is called before
|
||||
* we write the command to the drive.
|
||||
*/
|
||||
static void icside_maskproc(ide_drive_t *drive, int mask)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct icside_state *state = hwif->hwif_data;
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
state->channel = hwif->channel;
|
||||
|
||||
if (state->enabled && !mask) {
|
||||
switch (hwif->channel) {
|
||||
case 0:
|
||||
writeb(0, state->irq_port + ICS_ARCIN_V6_INTROFFSET_1);
|
||||
readb(state->irq_port + ICS_ARCIN_V6_INTROFFSET_2);
|
||||
break;
|
||||
case 1:
|
||||
writeb(0, state->irq_port + ICS_ARCIN_V6_INTROFFSET_2);
|
||||
readb(state->irq_port + ICS_ARCIN_V6_INTROFFSET_1);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
readb(state->irq_port + ICS_ARCIN_V6_INTROFFSET_2);
|
||||
readb(state->irq_port + ICS_ARCIN_V6_INTROFFSET_1);
|
||||
}
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_IDEDMA_ICS
|
||||
|
||||
#ifndef CONFIG_IDEDMA_ICS_AUTO
|
||||
#warning CONFIG_IDEDMA_ICS_AUTO=n support is obsolete, and will be removed soon.
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SG-DMA support.
|
||||
*
|
||||
* Similar to the BM-DMA, but we use the RiscPCs IOMD DMA controllers.
|
||||
* There is only one DMA controller per card, which means that only
|
||||
* one drive can be accessed at one time. NOTE! We do not enforce that
|
||||
* here, but we rely on the main IDE driver spotting that both
|
||||
* interfaces use the same IRQ, which should guarantee this.
|
||||
*/
|
||||
|
||||
static void icside_build_sglist(ide_drive_t *drive, struct request *rq)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
struct icside_state *state = hwif->hwif_data;
|
||||
struct scatterlist *sg = hwif->sg_table;
|
||||
|
||||
ide_map_sg(drive, rq);
|
||||
|
||||
if (rq_data_dir(rq) == READ)
|
||||
hwif->sg_dma_direction = DMA_FROM_DEVICE;
|
||||
else
|
||||
hwif->sg_dma_direction = DMA_TO_DEVICE;
|
||||
|
||||
hwif->sg_nents = dma_map_sg(state->dev, sg, hwif->sg_nents,
|
||||
hwif->sg_dma_direction);
|
||||
}
|
||||
|
||||
/*
|
||||
* Configure the IOMD to give the appropriate timings for the transfer
|
||||
* mode being requested. We take the advice of the ATA standards, and
|
||||
* calculate the cycle time based on the transfer mode, and the EIDE
|
||||
* MW DMA specs that the drive provides in the IDENTIFY command.
|
||||
*
|
||||
* We have the following IOMD DMA modes to choose from:
|
||||
*
|
||||
* Type Active Recovery Cycle
|
||||
* A 250 (250) 312 (550) 562 (800)
|
||||
* B 187 250 437
|
||||
* C 125 (125) 125 (375) 250 (500)
|
||||
* D 62 125 187
|
||||
*
|
||||
* (figures in brackets are actual measured timings)
|
||||
*
|
||||
* However, we also need to take care of the read/write active and
|
||||
* recovery timings:
|
||||
*
|
||||
* Read Write
|
||||
* Mode Active -- Recovery -- Cycle IOMD type
|
||||
* MW0 215 50 215 480 A
|
||||
* MW1 80 50 50 150 C
|
||||
* MW2 70 25 25 120 C
|
||||
*/
|
||||
static int icside_set_speed(ide_drive_t *drive, u8 xfer_mode)
|
||||
{
|
||||
int on = 0, cycle_time = 0, use_dma_info = 0;
|
||||
|
||||
/*
|
||||
* Limit the transfer speed to MW_DMA_2.
|
||||
*/
|
||||
if (xfer_mode > XFER_MW_DMA_2)
|
||||
xfer_mode = XFER_MW_DMA_2;
|
||||
|
||||
switch (xfer_mode) {
|
||||
case XFER_MW_DMA_2:
|
||||
cycle_time = 250;
|
||||
use_dma_info = 1;
|
||||
break;
|
||||
|
||||
case XFER_MW_DMA_1:
|
||||
cycle_time = 250;
|
||||
use_dma_info = 1;
|
||||
break;
|
||||
|
||||
case XFER_MW_DMA_0:
|
||||
cycle_time = 480;
|
||||
break;
|
||||
|
||||
case XFER_SW_DMA_2:
|
||||
case XFER_SW_DMA_1:
|
||||
case XFER_SW_DMA_0:
|
||||
cycle_time = 480;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we're going to be doing MW_DMA_1 or MW_DMA_2, we should
|
||||
* take care to note the values in the ID...
|
||||
*/
|
||||
if (use_dma_info && drive->id->eide_dma_time > cycle_time)
|
||||
cycle_time = drive->id->eide_dma_time;
|
||||
|
||||
drive->drive_data = cycle_time;
|
||||
|
||||
if (cycle_time && ide_config_drive_speed(drive, xfer_mode) == 0)
|
||||
on = 1;
|
||||
else
|
||||
drive->drive_data = 480;
|
||||
|
||||
printk("%s: %s selected (peak %dMB/s)\n", drive->name,
|
||||
ide_xfer_verbose(xfer_mode), 2000 / drive->drive_data);
|
||||
|
||||
drive->current_speed = xfer_mode;
|
||||
|
||||
return on;
|
||||
}
|
||||
|
||||
static int icside_dma_host_off(ide_drive_t *drive)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int icside_dma_off_quietly(ide_drive_t *drive)
|
||||
{
|
||||
drive->using_dma = 0;
|
||||
return icside_dma_host_off(drive);
|
||||
}
|
||||
|
||||
static int icside_dma_host_on(ide_drive_t *drive)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int icside_dma_on(ide_drive_t *drive)
|
||||
{
|
||||
drive->using_dma = 1;
|
||||
return icside_dma_host_on(drive);
|
||||
}
|
||||
|
||||
static int icside_dma_check(ide_drive_t *drive)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
int xfer_mode = XFER_PIO_2;
|
||||
int on;
|
||||
|
||||
if (!(id->capability & 1) || !hwif->autodma)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Consult the list of known "bad" drives
|
||||
*/
|
||||
if (__ide_dma_bad_drive(drive))
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Enable DMA on any drive that has multiword DMA
|
||||
*/
|
||||
if (id->field_valid & 2) {
|
||||
xfer_mode = ide_dma_speed(drive, 0);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Consult the list of known "good" drives
|
||||
*/
|
||||
if (__ide_dma_good_drive(drive)) {
|
||||
if (id->eide_dma_time > 150)
|
||||
goto out;
|
||||
xfer_mode = XFER_MW_DMA_1;
|
||||
}
|
||||
|
||||
out:
|
||||
on = icside_set_speed(drive, xfer_mode);
|
||||
|
||||
if (on)
|
||||
return icside_dma_on(drive);
|
||||
else
|
||||
return icside_dma_off_quietly(drive);
|
||||
}
|
||||
|
||||
static int icside_dma_end(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct icside_state *state = hwif->hwif_data;
|
||||
|
||||
drive->waiting_for_dma = 0;
|
||||
|
||||
disable_dma(hwif->hw.dma);
|
||||
|
||||
/* Teardown mappings after DMA has completed. */
|
||||
dma_unmap_sg(state->dev, hwif->sg_table, hwif->sg_nents,
|
||||
hwif->sg_dma_direction);
|
||||
|
||||
return get_dma_residue(hwif->hw.dma) != 0;
|
||||
}
|
||||
|
||||
static void icside_dma_start(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
|
||||
/* We can not enable DMA on both channels simultaneously. */
|
||||
BUG_ON(dma_channel_active(hwif->hw.dma));
|
||||
enable_dma(hwif->hw.dma);
|
||||
}
|
||||
|
||||
/*
|
||||
* dma_intr() is the handler for disk read/write DMA interrupts
|
||||
*/
|
||||
static ide_startstop_t icside_dmaintr(ide_drive_t *drive)
|
||||
{
|
||||
unsigned int stat;
|
||||
int dma_stat;
|
||||
|
||||
dma_stat = icside_dma_end(drive);
|
||||
stat = HWIF(drive)->INB(IDE_STATUS_REG);
|
||||
if (OK_STAT(stat, DRIVE_READY, drive->bad_wstat | DRQ_STAT)) {
|
||||
if (!dma_stat) {
|
||||
struct request *rq = HWGROUP(drive)->rq;
|
||||
int i;
|
||||
|
||||
for (i = rq->nr_sectors; i > 0; ) {
|
||||
i -= rq->current_nr_sectors;
|
||||
DRIVER(drive)->end_request(drive, 1, rq->nr_sectors);
|
||||
}
|
||||
|
||||
return ide_stopped;
|
||||
}
|
||||
printk(KERN_ERR "%s: bad DMA status (dma_stat=%x)\n",
|
||||
drive->name, dma_stat);
|
||||
}
|
||||
|
||||
return DRIVER(drive)->error(drive, __FUNCTION__, stat);
|
||||
}
|
||||
|
||||
static int icside_dma_setup(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct request *rq = hwif->hwgroup->rq;
|
||||
unsigned int dma_mode;
|
||||
|
||||
if (rq_data_dir(rq))
|
||||
dma_mode = DMA_MODE_WRITE;
|
||||
else
|
||||
dma_mode = DMA_MODE_READ;
|
||||
|
||||
/*
|
||||
* We can not enable DMA on both channels.
|
||||
*/
|
||||
BUG_ON(dma_channel_active(hwif->hw.dma));
|
||||
|
||||
icside_build_sglist(drive, rq);
|
||||
|
||||
/*
|
||||
* Ensure that we have the right interrupt routed.
|
||||
*/
|
||||
icside_maskproc(drive, 0);
|
||||
|
||||
/*
|
||||
* Route the DMA signals to the correct interface.
|
||||
*/
|
||||
writeb(hwif->select_data, hwif->config_data);
|
||||
|
||||
/*
|
||||
* Select the correct timing for this drive.
|
||||
*/
|
||||
set_dma_speed(hwif->hw.dma, drive->drive_data);
|
||||
|
||||
/*
|
||||
* Tell the DMA engine about the SG table and
|
||||
* data direction.
|
||||
*/
|
||||
set_dma_sg(hwif->hw.dma, hwif->sg_table, hwif->sg_nents);
|
||||
set_dma_mode(hwif->hw.dma, dma_mode);
|
||||
|
||||
drive->waiting_for_dma = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void icside_dma_exec_cmd(ide_drive_t *drive, u8 cmd)
|
||||
{
|
||||
/* issue cmd to drive */
|
||||
ide_execute_command(drive, cmd, icside_dmaintr, 2*WAIT_CMD, NULL);
|
||||
}
|
||||
|
||||
static int icside_dma_test_irq(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct icside_state *state = hwif->hwif_data;
|
||||
|
||||
return readb(state->irq_port +
|
||||
(hwif->channel ?
|
||||
ICS_ARCIN_V6_INTRSTAT_2 :
|
||||
ICS_ARCIN_V6_INTRSTAT_1)) & 1;
|
||||
}
|
||||
|
||||
static int icside_dma_timeout(ide_drive_t *drive)
|
||||
{
|
||||
printk(KERN_ERR "%s: DMA timeout occurred: ", drive->name);
|
||||
|
||||
if (icside_dma_test_irq(drive))
|
||||
return 0;
|
||||
|
||||
ide_dump_status(drive, "DMA timeout",
|
||||
HWIF(drive)->INB(IDE_STATUS_REG));
|
||||
|
||||
return icside_dma_end(drive);
|
||||
}
|
||||
|
||||
static int icside_dma_lostirq(ide_drive_t *drive)
|
||||
{
|
||||
printk(KERN_ERR "%s: IRQ lost\n", drive->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void icside_dma_init(ide_hwif_t *hwif)
|
||||
{
|
||||
int autodma = 0;
|
||||
|
||||
#ifdef CONFIG_IDEDMA_ICS_AUTO
|
||||
autodma = 1;
|
||||
#endif
|
||||
|
||||
printk(" %s: SG-DMA", hwif->name);
|
||||
|
||||
hwif->atapi_dma = 1;
|
||||
hwif->mwdma_mask = 7; /* MW0..2 */
|
||||
hwif->swdma_mask = 7; /* SW0..2 */
|
||||
|
||||
hwif->dmatable_cpu = NULL;
|
||||
hwif->dmatable_dma = 0;
|
||||
hwif->speedproc = icside_set_speed;
|
||||
hwif->autodma = autodma;
|
||||
|
||||
hwif->ide_dma_check = icside_dma_check;
|
||||
hwif->ide_dma_host_off = icside_dma_host_off;
|
||||
hwif->ide_dma_off_quietly = icside_dma_off_quietly;
|
||||
hwif->ide_dma_host_on = icside_dma_host_on;
|
||||
hwif->ide_dma_on = icside_dma_on;
|
||||
hwif->dma_setup = icside_dma_setup;
|
||||
hwif->dma_exec_cmd = icside_dma_exec_cmd;
|
||||
hwif->dma_start = icside_dma_start;
|
||||
hwif->ide_dma_end = icside_dma_end;
|
||||
hwif->ide_dma_test_irq = icside_dma_test_irq;
|
||||
hwif->ide_dma_timeout = icside_dma_timeout;
|
||||
hwif->ide_dma_lostirq = icside_dma_lostirq;
|
||||
|
||||
hwif->drives[0].autodma = hwif->autodma;
|
||||
hwif->drives[1].autodma = hwif->autodma;
|
||||
|
||||
printk(" capable%s\n", hwif->autodma ? ", auto-enable" : "");
|
||||
}
|
||||
#else
|
||||
#define icside_dma_init(hwif) (0)
|
||||
#endif
|
||||
|
||||
static ide_hwif_t *icside_find_hwif(unsigned long dataport)
|
||||
{
|
||||
ide_hwif_t *hwif;
|
||||
int index;
|
||||
|
||||
for (index = 0; index < MAX_HWIFS; ++index) {
|
||||
hwif = &ide_hwifs[index];
|
||||
if (hwif->io_ports[IDE_DATA_OFFSET] == dataport)
|
||||
goto found;
|
||||
}
|
||||
|
||||
for (index = 0; index < MAX_HWIFS; ++index) {
|
||||
hwif = &ide_hwifs[index];
|
||||
if (!hwif->io_ports[IDE_DATA_OFFSET])
|
||||
goto found;
|
||||
}
|
||||
|
||||
hwif = NULL;
|
||||
found:
|
||||
return hwif;
|
||||
}
|
||||
|
||||
static ide_hwif_t *
|
||||
icside_setup(void __iomem *base, struct cardinfo *info, struct expansion_card *ec)
|
||||
{
|
||||
unsigned long port = (unsigned long)base + info->dataoffset;
|
||||
ide_hwif_t *hwif;
|
||||
|
||||
hwif = icside_find_hwif(port);
|
||||
if (hwif) {
|
||||
int i;
|
||||
|
||||
memset(&hwif->hw, 0, sizeof(hw_regs_t));
|
||||
|
||||
/*
|
||||
* Ensure we're using MMIO
|
||||
*/
|
||||
default_hwif_mmiops(hwif);
|
||||
hwif->mmio = 2;
|
||||
|
||||
for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
|
||||
hwif->hw.io_ports[i] = port;
|
||||
hwif->io_ports[i] = port;
|
||||
port += 1 << info->stepping;
|
||||
}
|
||||
hwif->hw.io_ports[IDE_CONTROL_OFFSET] = (unsigned long)base + info->ctrloffset;
|
||||
hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)base + info->ctrloffset;
|
||||
hwif->hw.irq = ec->irq;
|
||||
hwif->irq = ec->irq;
|
||||
hwif->noprobe = 0;
|
||||
hwif->chipset = ide_acorn;
|
||||
hwif->gendev.parent = &ec->dev;
|
||||
}
|
||||
|
||||
return hwif;
|
||||
}
|
||||
|
||||
static int __init
|
||||
icside_register_v5(struct icside_state *state, struct expansion_card *ec)
|
||||
{
|
||||
ide_hwif_t *hwif;
|
||||
void __iomem *base;
|
||||
|
||||
base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC),
|
||||
ecard_resource_len(ec, ECARD_RES_MEMC));
|
||||
if (!base)
|
||||
return -ENOMEM;
|
||||
|
||||
state->irq_port = base;
|
||||
|
||||
ec->irqaddr = base + ICS_ARCIN_V5_INTRSTAT;
|
||||
ec->irqmask = 1;
|
||||
ec->irq_data = state;
|
||||
ec->ops = &icside_ops_arcin_v5;
|
||||
|
||||
/*
|
||||
* Be on the safe side - disable interrupts
|
||||
*/
|
||||
icside_irqdisable_arcin_v5(ec, 0);
|
||||
|
||||
hwif = icside_setup(base, &icside_cardinfo_v5, ec);
|
||||
if (!hwif) {
|
||||
iounmap(base);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
state->hwif[0] = hwif;
|
||||
|
||||
probe_hwif_init(hwif);
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init
|
||||
icside_register_v6(struct icside_state *state, struct expansion_card *ec)
|
||||
{
|
||||
ide_hwif_t *hwif, *mate;
|
||||
void __iomem *ioc_base, *easi_base;
|
||||
unsigned int sel = 0;
|
||||
int ret;
|
||||
|
||||
ioc_base = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST),
|
||||
ecard_resource_len(ec, ECARD_RES_IOCFAST));
|
||||
if (!ioc_base) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
easi_base = ioc_base;
|
||||
|
||||
if (ecard_resource_flags(ec, ECARD_RES_EASI)) {
|
||||
easi_base = ioremap(ecard_resource_start(ec, ECARD_RES_EASI),
|
||||
ecard_resource_len(ec, ECARD_RES_EASI));
|
||||
if (!easi_base) {
|
||||
ret = -ENOMEM;
|
||||
goto unmap_slot;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable access to the EASI region.
|
||||
*/
|
||||
sel = 1 << 5;
|
||||
}
|
||||
|
||||
writeb(sel, ioc_base);
|
||||
|
||||
ec->irq_data = state;
|
||||
ec->ops = &icside_ops_arcin_v6;
|
||||
|
||||
state->irq_port = easi_base;
|
||||
state->ioc_base = ioc_base;
|
||||
|
||||
/*
|
||||
* Be on the safe side - disable interrupts
|
||||
*/
|
||||
icside_irqdisable_arcin_v6(ec, 0);
|
||||
|
||||
/*
|
||||
* Find and register the interfaces.
|
||||
*/
|
||||
hwif = icside_setup(easi_base, &icside_cardinfo_v6_1, ec);
|
||||
mate = icside_setup(easi_base, &icside_cardinfo_v6_2, ec);
|
||||
|
||||
if (!hwif || !mate) {
|
||||
ret = -ENODEV;
|
||||
goto unmap_port;
|
||||
}
|
||||
|
||||
state->hwif[0] = hwif;
|
||||
state->hwif[1] = mate;
|
||||
|
||||
hwif->maskproc = icside_maskproc;
|
||||
hwif->channel = 0;
|
||||
hwif->hwif_data = state;
|
||||
hwif->mate = mate;
|
||||
hwif->serialized = 1;
|
||||
hwif->config_data = (unsigned long)ioc_base;
|
||||
hwif->select_data = sel;
|
||||
hwif->hw.dma = ec->dma;
|
||||
|
||||
mate->maskproc = icside_maskproc;
|
||||
mate->channel = 1;
|
||||
mate->hwif_data = state;
|
||||
mate->mate = hwif;
|
||||
mate->serialized = 1;
|
||||
mate->config_data = (unsigned long)ioc_base;
|
||||
mate->select_data = sel | 1;
|
||||
mate->hw.dma = ec->dma;
|
||||
|
||||
if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) {
|
||||
icside_dma_init(hwif);
|
||||
icside_dma_init(mate);
|
||||
}
|
||||
|
||||
probe_hwif_init(hwif);
|
||||
probe_hwif_init(mate);
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 0;
|
||||
|
||||
unmap_port:
|
||||
if (easi_base != ioc_base)
|
||||
iounmap(easi_base);
|
||||
unmap_slot:
|
||||
iounmap(ioc_base);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __devinit
|
||||
icside_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||
{
|
||||
struct icside_state *state;
|
||||
void *idmem;
|
||||
int ret;
|
||||
|
||||
ret = ecard_request_resources(ec);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
state = kmalloc(sizeof(struct icside_state), GFP_KERNEL);
|
||||
if (!state) {
|
||||
ret = -ENOMEM;
|
||||
goto release;
|
||||
}
|
||||
|
||||
memset(state, 0, sizeof(state));
|
||||
state->type = ICS_TYPE_NOTYPE;
|
||||
state->dev = &ec->dev;
|
||||
|
||||
idmem = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST),
|
||||
ecard_resource_len(ec, ECARD_RES_IOCFAST));
|
||||
if (idmem) {
|
||||
unsigned int type;
|
||||
|
||||
type = readb(idmem + ICS_IDENT_OFFSET) & 1;
|
||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1;
|
||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2;
|
||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3;
|
||||
iounmap(idmem);
|
||||
|
||||
state->type = type;
|
||||
}
|
||||
|
||||
switch (state->type) {
|
||||
case ICS_TYPE_A3IN:
|
||||
dev_warn(&ec->dev, "A3IN unsupported\n");
|
||||
ret = -ENODEV;
|
||||
break;
|
||||
|
||||
case ICS_TYPE_A3USER:
|
||||
dev_warn(&ec->dev, "A3USER unsupported\n");
|
||||
ret = -ENODEV;
|
||||
break;
|
||||
|
||||
case ICS_TYPE_V5:
|
||||
ret = icside_register_v5(state, ec);
|
||||
break;
|
||||
|
||||
case ICS_TYPE_V6:
|
||||
ret = icside_register_v6(state, ec);
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_warn(&ec->dev, "unknown interface type\n");
|
||||
ret = -ENODEV;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
ecard_set_drvdata(ec, state);
|
||||
goto out;
|
||||
}
|
||||
|
||||
kfree(state);
|
||||
release:
|
||||
ecard_release_resources(ec);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __devexit icside_remove(struct expansion_card *ec)
|
||||
{
|
||||
struct icside_state *state = ecard_get_drvdata(ec);
|
||||
|
||||
switch (state->type) {
|
||||
case ICS_TYPE_V5:
|
||||
/* FIXME: tell IDE to stop using the interface */
|
||||
|
||||
/* Disable interrupts */
|
||||
icside_irqdisable_arcin_v5(ec, 0);
|
||||
break;
|
||||
|
||||
case ICS_TYPE_V6:
|
||||
/* FIXME: tell IDE to stop using the interface */
|
||||
if (ec->dma != NO_DMA)
|
||||
free_dma(ec->dma);
|
||||
|
||||
/* Disable interrupts */
|
||||
icside_irqdisable_arcin_v6(ec, 0);
|
||||
|
||||
/* Reset the ROM pointer/EASI selection */
|
||||
writeb(0, state->ioc_base);
|
||||
break;
|
||||
}
|
||||
|
||||
ecard_set_drvdata(ec, NULL);
|
||||
ec->ops = NULL;
|
||||
ec->irq_data = NULL;
|
||||
|
||||
if (state->ioc_base)
|
||||
iounmap(state->ioc_base);
|
||||
if (state->ioc_base != state->irq_port)
|
||||
iounmap(state->irq_port);
|
||||
|
||||
kfree(state);
|
||||
ecard_release_resources(ec);
|
||||
}
|
||||
|
||||
static void icside_shutdown(struct expansion_card *ec)
|
||||
{
|
||||
struct icside_state *state = ecard_get_drvdata(ec);
|
||||
unsigned long flags;
|
||||
|
||||
/*
|
||||
* Disable interrupts from this card. We need to do
|
||||
* this before disabling EASI since we may be accessing
|
||||
* this register via that region.
|
||||
*/
|
||||
local_irq_save(flags);
|
||||
ec->ops->irqdisable(ec, 0);
|
||||
local_irq_restore(flags);
|
||||
|
||||
/*
|
||||
* Reset the ROM pointer so that we can read the ROM
|
||||
* after a soft reboot. This also disables access to
|
||||
* the IDE taskfile via the EASI region.
|
||||
*/
|
||||
if (state->ioc_base)
|
||||
writeb(0, state->ioc_base);
|
||||
}
|
||||
|
||||
static const struct ecard_id icside_ids[] = {
|
||||
{ MANU_ICS, PROD_ICS_IDE },
|
||||
{ MANU_ICS2, PROD_ICS2_IDE },
|
||||
{ 0xffff, 0xffff }
|
||||
};
|
||||
|
||||
static struct ecard_driver icside_driver = {
|
||||
.probe = icside_probe,
|
||||
.remove = __devexit_p(icside_remove),
|
||||
.shutdown = icside_shutdown,
|
||||
.id_table = icside_ids,
|
||||
.drv = {
|
||||
.name = "icside",
|
||||
},
|
||||
};
|
||||
|
||||
static int __init icside_init(void)
|
||||
{
|
||||
return ecard_register_driver(&icside_driver);
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("ICS IDE driver");
|
||||
|
||||
module_init(icside_init);
|
||||
43
extra/linux-2.6.10/drivers/ide/arm/ide_arm.c
Normal file
43
extra/linux-2.6.10/drivers/ide/arm/ide_arm.c
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* ARM/ARM26 default IDE host driver
|
||||
*
|
||||
* Copyright (C) 2004 Bartlomiej Zolnierkiewicz
|
||||
* Based on code by: Russell King, Ian Molton and Alexander Schulz.
|
||||
*
|
||||
* May be copied or modified under the terms of the GNU General Public License.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ide.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
#ifdef CONFIG_ARM26
|
||||
# define IDE_ARM_HOST (machine_is_a5k())
|
||||
#else
|
||||
# define IDE_ARM_HOST (1)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_CLPS7500
|
||||
# include <asm/arch/hardware.h>
|
||||
#
|
||||
# define IDE_ARM_IO (ISASLOT_IO + 0x1f0)
|
||||
# define IDE_ARM_IRQ IRQ_ISA_14
|
||||
#else
|
||||
# define IDE_ARM_IO 0x1f0
|
||||
# define IDE_ARM_IRQ IRQ_HARDDISK
|
||||
#endif
|
||||
|
||||
void __init ide_arm_init(void)
|
||||
{
|
||||
if (IDE_ARM_HOST) {
|
||||
hw_regs_t hw;
|
||||
|
||||
memset(&hw, 0, sizeof(hw));
|
||||
ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206);
|
||||
hw.irq = IDE_ARM_IRQ;
|
||||
ide_register_hw(&hw, NULL);
|
||||
}
|
||||
}
|
||||
125
extra/linux-2.6.10/drivers/ide/arm/rapide.c
Normal file
125
extra/linux-2.6.10/drivers/ide/arm/rapide.c
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* linux/drivers/ide/arm/rapide.c
|
||||
*
|
||||
* Copyright (c) 1996-2002 Russell King.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/ecard.h>
|
||||
|
||||
/*
|
||||
* Something like this really should be in generic code, but isn't.
|
||||
*/
|
||||
static ide_hwif_t *
|
||||
rapide_locate_hwif(void __iomem *base, void *ctrl, unsigned int sz, int irq)
|
||||
{
|
||||
unsigned long port = (unsigned long)base;
|
||||
ide_hwif_t *hwif;
|
||||
int index, i;
|
||||
|
||||
for (index = 0; index < MAX_HWIFS; ++index) {
|
||||
hwif = ide_hwifs + index;
|
||||
if (hwif->io_ports[IDE_DATA_OFFSET] == port)
|
||||
goto found;
|
||||
}
|
||||
|
||||
for (index = 0; index < MAX_HWIFS; ++index) {
|
||||
hwif = ide_hwifs + index;
|
||||
if (hwif->io_ports[IDE_DATA_OFFSET] == 0)
|
||||
goto found;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
found:
|
||||
for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
|
||||
hwif->hw.io_ports[i] = port;
|
||||
hwif->io_ports[i] = port;
|
||||
port += sz;
|
||||
}
|
||||
hwif->hw.io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl;
|
||||
hwif->io_ports[IDE_CONTROL_OFFSET] = (unsigned long)ctrl;
|
||||
hwif->hw.irq = hwif->irq = irq;
|
||||
hwif->mmio = 2;
|
||||
default_hwif_mmiops(hwif);
|
||||
|
||||
return hwif;
|
||||
}
|
||||
|
||||
static int __devinit
|
||||
rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||
{
|
||||
ide_hwif_t *hwif;
|
||||
void __iomem *base;
|
||||
int ret;
|
||||
|
||||
ret = ecard_request_resources(ec);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC),
|
||||
ecard_resource_len(ec, ECARD_RES_MEMC));
|
||||
if (!base) {
|
||||
ret = -ENOMEM;
|
||||
goto release;
|
||||
}
|
||||
|
||||
hwif = rapide_locate_hwif(base, base + 0x818, 1 << 6, ec->irq);
|
||||
if (hwif) {
|
||||
hwif->hwif_data = base;
|
||||
hwif->gendev.parent = &ec->dev;
|
||||
hwif->noprobe = 0;
|
||||
probe_hwif_init(hwif);
|
||||
create_proc_ide_interfaces();
|
||||
ecard_set_drvdata(ec, hwif);
|
||||
goto out;
|
||||
}
|
||||
|
||||
iounmap(base);
|
||||
release:
|
||||
ecard_release_resources(ec);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __devexit rapide_remove(struct expansion_card *ec)
|
||||
{
|
||||
ide_hwif_t *hwif = ecard_get_drvdata(ec);
|
||||
|
||||
ecard_set_drvdata(ec, NULL);
|
||||
|
||||
/* there must be a better way */
|
||||
ide_unregister(hwif - ide_hwifs);
|
||||
iounmap(hwif->hwif_data);
|
||||
ecard_release_resources(ec);
|
||||
}
|
||||
|
||||
static struct ecard_id rapide_ids[] = {
|
||||
{ MANU_YELLOWSTONE, PROD_YELLOWSTONE_RAPIDE32 },
|
||||
{ 0xffff, 0xffff }
|
||||
};
|
||||
|
||||
static struct ecard_driver rapide_driver = {
|
||||
.probe = rapide_probe,
|
||||
.remove = __devexit_p(rapide_remove),
|
||||
.id_table = rapide_ids,
|
||||
.drv = {
|
||||
.name = "rapide",
|
||||
},
|
||||
};
|
||||
|
||||
static int __init rapide_init(void)
|
||||
{
|
||||
return ecard_register_driver(&rapide_driver);
|
||||
}
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("Yellowstone RAPIDE driver");
|
||||
|
||||
module_init(rapide_init);
|
||||
BIN
extra/linux-2.6.10/drivers/ide/built-in.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/built-in.o
Normal file
Binary file not shown.
3
extra/linux-2.6.10/drivers/ide/cris/Makefile
Normal file
3
extra/linux-2.6.10/drivers/ide/cris/Makefile
Normal file
@@ -0,0 +1,3 @@
|
||||
EXTRA_CFLAGS += -Idrivers/ide
|
||||
|
||||
obj-$(CONFIG_ETRAX_ARCH_V10) += ide-v10.o
|
||||
859
extra/linux-2.6.10/drivers/ide/cris/ide-v10.c
Normal file
859
extra/linux-2.6.10/drivers/ide/cris/ide-v10.c
Normal file
@@ -0,0 +1,859 @@
|
||||
/* $Id: ide.c,v 1.4 2004/10/12 07:55:48 starvik Exp $
|
||||
*
|
||||
* Etrax specific IDE functions, like init and PIO-mode setting etc.
|
||||
* Almost the entire ide.c is used for the rest of the Etrax ATA driver.
|
||||
* Copyright (c) 2000-2004 Axis Communications AB
|
||||
*
|
||||
* Authors: Bjorn Wesen (initial version)
|
||||
* Mikael Starvik (pio setup stuff, Linux 2.6 port)
|
||||
*/
|
||||
|
||||
/* Regarding DMA:
|
||||
*
|
||||
* There are two forms of DMA - "DMA handshaking" between the interface and the drive,
|
||||
* and DMA between the memory and the interface. We can ALWAYS use the latter, since it's
|
||||
* something built-in in the Etrax. However only some drives support the DMA-mode handshaking
|
||||
* on the ATA-bus. The normal PC driver and Triton interface disables memory-if DMA when the
|
||||
* device can't do DMA handshaking for some stupid reason. We don't need to do that.
|
||||
*/
|
||||
|
||||
#undef REALLY_SLOW_IO /* most systems can safely undef this */
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/svinto.h>
|
||||
#include <asm/dma.h>
|
||||
|
||||
/* number of Etrax DMA descriptors */
|
||||
#define MAX_DMA_DESCRS 64
|
||||
|
||||
/* number of times to retry busy-flags when reading/writing IDE-registers
|
||||
* this can't be too high because a hung harddisk might cause the watchdog
|
||||
* to trigger (sometimes INB and OUTB are called with irq's disabled)
|
||||
*/
|
||||
|
||||
#define IDE_REGISTER_TIMEOUT 300
|
||||
|
||||
static int e100_read_command = 0;
|
||||
|
||||
#define LOWDB(x)
|
||||
#define D(x)
|
||||
|
||||
static int e100_ide_build_dmatable (ide_drive_t *drive);
|
||||
static ide_startstop_t etrax_dma_intr (ide_drive_t *drive);
|
||||
|
||||
void
|
||||
etrax100_ide_outw(unsigned short data, unsigned long reg) {
|
||||
int timeleft;
|
||||
LOWDB(printk("ow: data 0x%x, reg 0x%x\n", data, reg));
|
||||
|
||||
/* note the lack of handling any timeouts. we stop waiting, but we don't
|
||||
* really notify anybody.
|
||||
*/
|
||||
|
||||
timeleft = IDE_REGISTER_TIMEOUT;
|
||||
/* wait for busy flag */
|
||||
while(timeleft && (*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)))
|
||||
timeleft--;
|
||||
|
||||
/*
|
||||
* Fall through at a timeout, so the ongoing command will be
|
||||
* aborted by the write below, which is expected to be a dummy
|
||||
* command to the command register. This happens when a faulty
|
||||
* drive times out on a command. See comment on timeout in
|
||||
* INB.
|
||||
*/
|
||||
if(!timeleft)
|
||||
printk("ATA timeout reg 0x%lx := 0x%x\n", reg, data);
|
||||
|
||||
*R_ATA_CTRL_DATA = reg | data; /* write data to the drive's register */
|
||||
|
||||
timeleft = IDE_REGISTER_TIMEOUT;
|
||||
/* wait for transmitter ready */
|
||||
while(timeleft && !(*R_ATA_STATUS_DATA &
|
||||
IO_MASK(R_ATA_STATUS_DATA, tr_rdy)))
|
||||
timeleft--;
|
||||
}
|
||||
|
||||
void
|
||||
etrax100_ide_outb(unsigned char data, unsigned long reg)
|
||||
{
|
||||
etrax100_ide_outw(data, reg);
|
||||
}
|
||||
|
||||
void
|
||||
etrax100_ide_outbsync(ide_drive_t *drive, u8 addr, unsigned long port)
|
||||
{
|
||||
etrax100_ide_outw(addr, port);
|
||||
}
|
||||
|
||||
unsigned short
|
||||
etrax100_ide_inw(unsigned long reg) {
|
||||
int status;
|
||||
int timeleft;
|
||||
|
||||
timeleft = IDE_REGISTER_TIMEOUT;
|
||||
/* wait for busy flag */
|
||||
while(timeleft && (*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)))
|
||||
timeleft--;
|
||||
|
||||
if(!timeleft) {
|
||||
/*
|
||||
* If we're asked to read the status register, like for
|
||||
* example when a command does not complete for an
|
||||
* extended time, but the ATA interface is stuck in a
|
||||
* busy state at the *ETRAX* ATA interface level (as has
|
||||
* happened repeatedly with at least one bad disk), then
|
||||
* the best thing to do is to pretend that we read
|
||||
* "busy" in the status register, so the IDE driver will
|
||||
* time-out, abort the ongoing command and perform a
|
||||
* reset sequence. Note that the subsequent OUT_BYTE
|
||||
* call will also timeout on busy, but as long as the
|
||||
* write is still performed, everything will be fine.
|
||||
*/
|
||||
if ((reg & IO_MASK (R_ATA_CTRL_DATA, addr))
|
||||
== IO_FIELD (R_ATA_CTRL_DATA, addr, IDE_STATUS_OFFSET))
|
||||
return BUSY_STAT;
|
||||
else
|
||||
/* For other rare cases we assume 0 is good enough. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
*R_ATA_CTRL_DATA = reg | IO_STATE(R_ATA_CTRL_DATA, rw, read); /* read data */
|
||||
|
||||
timeleft = IDE_REGISTER_TIMEOUT;
|
||||
/* wait for available */
|
||||
while(timeleft && !((status = *R_ATA_STATUS_DATA) &
|
||||
IO_MASK(R_ATA_STATUS_DATA, dav)))
|
||||
timeleft--;
|
||||
|
||||
if(!timeleft)
|
||||
return 0;
|
||||
|
||||
LOWDB(printk("inb: 0x%x from reg 0x%x\n", status & 0xff, reg));
|
||||
|
||||
return (unsigned short)status;
|
||||
}
|
||||
|
||||
unsigned char
|
||||
etrax100_ide_inb(unsigned long reg)
|
||||
{
|
||||
return (unsigned char)etrax100_ide_inw(reg);
|
||||
}
|
||||
|
||||
/* PIO timing (in R_ATA_CONFIG)
|
||||
*
|
||||
* _____________________________
|
||||
* ADDRESS : ________/
|
||||
*
|
||||
* _______________
|
||||
* DIOR : ____________/ \__________
|
||||
*
|
||||
* _______________
|
||||
* DATA : XXXXXXXXXXXXXXXX_______________XXXXXXXX
|
||||
*
|
||||
*
|
||||
* DIOR is unbuffered while address and data is buffered.
|
||||
* This creates two problems:
|
||||
* 1. The DIOR pulse is to early (because it is unbuffered)
|
||||
* 2. The rise time of DIOR is long
|
||||
*
|
||||
* There are at least three different plausible solutions
|
||||
* 1. Use a pad capable of larger currents in Etrax
|
||||
* 2. Use an external buffer
|
||||
* 3. Make the strobe pulse longer
|
||||
*
|
||||
* Some of the strobe timings below are modified to compensate
|
||||
* for this. This implies a slight performance decrease.
|
||||
*
|
||||
* THIS SHOULD NEVER BE CHANGED!
|
||||
*
|
||||
* TODO: Is this true for the latest LX boards still ?
|
||||
*/
|
||||
|
||||
#define ATA_DMA2_STROBE 4
|
||||
#define ATA_DMA2_HOLD 0
|
||||
#define ATA_DMA1_STROBE 4
|
||||
#define ATA_DMA1_HOLD 1
|
||||
#define ATA_DMA0_STROBE 12
|
||||
#define ATA_DMA0_HOLD 9
|
||||
#define ATA_PIO4_SETUP 1
|
||||
#define ATA_PIO4_STROBE 5
|
||||
#define ATA_PIO4_HOLD 0
|
||||
#define ATA_PIO3_SETUP 1
|
||||
#define ATA_PIO3_STROBE 5
|
||||
#define ATA_PIO3_HOLD 1
|
||||
#define ATA_PIO2_SETUP 1
|
||||
#define ATA_PIO2_STROBE 6
|
||||
#define ATA_PIO2_HOLD 2
|
||||
#define ATA_PIO1_SETUP 2
|
||||
#define ATA_PIO1_STROBE 11
|
||||
#define ATA_PIO1_HOLD 4
|
||||
#define ATA_PIO0_SETUP 4
|
||||
#define ATA_PIO0_STROBE 19
|
||||
#define ATA_PIO0_HOLD 4
|
||||
|
||||
static int e100_dma_check (ide_drive_t *drive);
|
||||
static void e100_dma_start(ide_drive_t *drive);
|
||||
static int e100_dma_end (ide_drive_t *drive);
|
||||
static void e100_ide_input_data (ide_drive_t *drive, void *, unsigned int);
|
||||
static void e100_ide_output_data (ide_drive_t *drive, void *, unsigned int);
|
||||
static void e100_atapi_input_bytes(ide_drive_t *drive, void *, unsigned int);
|
||||
static void e100_atapi_output_bytes(ide_drive_t *drive, void *, unsigned int);
|
||||
static int e100_dma_off (ide_drive_t *drive);
|
||||
|
||||
|
||||
/*
|
||||
* good_dma_drives() lists the model names (from "hdparm -i")
|
||||
* of drives which do not support mword2 DMA but which are
|
||||
* known to work fine with this interface under Linux.
|
||||
*/
|
||||
|
||||
const char *good_dma_drives[] = {"Micropolis 2112A",
|
||||
"CONNER CTMA 4000",
|
||||
"CONNER CTT8000-A",
|
||||
NULL};
|
||||
|
||||
static void tune_e100_ide(ide_drive_t *drive, byte pio)
|
||||
{
|
||||
pio = 4;
|
||||
/* pio = ide_get_best_pio_mode(drive, pio, 4, NULL); */
|
||||
|
||||
/* set pio mode! */
|
||||
|
||||
switch(pio) {
|
||||
case 0:
|
||||
*R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable, 1 ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_hold, ATA_DMA2_HOLD ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_setup, ATA_PIO0_SETUP ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO0_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_hold, ATA_PIO0_HOLD ) );
|
||||
break;
|
||||
case 1:
|
||||
*R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable, 1 ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_hold, ATA_DMA2_HOLD ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_setup, ATA_PIO1_SETUP ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO1_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_hold, ATA_PIO1_HOLD ) );
|
||||
break;
|
||||
case 2:
|
||||
*R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable, 1 ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_hold, ATA_DMA2_HOLD ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_setup, ATA_PIO2_SETUP ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO2_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_hold, ATA_PIO2_HOLD ) );
|
||||
break;
|
||||
case 3:
|
||||
*R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable, 1 ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_hold, ATA_DMA2_HOLD ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_setup, ATA_PIO3_SETUP ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO3_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_hold, ATA_PIO3_HOLD ) );
|
||||
break;
|
||||
case 4:
|
||||
*R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable, 1 ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_hold, ATA_DMA2_HOLD ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_setup, ATA_PIO4_SETUP ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO4_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_hold, ATA_PIO4_HOLD ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static int e100_dma_setup(ide_drive_t *drive)
|
||||
{
|
||||
struct request *rq = drive->hwif->hwgroup->rq;
|
||||
|
||||
if (rq_data_dir(rq)) {
|
||||
e100_read_command = 0;
|
||||
|
||||
RESET_DMA(ATA_TX_DMA_NBR); /* sometimes the DMA channel get stuck so we need to do this */
|
||||
WAIT_DMA(ATA_TX_DMA_NBR);
|
||||
} else {
|
||||
e100_read_command = 1;
|
||||
|
||||
RESET_DMA(ATA_RX_DMA_NBR); /* sometimes the DMA channel get stuck so we need to do this */
|
||||
WAIT_DMA(ATA_RX_DMA_NBR);
|
||||
}
|
||||
|
||||
/* set up the Etrax DMA descriptors */
|
||||
if (e100_ide_build_dmatable(drive)) {
|
||||
ide_map_sg(drive, rq);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void e100_dma_exec_cmd(ide_drive_t *drive, u8 command)
|
||||
{
|
||||
/* set the irq handler which will finish the request when DMA is done */
|
||||
ide_set_handler(drive, &etrax_dma_intr, WAIT_CMD, NULL);
|
||||
|
||||
/* issue cmd to drive */
|
||||
etrax100_ide_outb(command, IDE_COMMAND_REG);
|
||||
}
|
||||
|
||||
void __init
|
||||
init_e100_ide (void)
|
||||
{
|
||||
volatile unsigned int dummy;
|
||||
int h;
|
||||
|
||||
printk("ide: ETRAX 100LX built-in ATA DMA controller\n");
|
||||
|
||||
/* first fill in some stuff in the ide_hwifs fields */
|
||||
|
||||
for(h = 0; h < MAX_HWIFS; h++) {
|
||||
ide_hwif_t *hwif = &ide_hwifs[h];
|
||||
hwif->mmio = 2;
|
||||
hwif->chipset = ide_etrax100;
|
||||
hwif->tuneproc = &tune_e100_ide;
|
||||
hwif->ata_input_data = &e100_ide_input_data;
|
||||
hwif->ata_output_data = &e100_ide_output_data;
|
||||
hwif->atapi_input_bytes = &e100_atapi_input_bytes;
|
||||
hwif->atapi_output_bytes = &e100_atapi_output_bytes;
|
||||
hwif->ide_dma_check = &e100_dma_check;
|
||||
hwif->ide_dma_end = &e100_dma_end;
|
||||
hwif->dma_setup = &e100_dma_setup;
|
||||
hwif->dma_exec_cmd = &e100_dma_exec_cmd;
|
||||
hwif->dma_start = &e100_dma_start;
|
||||
hwif->OUTB = &etrax100_ide_outb;
|
||||
hwif->OUTW = &etrax100_ide_outw;
|
||||
hwif->OUTBSYNC = &etrax100_ide_outbsync;
|
||||
hwif->INB = &etrax100_ide_inb;
|
||||
hwif->INW = &etrax100_ide_inw;
|
||||
hwif->ide_dma_off_quietly = &e100_dma_off;
|
||||
}
|
||||
|
||||
/* actually reset and configure the etrax100 ide/ata interface */
|
||||
|
||||
*R_ATA_CTRL_DATA = 0;
|
||||
*R_ATA_TRANSFER_CNT = 0;
|
||||
*R_ATA_CONFIG = 0;
|
||||
|
||||
genconfig_shadow = (genconfig_shadow &
|
||||
~IO_MASK(R_GEN_CONFIG, dma2) &
|
||||
~IO_MASK(R_GEN_CONFIG, dma3) &
|
||||
~IO_MASK(R_GEN_CONFIG, ata)) |
|
||||
( IO_STATE( R_GEN_CONFIG, dma3, ata ) |
|
||||
IO_STATE( R_GEN_CONFIG, dma2, ata ) |
|
||||
IO_STATE( R_GEN_CONFIG, ata, select ) );
|
||||
|
||||
*R_GEN_CONFIG = genconfig_shadow;
|
||||
|
||||
/* pull the chosen /reset-line low */
|
||||
|
||||
#ifdef CONFIG_ETRAX_IDE_G27_RESET
|
||||
REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, 27, 0);
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_IDE_CSE1_16_RESET
|
||||
REG_SHADOW_SET(port_cse1_addr, port_cse1_shadow, 16, 0);
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_IDE_CSP0_8_RESET
|
||||
REG_SHADOW_SET(port_csp0_addr, port_csp0_shadow, 8, 0);
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_IDE_PB7_RESET
|
||||
port_pb_dir_shadow = port_pb_dir_shadow |
|
||||
IO_STATE(R_PORT_PB_DIR, dir7, output);
|
||||
*R_PORT_PB_DIR = port_pb_dir_shadow;
|
||||
REG_SHADOW_SET(R_PORT_PB_DATA, port_pb_data_shadow, 7, 1);
|
||||
#endif
|
||||
|
||||
/* wait some */
|
||||
|
||||
udelay(25);
|
||||
|
||||
/* de-assert bus-reset */
|
||||
|
||||
#ifdef CONFIG_ETRAX_IDE_CSE1_16_RESET
|
||||
REG_SHADOW_SET(port_cse1_addr, port_cse1_shadow, 16, 1);
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_IDE_CSP0_8_RESET
|
||||
REG_SHADOW_SET(port_csp0_addr, port_csp0_shadow, 8, 1);
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_IDE_G27_RESET
|
||||
REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, 27, 1);
|
||||
#endif
|
||||
|
||||
/* make a dummy read to set the ata controller in a proper state */
|
||||
dummy = *R_ATA_STATUS_DATA;
|
||||
|
||||
*R_ATA_CONFIG = ( IO_FIELD( R_ATA_CONFIG, enable, 1 ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_strobe, ATA_DMA2_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, dma_hold, ATA_DMA2_HOLD ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_setup, ATA_PIO4_SETUP ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_strobe, ATA_PIO4_STROBE ) |
|
||||
IO_FIELD( R_ATA_CONFIG, pio_hold, ATA_PIO4_HOLD ) );
|
||||
|
||||
*R_ATA_CTRL_DATA = ( IO_STATE( R_ATA_CTRL_DATA, rw, read) |
|
||||
IO_FIELD( R_ATA_CTRL_DATA, addr, 1 ) );
|
||||
|
||||
while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)); /* wait for busy flag*/
|
||||
|
||||
*R_IRQ_MASK0_SET = ( IO_STATE( R_IRQ_MASK0_SET, ata_irq0, set ) |
|
||||
IO_STATE( R_IRQ_MASK0_SET, ata_irq1, set ) |
|
||||
IO_STATE( R_IRQ_MASK0_SET, ata_irq2, set ) |
|
||||
IO_STATE( R_IRQ_MASK0_SET, ata_irq3, set ) );
|
||||
|
||||
printk("ide: waiting %d seconds for drives to regain consciousness\n",
|
||||
CONFIG_ETRAX_IDE_DELAY);
|
||||
|
||||
h = jiffies + (CONFIG_ETRAX_IDE_DELAY * HZ);
|
||||
while(time_before(jiffies, h)) /* nothing */ ;
|
||||
|
||||
/* reset the dma channels we will use */
|
||||
|
||||
RESET_DMA(ATA_TX_DMA_NBR);
|
||||
RESET_DMA(ATA_RX_DMA_NBR);
|
||||
WAIT_DMA(ATA_TX_DMA_NBR);
|
||||
WAIT_DMA(ATA_RX_DMA_NBR);
|
||||
|
||||
}
|
||||
|
||||
static int e100_dma_off (ide_drive_t *drive)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static etrax_dma_descr mydescr;
|
||||
|
||||
/*
|
||||
* The following routines are mainly used by the ATAPI drivers.
|
||||
*
|
||||
* These routines will round up any request for an odd number of bytes,
|
||||
* so if an odd bytecount is specified, be sure that there's at least one
|
||||
* extra byte allocated for the buffer.
|
||||
*/
|
||||
static void
|
||||
e100_atapi_input_bytes (ide_drive_t *drive, void *buffer, unsigned int bytecount)
|
||||
{
|
||||
unsigned long data_reg = IDE_DATA_REG;
|
||||
|
||||
D(printk("atapi_input_bytes, dreg 0x%x, buffer 0x%x, count %d\n",
|
||||
data_reg, buffer, bytecount));
|
||||
|
||||
if(bytecount & 1) {
|
||||
printk("warning, odd bytecount in cdrom_in_bytes = %d.\n", bytecount);
|
||||
bytecount++; /* to round off */
|
||||
}
|
||||
|
||||
/* make sure the DMA channel is available */
|
||||
RESET_DMA(ATA_RX_DMA_NBR);
|
||||
WAIT_DMA(ATA_RX_DMA_NBR);
|
||||
|
||||
/* setup DMA descriptor */
|
||||
|
||||
mydescr.sw_len = bytecount;
|
||||
mydescr.ctrl = d_eol;
|
||||
mydescr.buf = virt_to_phys(buffer);
|
||||
|
||||
/* start the dma channel */
|
||||
|
||||
*R_DMA_CH3_FIRST = virt_to_phys(&mydescr);
|
||||
*R_DMA_CH3_CMD = IO_STATE(R_DMA_CH3_CMD, cmd, start);
|
||||
|
||||
/* initiate a multi word dma read using PIO handshaking */
|
||||
|
||||
*R_ATA_TRANSFER_CNT = IO_FIELD(R_ATA_TRANSFER_CNT, count, bytecount >> 1);
|
||||
|
||||
*R_ATA_CTRL_DATA = data_reg |
|
||||
IO_STATE(R_ATA_CTRL_DATA, rw, read) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, src_dst, dma) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, handsh, pio) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, multi, on) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
|
||||
|
||||
/* wait for completion */
|
||||
|
||||
LED_DISK_READ(1);
|
||||
WAIT_DMA(ATA_RX_DMA_NBR);
|
||||
LED_DISK_READ(0);
|
||||
|
||||
#if 0
|
||||
/* old polled transfer code
|
||||
* this should be moved into a new function that can do polled
|
||||
* transfers if DMA is not available
|
||||
*/
|
||||
|
||||
/* initiate a multi word read */
|
||||
|
||||
*R_ATA_TRANSFER_CNT = wcount << 1;
|
||||
|
||||
*R_ATA_CTRL_DATA = data_reg |
|
||||
IO_STATE(R_ATA_CTRL_DATA, rw, read) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, src_dst, register) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, handsh, pio) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, multi, on) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
|
||||
|
||||
/* svinto has a latency until the busy bit actually is set */
|
||||
|
||||
nop(); nop();
|
||||
nop(); nop();
|
||||
nop(); nop();
|
||||
nop(); nop();
|
||||
nop(); nop();
|
||||
|
||||
/* unit should be busy during multi transfer */
|
||||
while((status = *R_ATA_STATUS_DATA) & IO_MASK(R_ATA_STATUS_DATA, busy)) {
|
||||
while(!(status & IO_MASK(R_ATA_STATUS_DATA, dav)))
|
||||
status = *R_ATA_STATUS_DATA;
|
||||
*ptr++ = (unsigned short)(status & 0xffff);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
e100_atapi_output_bytes (ide_drive_t *drive, void *buffer, unsigned int bytecount)
|
||||
{
|
||||
unsigned long data_reg = IDE_DATA_REG;
|
||||
|
||||
D(printk("atapi_output_bytes, dreg 0x%x, buffer 0x%x, count %d\n",
|
||||
data_reg, buffer, bytecount));
|
||||
|
||||
if(bytecount & 1) {
|
||||
printk("odd bytecount %d in atapi_out_bytes!\n", bytecount);
|
||||
bytecount++;
|
||||
}
|
||||
|
||||
/* make sure the DMA channel is available */
|
||||
RESET_DMA(ATA_TX_DMA_NBR);
|
||||
WAIT_DMA(ATA_TX_DMA_NBR);
|
||||
|
||||
/* setup DMA descriptor */
|
||||
|
||||
mydescr.sw_len = bytecount;
|
||||
mydescr.ctrl = d_eol;
|
||||
mydescr.buf = virt_to_phys(buffer);
|
||||
|
||||
/* start the dma channel */
|
||||
|
||||
*R_DMA_CH2_FIRST = virt_to_phys(&mydescr);
|
||||
*R_DMA_CH2_CMD = IO_STATE(R_DMA_CH2_CMD, cmd, start);
|
||||
|
||||
/* initiate a multi word dma write using PIO handshaking */
|
||||
|
||||
*R_ATA_TRANSFER_CNT = IO_FIELD(R_ATA_TRANSFER_CNT, count, bytecount >> 1);
|
||||
|
||||
*R_ATA_CTRL_DATA = data_reg |
|
||||
IO_STATE(R_ATA_CTRL_DATA, rw, write) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, src_dst, dma) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, handsh, pio) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, multi, on) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
|
||||
|
||||
/* wait for completion */
|
||||
|
||||
LED_DISK_WRITE(1);
|
||||
WAIT_DMA(ATA_TX_DMA_NBR);
|
||||
LED_DISK_WRITE(0);
|
||||
|
||||
#if 0
|
||||
/* old polled write code - see comment in input_bytes */
|
||||
|
||||
/* wait for busy flag */
|
||||
while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy));
|
||||
|
||||
/* initiate a multi word write */
|
||||
|
||||
*R_ATA_TRANSFER_CNT = bytecount >> 1;
|
||||
|
||||
ctrl = data_reg |
|
||||
IO_STATE(R_ATA_CTRL_DATA, rw, write) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, src_dst, register) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, handsh, pio) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, multi, on) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
|
||||
|
||||
LED_DISK_WRITE(1);
|
||||
|
||||
/* Etrax will set busy = 1 until the multi pio transfer has finished
|
||||
* and tr_rdy = 1 after each successful word transfer.
|
||||
* When the last byte has been transferred Etrax will first set tr_tdy = 1
|
||||
* and then busy = 0 (not in the same cycle). If we read busy before it
|
||||
* has been set to 0 we will think that we should transfer more bytes
|
||||
* and then tr_rdy would be 0 forever. This is solved by checking busy
|
||||
* in the inner loop.
|
||||
*/
|
||||
|
||||
do {
|
||||
*R_ATA_CTRL_DATA = ctrl | *ptr++;
|
||||
while(!(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, tr_rdy)) &&
|
||||
(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)));
|
||||
} while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy));
|
||||
|
||||
LED_DISK_WRITE(0);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* This is used for most PIO data transfers *from* the IDE interface
|
||||
*/
|
||||
static void
|
||||
e100_ide_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
|
||||
{
|
||||
e100_atapi_input_bytes(drive, buffer, wcount << 2);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is used for most PIO data transfers *to* the IDE interface
|
||||
*/
|
||||
static void
|
||||
e100_ide_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
|
||||
{
|
||||
e100_atapi_output_bytes(drive, buffer, wcount << 2);
|
||||
}
|
||||
|
||||
/* we only have one DMA channel on the chip for ATA, so we can keep these statically */
|
||||
static etrax_dma_descr ata_descrs[MAX_DMA_DESCRS];
|
||||
static unsigned int ata_tot_size;
|
||||
|
||||
/*
|
||||
* e100_ide_build_dmatable() prepares a dma request.
|
||||
* Returns 0 if all went okay, returns 1 otherwise.
|
||||
*/
|
||||
static int e100_ide_build_dmatable (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct scatterlist* sg;
|
||||
struct request *rq = HWGROUP(drive)->rq;
|
||||
unsigned long size, addr;
|
||||
unsigned int count = 0;
|
||||
int i = 0;
|
||||
|
||||
sg = hwif->sg_table;
|
||||
|
||||
ata_tot_size = 0;
|
||||
|
||||
ide_map_sg(drive, rq);
|
||||
|
||||
i = hwif->sg_nents;
|
||||
|
||||
while(i) {
|
||||
/*
|
||||
* Determine addr and size of next buffer area. We assume that
|
||||
* individual virtual buffers are always composed linearly in
|
||||
* physical memory. For example, we assume that any 8kB buffer
|
||||
* is always composed of two adjacent physical 4kB pages rather
|
||||
* than two possibly non-adjacent physical 4kB pages.
|
||||
*/
|
||||
/* group sequential buffers into one large buffer */
|
||||
addr = page_to_phys(sg->page) + sg->offset;
|
||||
size = sg_dma_len(sg);
|
||||
while (sg++, --i) {
|
||||
if ((addr + size) != page_to_phys(sg->page) + sg->offset)
|
||||
break;
|
||||
size += sg_dma_len(sg);
|
||||
}
|
||||
|
||||
/* did we run out of descriptors? */
|
||||
|
||||
if(count >= MAX_DMA_DESCRS) {
|
||||
printk("%s: too few DMA descriptors\n", drive->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* however, this case is more difficult - R_ATA_TRANSFER_CNT cannot be more
|
||||
than 65536 words per transfer, so in that case we need to either
|
||||
1) use a DMA interrupt to re-trigger R_ATA_TRANSFER_CNT and continue with
|
||||
the descriptors, or
|
||||
2) simply do the request here, and get dma_intr to only ide_end_request on
|
||||
those blocks that were actually set-up for transfer.
|
||||
*/
|
||||
|
||||
if(ata_tot_size + size > 131072) {
|
||||
printk("too large total ATA DMA request, %d + %d!\n", ata_tot_size, (int)size);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* If size > 65536 it has to be splitted into new descriptors. Since we don't handle
|
||||
size > 131072 only one split is necessary */
|
||||
|
||||
if(size > 65536) {
|
||||
/* ok we want to do IO at addr, size bytes. set up a new descriptor entry */
|
||||
ata_descrs[count].sw_len = 0; /* 0 means 65536, this is a 16-bit field */
|
||||
ata_descrs[count].ctrl = 0;
|
||||
ata_descrs[count].buf = addr;
|
||||
ata_descrs[count].next = virt_to_phys(&ata_descrs[count + 1]);
|
||||
count++;
|
||||
ata_tot_size += 65536;
|
||||
/* size and addr should refere to not handled data */
|
||||
size -= 65536;
|
||||
addr += 65536;
|
||||
}
|
||||
/* ok we want to do IO at addr, size bytes. set up a new descriptor entry */
|
||||
if(size == 65536) {
|
||||
ata_descrs[count].sw_len = 0; /* 0 means 65536, this is a 16-bit field */
|
||||
} else {
|
||||
ata_descrs[count].sw_len = size;
|
||||
}
|
||||
ata_descrs[count].ctrl = 0;
|
||||
ata_descrs[count].buf = addr;
|
||||
ata_descrs[count].next = virt_to_phys(&ata_descrs[count + 1]);
|
||||
count++;
|
||||
ata_tot_size += size;
|
||||
}
|
||||
|
||||
if (count) {
|
||||
/* set the end-of-list flag on the last descriptor */
|
||||
ata_descrs[count - 1].ctrl |= d_eol;
|
||||
/* return and say all is ok */
|
||||
return 0;
|
||||
}
|
||||
|
||||
printk("%s: empty DMA table?\n", drive->name);
|
||||
return 1; /* let the PIO routines handle this weirdness */
|
||||
}
|
||||
|
||||
static int config_drive_for_dma (ide_drive_t *drive)
|
||||
{
|
||||
const char **list;
|
||||
struct hd_driveid *id = drive->id;
|
||||
|
||||
if (id && (id->capability & 1)) {
|
||||
/* Enable DMA on any drive that supports mword2 DMA */
|
||||
if ((id->field_valid & 2) && (id->dma_mword & 0x404) == 0x404) {
|
||||
drive->using_dma = 1;
|
||||
return 0; /* DMA enabled */
|
||||
}
|
||||
|
||||
/* Consult the list of known "good" drives */
|
||||
list = good_dma_drives;
|
||||
while (*list) {
|
||||
if (!strcmp(*list++,id->model)) {
|
||||
drive->using_dma = 1;
|
||||
return 0; /* DMA enabled */
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1; /* DMA not enabled */
|
||||
}
|
||||
|
||||
/*
|
||||
* etrax_dma_intr() is the handler for disk read/write DMA interrupts
|
||||
*/
|
||||
static ide_startstop_t etrax_dma_intr (ide_drive_t *drive)
|
||||
{
|
||||
int i, dma_stat;
|
||||
byte stat;
|
||||
|
||||
LED_DISK_READ(0);
|
||||
LED_DISK_WRITE(0);
|
||||
|
||||
dma_stat = HWIF(drive)->ide_dma_end(drive);
|
||||
stat = HWIF(drive)->INB(IDE_STATUS_REG); /* get drive status */
|
||||
if (OK_STAT(stat,DRIVE_READY,drive->bad_wstat|DRQ_STAT)) {
|
||||
if (!dma_stat) {
|
||||
struct request *rq;
|
||||
rq = HWGROUP(drive)->rq;
|
||||
for (i = rq->nr_sectors; i > 0;) {
|
||||
i -= rq->current_nr_sectors;
|
||||
DRIVER(drive)->end_request(drive, 1, rq->nr_sectors);
|
||||
}
|
||||
return ide_stopped;
|
||||
}
|
||||
printk("%s: bad DMA status\n", drive->name);
|
||||
}
|
||||
return DRIVER(drive)->error(drive, "dma_intr", stat);
|
||||
}
|
||||
|
||||
/*
|
||||
* Functions below initiates/aborts DMA read/write operations on a drive.
|
||||
*
|
||||
* The caller is assumed to have selected the drive and programmed the drive's
|
||||
* sector address using CHS or LBA. All that remains is to prepare for DMA
|
||||
* and then issue the actual read/write DMA/PIO command to the drive.
|
||||
*
|
||||
* Returns 0 if all went well.
|
||||
* Returns 1 if DMA read/write could not be started, in which case
|
||||
* the caller should revert to PIO for the current request.
|
||||
*/
|
||||
|
||||
static int e100_dma_check(ide_drive_t *drive)
|
||||
{
|
||||
return config_drive_for_dma (drive);
|
||||
}
|
||||
|
||||
static int e100_dma_end(ide_drive_t *drive)
|
||||
{
|
||||
/* TODO: check if something went wrong with the DMA */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void e100_dma_start(ide_drive_t *drive)
|
||||
{
|
||||
if (e100_read_command) {
|
||||
/* begin DMA */
|
||||
|
||||
/* need to do this before RX DMA due to a chip bug
|
||||
* it is enough to just flush the part of the cache that
|
||||
* corresponds to the buffers we start, but since HD transfers
|
||||
* usually are more than 8 kB, it is easier to optimize for the
|
||||
* normal case and just flush the entire cache. its the only
|
||||
* way to be sure! (OB movie quote)
|
||||
*/
|
||||
flush_etrax_cache();
|
||||
*R_DMA_CH3_FIRST = virt_to_phys(ata_descrs);
|
||||
*R_DMA_CH3_CMD = IO_STATE(R_DMA_CH3_CMD, cmd, start);
|
||||
|
||||
/* initiate a multi word dma read using DMA handshaking */
|
||||
|
||||
*R_ATA_TRANSFER_CNT =
|
||||
IO_FIELD(R_ATA_TRANSFER_CNT, count, ata_tot_size >> 1);
|
||||
|
||||
*R_ATA_CTRL_DATA =
|
||||
IO_FIELD(R_ATA_CTRL_DATA, data, IDE_DATA_REG) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, rw, read) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, src_dst, dma) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, handsh, dma) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, multi, on) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
|
||||
|
||||
LED_DISK_READ(1);
|
||||
|
||||
D(printk("dma read of %d bytes.\n", ata_tot_size));
|
||||
|
||||
} else {
|
||||
/* writing */
|
||||
/* begin DMA */
|
||||
|
||||
*R_DMA_CH2_FIRST = virt_to_phys(ata_descrs);
|
||||
*R_DMA_CH2_CMD = IO_STATE(R_DMA_CH2_CMD, cmd, start);
|
||||
|
||||
/* initiate a multi word dma write using DMA handshaking */
|
||||
|
||||
*R_ATA_TRANSFER_CNT =
|
||||
IO_FIELD(R_ATA_TRANSFER_CNT, count, ata_tot_size >> 1);
|
||||
|
||||
*R_ATA_CTRL_DATA =
|
||||
IO_FIELD(R_ATA_CTRL_DATA, data, IDE_DATA_REG) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, rw, write) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, src_dst, dma) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, handsh, dma) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, multi, on) |
|
||||
IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
|
||||
|
||||
LED_DISK_WRITE(1);
|
||||
|
||||
D(printk("dma write of %d bytes.\n", ata_tot_size));
|
||||
}
|
||||
}
|
||||
119
extra/linux-2.6.10/drivers/ide/h8300/ide-h8300.c
Normal file
119
extra/linux-2.6.10/drivers/ide/h8300/ide-h8300.c
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* drivers/ide/ide-h8300.c
|
||||
* H8/300 generic IDE interface
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/config.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
#define bswap(d) \
|
||||
({ \
|
||||
u16 r; \
|
||||
__asm__("mov.b %w1,r1h\n\t" \
|
||||
"mov.b %x1,r1l\n\t" \
|
||||
"mov.w r1,%0" \
|
||||
:"=r"(r) \
|
||||
:"r"(d) \
|
||||
:"er1"); \
|
||||
(r); \
|
||||
})
|
||||
|
||||
static void mm_outw(u16 d, unsigned long a)
|
||||
{
|
||||
__asm__("mov.b %w0,r2h\n\t"
|
||||
"mov.b %x0,r2l\n\t"
|
||||
"mov.w r2,@%1"
|
||||
:
|
||||
:"r"(d),"r"(a)
|
||||
:"er2");
|
||||
}
|
||||
|
||||
static u16 mm_inw(unsigned long a)
|
||||
{
|
||||
register u16 r __asm__("er0");
|
||||
__asm__("mov.w @%1,r2\n\t"
|
||||
"mov.b r2l,%x0\n\t"
|
||||
"mov.b r2h,%w0"
|
||||
:"=r"(r)
|
||||
:"r"(a)
|
||||
:"er2");
|
||||
return r;
|
||||
}
|
||||
|
||||
static void mm_outsw(unsigned long addr, void *buf, u32 len)
|
||||
{
|
||||
unsigned short *bp = (unsigned short *)buf;
|
||||
for (; len > 0; len--, bp++)
|
||||
*(volatile u16 *)addr = bswap(*bp);
|
||||
}
|
||||
|
||||
static void mm_insw(unsigned long addr, void *buf, u32 len)
|
||||
{
|
||||
unsigned short *bp = (unsigned short *)buf;
|
||||
for (; len > 0; len--, bp++)
|
||||
*bp = bswap(*(volatile u16 *)addr);
|
||||
}
|
||||
|
||||
#define H8300_IDE_GAP (2)
|
||||
|
||||
static inline void hw_setup(hw_regs_t *hw)
|
||||
{
|
||||
int i;
|
||||
|
||||
memset(hw, 0, sizeof(hw_regs_t));
|
||||
for (i = 0; i <= IDE_STATUS_OFFSET; i++)
|
||||
hw->io_ports[i] = CONFIG_H8300_IDE_BASE + H8300_IDE_GAP*i;
|
||||
hw->io_ports[IDE_CONTROL_OFFSET] = CONFIG_H8300_IDE_ALT;
|
||||
hw->irq = EXT_IRQ0 + CONFIG_H8300_IDE_IRQ;
|
||||
hw->dma = NO_DMA;
|
||||
hw->chipset = ide_generic;
|
||||
}
|
||||
|
||||
static inline void hwif_setup(ide_hwif_t *hwif)
|
||||
{
|
||||
default_hwif_iops(hwif);
|
||||
|
||||
hwif->mmio = 2;
|
||||
hwif->OUTW = mm_outw;
|
||||
hwif->OUTSW = mm_outsw;
|
||||
hwif->INW = mm_inw;
|
||||
hwif->INSW = mm_insw;
|
||||
hwif->OUTL = NULL;
|
||||
hwif->INL = NULL;
|
||||
hwif->OUTSL = NULL;
|
||||
hwif->INSL = NULL;
|
||||
}
|
||||
|
||||
void __init h8300_ide_init(void)
|
||||
{
|
||||
hw_regs_t hw;
|
||||
ide_hwif_t *hwif;
|
||||
int idx;
|
||||
|
||||
if (!request_region(CONFIG_H8300_IDE_BASE, H8300_IDE_GAP*8, "ide-h8300"))
|
||||
goto out_busy;
|
||||
if (!request_region(CONFIG_H8300_IDE_ALT, H8300_IDE_GAP, "ide-h8300")) {
|
||||
release_region(CONFIG_H8300_IDE_BASE, H8300_IDE_GAP*8);
|
||||
goto out_busy;
|
||||
}
|
||||
|
||||
hw_setup(&hw);
|
||||
|
||||
/* register if */
|
||||
idx = ide_register_hw(&hw, &hwif);
|
||||
if (idx == -1) {
|
||||
printk(KERN_ERR "ide-h8300: IDE I/F register failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
hwif_setup(hwif);
|
||||
printk(KERN_INFO "ide%d: H8/300 generic IDE interface\n", idx);
|
||||
return;
|
||||
|
||||
out_busy:
|
||||
printk(KERN_ERR "ide-h8300: IDE I/F resource already used.\n");
|
||||
}
|
||||
3532
extra/linux-2.6.10/drivers/ide/ide-cd.c
Normal file
3532
extra/linux-2.6.10/drivers/ide/ide-cd.c
Normal file
File diff suppressed because it is too large
Load Diff
742
extra/linux-2.6.10/drivers/ide/ide-cd.h
Normal file
742
extra/linux-2.6.10/drivers/ide/ide-cd.h
Normal file
@@ -0,0 +1,742 @@
|
||||
/*
|
||||
* linux/drivers/ide/ide_cd.h
|
||||
*
|
||||
* Copyright (C) 1996-98 Erik Andersen
|
||||
* Copyright (C) 1998-2000 Jens Axboe
|
||||
*/
|
||||
#ifndef _IDE_CD_H
|
||||
#define _IDE_CD_H
|
||||
|
||||
#include <linux/cdrom.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
/* Turn this on to have the driver print out the meanings of the
|
||||
ATAPI error codes. This will use up additional kernel-space
|
||||
memory, though. */
|
||||
|
||||
#ifndef VERBOSE_IDE_CD_ERRORS
|
||||
#define VERBOSE_IDE_CD_ERRORS 1
|
||||
#endif
|
||||
|
||||
|
||||
/* Turning this on will remove code to work around various nonstandard
|
||||
ATAPI implementations. If you know your drive follows the standard,
|
||||
this will give you a slightly smaller kernel. */
|
||||
|
||||
#ifndef STANDARD_ATAPI
|
||||
#define STANDARD_ATAPI 0
|
||||
#endif
|
||||
|
||||
|
||||
/* Turning this on will disable the door-locking functionality.
|
||||
This is apparently needed for supermount. */
|
||||
|
||||
#ifndef NO_DOOR_LOCKING
|
||||
#define NO_DOOR_LOCKING 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* typical timeout for packet command
|
||||
*/
|
||||
#define ATAPI_WAIT_PC (60 * HZ)
|
||||
#define ATAPI_WAIT_WRITE_BUSY (10 * HZ)
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
#define SECTOR_BITS 9
|
||||
#ifndef SECTOR_SIZE
|
||||
#define SECTOR_SIZE (1 << SECTOR_BITS)
|
||||
#endif
|
||||
#define SECTORS_PER_FRAME (CD_FRAMESIZE >> SECTOR_BITS)
|
||||
#define SECTOR_BUFFER_SIZE (CD_FRAMESIZE * 32)
|
||||
#define SECTORS_BUFFER (SECTOR_BUFFER_SIZE >> SECTOR_BITS)
|
||||
#define SECTORS_MAX (131072 >> SECTOR_BITS)
|
||||
|
||||
#define BLOCKS_PER_FRAME (CD_FRAMESIZE / BLOCK_SIZE)
|
||||
|
||||
/* special command codes for strategy routine. */
|
||||
#define PACKET_COMMAND 4315
|
||||
#define REQUEST_SENSE_COMMAND 4316
|
||||
#define RESET_DRIVE_COMMAND 4317
|
||||
|
||||
|
||||
/* Configuration flags. These describe the capabilities of the drive.
|
||||
They generally do not change after initialization, unless we learn
|
||||
more about the drive from stuff failing. */
|
||||
struct ide_cd_config_flags {
|
||||
__u8 drq_interrupt : 1; /* Device sends an interrupt when ready
|
||||
for a packet command. */
|
||||
__u8 no_doorlock : 1; /* Drive cannot lock the door. */
|
||||
__u8 no_eject : 1; /* Drive cannot eject the disc. */
|
||||
__u8 nec260 : 1; /* Drive is a pre-1.2 NEC 260 drive. */
|
||||
__u8 playmsf_as_bcd : 1; /* PLAYMSF command takes BCD args. */
|
||||
__u8 tocaddr_as_bcd : 1; /* TOC addresses are in BCD. */
|
||||
__u8 toctracks_as_bcd : 1; /* TOC track numbers are in BCD. */
|
||||
__u8 subchan_as_bcd : 1; /* Subchannel info is in BCD. */
|
||||
__u8 is_changer : 1; /* Drive is a changer. */
|
||||
__u8 cd_r : 1; /* Drive can write to CD-R media . */
|
||||
__u8 cd_rw : 1; /* Drive can write to CD-R/W media . */
|
||||
__u8 dvd : 1; /* Drive is a DVD-ROM */
|
||||
__u8 dvd_r : 1; /* Drive can write DVD-R */
|
||||
__u8 dvd_ram : 1; /* Drive can write DVD-RAM */
|
||||
__u8 ram : 1; /* generic WRITE (dvd-ram/mrw) */
|
||||
__u8 test_write : 1; /* Drive can fake writes */
|
||||
__u8 supp_disc_present : 1; /* Changer can report exact contents
|
||||
of slots. */
|
||||
__u8 limit_nframes : 1; /* Drive does not provide data in
|
||||
multiples of SECTOR_SIZE when more
|
||||
than one interrupt is needed. */
|
||||
__u8 seeking : 1; /* Seeking in progress */
|
||||
__u8 audio_play : 1; /* can do audio related commands */
|
||||
__u8 close_tray : 1; /* can close the tray */
|
||||
__u8 writing : 1; /* pseudo write in progress */
|
||||
__u8 mo_drive : 1; /* drive is an MO device */
|
||||
__u8 reserved : 2;
|
||||
byte max_speed; /* Max speed of the drive */
|
||||
};
|
||||
#define CDROM_CONFIG_FLAGS(drive) (&(((struct cdrom_info *)(drive->driver_data))->config_flags))
|
||||
|
||||
|
||||
/* State flags. These give information about the current state of the
|
||||
drive, and will change during normal operation. */
|
||||
struct ide_cd_state_flags {
|
||||
__u8 media_changed : 1; /* Driver has noticed a media change. */
|
||||
__u8 toc_valid : 1; /* Saved TOC information is current. */
|
||||
__u8 door_locked : 1; /* We think that the drive door is locked. */
|
||||
__u8 writing : 1; /* the drive is currently writing */
|
||||
__u8 reserved : 4;
|
||||
byte current_speed; /* Current speed of the drive */
|
||||
};
|
||||
|
||||
#define CDROM_STATE_FLAGS(drive) (&(((struct cdrom_info *)(drive->driver_data))->state_flags))
|
||||
|
||||
/* Structure of a MSF cdrom address. */
|
||||
struct atapi_msf {
|
||||
byte reserved;
|
||||
byte minute;
|
||||
byte second;
|
||||
byte frame;
|
||||
};
|
||||
|
||||
/* Space to hold the disk TOC. */
|
||||
#define MAX_TRACKS 99
|
||||
struct atapi_toc_header {
|
||||
unsigned short toc_length;
|
||||
byte first_track;
|
||||
byte last_track;
|
||||
};
|
||||
|
||||
struct atapi_toc_entry {
|
||||
byte reserved1;
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 adr : 4;
|
||||
__u8 control : 4;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 control : 4;
|
||||
__u8 adr : 4;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
byte track;
|
||||
byte reserved2;
|
||||
union {
|
||||
unsigned lba;
|
||||
struct atapi_msf msf;
|
||||
} addr;
|
||||
};
|
||||
|
||||
struct atapi_toc {
|
||||
int last_session_lba;
|
||||
int xa_flag;
|
||||
unsigned long capacity;
|
||||
struct atapi_toc_header hdr;
|
||||
struct atapi_toc_entry ent[MAX_TRACKS+1];
|
||||
/* One extra for the leadout. */
|
||||
};
|
||||
|
||||
|
||||
/* This structure is annoyingly close to, but not identical with,
|
||||
the cdrom_subchnl structure from cdrom.h. */
|
||||
struct atapi_cdrom_subchnl {
|
||||
u_char acdsc_reserved;
|
||||
u_char acdsc_audiostatus;
|
||||
u_short acdsc_length;
|
||||
u_char acdsc_format;
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
u_char acdsc_ctrl: 4;
|
||||
u_char acdsc_adr: 4;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
u_char acdsc_adr: 4;
|
||||
u_char acdsc_ctrl: 4;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
u_char acdsc_trk;
|
||||
u_char acdsc_ind;
|
||||
union {
|
||||
struct atapi_msf msf;
|
||||
int lba;
|
||||
} acdsc_absaddr;
|
||||
union {
|
||||
struct atapi_msf msf;
|
||||
int lba;
|
||||
} acdsc_reladdr;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* This should probably go into cdrom.h along with the other
|
||||
* generic stuff now in the Mt. Fuji spec.
|
||||
*/
|
||||
struct atapi_capabilities_page {
|
||||
struct mode_page_header header;
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 parameters_saveable : 1;
|
||||
__u8 reserved1 : 1;
|
||||
__u8 page_code : 6;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 page_code : 6;
|
||||
__u8 reserved1 : 1;
|
||||
__u8 parameters_saveable : 1;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
byte page_length;
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 reserved2 : 2;
|
||||
/* Drive supports reading of DVD-RAM discs */
|
||||
__u8 dvd_ram_read : 1;
|
||||
/* Drive supports reading of DVD-R discs */
|
||||
__u8 dvd_r_read : 1;
|
||||
/* Drive supports reading of DVD-ROM discs */
|
||||
__u8 dvd_rom : 1;
|
||||
/* Drive supports reading CD-R discs with addressing method 2 */
|
||||
__u8 method2 : 1; /* reserved in 1.2 */
|
||||
/* Drive can read from CD-R/W (CD-E) discs (orange book, part III) */
|
||||
__u8 cd_rw_read : 1; /* reserved in 1.2 */
|
||||
/* Drive supports read from CD-R discs (orange book, part II) */
|
||||
__u8 cd_r_read : 1; /* reserved in 1.2 */
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
/* Drive supports read from CD-R discs (orange book, part II) */
|
||||
__u8 cd_r_read : 1; /* reserved in 1.2 */
|
||||
/* Drive can read from CD-R/W (CD-E) discs (orange book, part III) */
|
||||
__u8 cd_rw_read : 1; /* reserved in 1.2 */
|
||||
/* Drive supports reading CD-R discs with addressing method 2 */
|
||||
__u8 method2 : 1;
|
||||
/* Drive supports reading of DVD-ROM discs */
|
||||
__u8 dvd_rom : 1;
|
||||
/* Drive supports reading of DVD-R discs */
|
||||
__u8 dvd_r_read : 1;
|
||||
/* Drive supports reading of DVD-RAM discs */
|
||||
__u8 dvd_ram_read : 1;
|
||||
__u8 reserved2 : 2;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 reserved3 : 2;
|
||||
/* Drive can write DVD-RAM discs */
|
||||
__u8 dvd_ram_write : 1;
|
||||
/* Drive can write DVD-R discs */
|
||||
__u8 dvd_r_write : 1;
|
||||
__u8 reserved3a : 1;
|
||||
/* Drive can fake writes */
|
||||
__u8 test_write : 1;
|
||||
/* Drive can write to CD-R/W (CD-E) discs (orange book, part III) */
|
||||
__u8 cd_rw_write : 1; /* reserved in 1.2 */
|
||||
/* Drive supports write to CD-R discs (orange book, part II) */
|
||||
__u8 cd_r_write : 1; /* reserved in 1.2 */
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
/* Drive can write to CD-R discs (orange book, part II) */
|
||||
__u8 cd_r_write : 1; /* reserved in 1.2 */
|
||||
/* Drive can write to CD-R/W (CD-E) discs (orange book, part III) */
|
||||
__u8 cd_rw_write : 1; /* reserved in 1.2 */
|
||||
/* Drive can fake writes */
|
||||
__u8 test_write : 1;
|
||||
__u8 reserved3a : 1;
|
||||
/* Drive can write DVD-R discs */
|
||||
__u8 dvd_r_write : 1;
|
||||
/* Drive can write DVD-RAM discs */
|
||||
__u8 dvd_ram_write : 1;
|
||||
__u8 reserved3 : 2;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 reserved4 : 1;
|
||||
/* Drive can read multisession discs. */
|
||||
__u8 multisession : 1;
|
||||
/* Drive can read mode 2, form 2 data. */
|
||||
__u8 mode2_form2 : 1;
|
||||
/* Drive can read mode 2, form 1 (XA) data. */
|
||||
__u8 mode2_form1 : 1;
|
||||
/* Drive supports digital output on port 2. */
|
||||
__u8 digport2 : 1;
|
||||
/* Drive supports digital output on port 1. */
|
||||
__u8 digport1 : 1;
|
||||
/* Drive can deliver a composite audio/video data stream. */
|
||||
__u8 composite : 1;
|
||||
/* Drive supports audio play operations. */
|
||||
__u8 audio_play : 1;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
/* Drive supports audio play operations. */
|
||||
__u8 audio_play : 1;
|
||||
/* Drive can deliver a composite audio/video data stream. */
|
||||
__u8 composite : 1;
|
||||
/* Drive supports digital output on port 1. */
|
||||
__u8 digport1 : 1;
|
||||
/* Drive supports digital output on port 2. */
|
||||
__u8 digport2 : 1;
|
||||
/* Drive can read mode 2, form 1 (XA) data. */
|
||||
__u8 mode2_form1 : 1;
|
||||
/* Drive can read mode 2, form 2 data. */
|
||||
__u8 mode2_form2 : 1;
|
||||
/* Drive can read multisession discs. */
|
||||
__u8 multisession : 1;
|
||||
__u8 reserved4 : 1;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 reserved5 : 1;
|
||||
/* Drive can return Media Catalog Number (UPC) info. */
|
||||
__u8 upc : 1;
|
||||
/* Drive can return International Standard Recording Code info. */
|
||||
__u8 isrc : 1;
|
||||
/* Drive supports C2 error pointers. */
|
||||
__u8 c2_pointers : 1;
|
||||
/* R-W data will be returned deinterleaved and error corrected. */
|
||||
__u8 rw_corr : 1;
|
||||
/* Subchannel reads can return combined R-W information. */
|
||||
__u8 rw_supported : 1;
|
||||
/* Drive can continue a read cdda operation from a loss of streaming.*/
|
||||
__u8 cdda_accurate : 1;
|
||||
/* Drive can read Red Book audio data. */
|
||||
__u8 cdda : 1;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
/* Drive can read Red Book audio data. */
|
||||
__u8 cdda : 1;
|
||||
/* Drive can continue a read cdda operation from a loss of streaming.*/
|
||||
__u8 cdda_accurate : 1;
|
||||
/* Subchannel reads can return combined R-W information. */
|
||||
__u8 rw_supported : 1;
|
||||
/* R-W data will be returned deinterleaved and error corrected. */
|
||||
__u8 rw_corr : 1;
|
||||
/* Drive supports C2 error pointers. */
|
||||
__u8 c2_pointers : 1;
|
||||
/* Drive can return International Standard Recording Code info. */
|
||||
__u8 isrc : 1;
|
||||
/* Drive can return Media Catalog Number (UPC) info. */
|
||||
__u8 upc : 1;
|
||||
__u8 reserved5 : 1;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
/* Drive mechanism types. */
|
||||
mechtype_t mechtype : 3;
|
||||
__u8 reserved6 : 1;
|
||||
/* Drive can eject a disc or changer cartridge. */
|
||||
__u8 eject : 1;
|
||||
/* State of prevent/allow jumper. */
|
||||
__u8 prevent_jumper : 1;
|
||||
/* Present state of door lock. */
|
||||
__u8 lock_state : 1;
|
||||
/* Drive can lock the door. */
|
||||
__u8 lock : 1;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
|
||||
/* Drive can lock the door. */
|
||||
__u8 lock : 1;
|
||||
/* Present state of door lock. */
|
||||
__u8 lock_state : 1;
|
||||
/* State of prevent/allow jumper. */
|
||||
__u8 prevent_jumper : 1;
|
||||
/* Drive can eject a disc or changer cartridge. */
|
||||
__u8 eject : 1;
|
||||
__u8 reserved6 : 1;
|
||||
/* Drive mechanism types. */
|
||||
mechtype_t mechtype : 3;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 reserved7 : 4;
|
||||
/* Drive supports software slot selection. */
|
||||
__u8 sss : 1; /* reserved in 1.2 */
|
||||
/* Changer can report exact contents of slots. */
|
||||
__u8 disc_present : 1; /* reserved in 1.2 */
|
||||
/* Audio for each channel can be muted independently. */
|
||||
__u8 separate_mute : 1;
|
||||
/* Audio level for each channel can be controlled independently. */
|
||||
__u8 separate_volume : 1;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
|
||||
/* Audio level for each channel can be controlled independently. */
|
||||
__u8 separate_volume : 1;
|
||||
/* Audio for each channel can be muted independently. */
|
||||
__u8 separate_mute : 1;
|
||||
/* Changer can report exact contents of slots. */
|
||||
__u8 disc_present : 1; /* reserved in 1.2 */
|
||||
/* Drive supports software slot selection. */
|
||||
__u8 sss : 1; /* reserved in 1.2 */
|
||||
__u8 reserved7 : 4;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
/* Note: the following four fields are returned in big-endian form. */
|
||||
/* Maximum speed (in kB/s). */
|
||||
unsigned short maxspeed;
|
||||
/* Number of discrete volume levels. */
|
||||
unsigned short n_vol_levels;
|
||||
/* Size of cache in drive, in kB. */
|
||||
unsigned short buffer_size;
|
||||
/* Current speed (in kB/s). */
|
||||
unsigned short curspeed;
|
||||
char pad[4];
|
||||
};
|
||||
|
||||
|
||||
struct atapi_mechstat_header {
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 fault : 1;
|
||||
__u8 changer_state : 2;
|
||||
__u8 curslot : 5;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 curslot : 5;
|
||||
__u8 changer_state : 2;
|
||||
__u8 fault : 1;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 mech_state : 3;
|
||||
__u8 door_open : 1;
|
||||
__u8 reserved1 : 4;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 reserved1 : 4;
|
||||
__u8 door_open : 1;
|
||||
__u8 mech_state : 3;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
byte curlba[3];
|
||||
byte nslots;
|
||||
__u16 slot_tablelen;
|
||||
};
|
||||
|
||||
|
||||
struct atapi_slot {
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 disc_present : 1;
|
||||
__u8 reserved1 : 6;
|
||||
__u8 change : 1;
|
||||
#elif defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 change : 1;
|
||||
__u8 reserved1 : 6;
|
||||
__u8 disc_present : 1;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
|
||||
byte reserved2[3];
|
||||
};
|
||||
|
||||
struct atapi_changer_info {
|
||||
struct atapi_mechstat_header hdr;
|
||||
struct atapi_slot slots[0];
|
||||
};
|
||||
|
||||
/* Extra per-device info for cdrom drives. */
|
||||
struct cdrom_info {
|
||||
|
||||
/* Buffer for table of contents. NULL if we haven't allocated
|
||||
a TOC buffer for this device yet. */
|
||||
|
||||
struct atapi_toc *toc;
|
||||
|
||||
unsigned long sector_buffered;
|
||||
unsigned long nsectors_buffered;
|
||||
unsigned char *buffer;
|
||||
|
||||
/* The result of the last successful request sense command
|
||||
on this device. */
|
||||
struct request_sense sense_data;
|
||||
|
||||
struct request request_sense_request;
|
||||
int dma;
|
||||
int cmd;
|
||||
unsigned long last_block;
|
||||
unsigned long start_seek;
|
||||
/* Buffer to hold mechanism status and changer slot table. */
|
||||
struct atapi_changer_info *changer_info;
|
||||
|
||||
struct ide_cd_config_flags config_flags;
|
||||
struct ide_cd_state_flags state_flags;
|
||||
|
||||
/* Per-device info needed by cdrom.c generic driver. */
|
||||
struct cdrom_device_info devinfo;
|
||||
|
||||
unsigned long write_timeout;
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* Descriptions of ATAPI error codes.
|
||||
*/
|
||||
|
||||
#define ARY_LEN(a) ((sizeof(a) / sizeof(a[0])))
|
||||
|
||||
/* This stuff should be in cdrom.h, since it is now generic... */
|
||||
|
||||
/* ATAPI sense keys (from table 140 of ATAPI 2.6) */
|
||||
#define NO_SENSE 0x00
|
||||
#define RECOVERED_ERROR 0x01
|
||||
#define NOT_READY 0x02
|
||||
#define MEDIUM_ERROR 0x03
|
||||
#define HARDWARE_ERROR 0x04
|
||||
#define ILLEGAL_REQUEST 0x05
|
||||
#define UNIT_ATTENTION 0x06
|
||||
#define DATA_PROTECT 0x07
|
||||
#define BLANK_CHECK 0x08
|
||||
#define ABORTED_COMMAND 0x0b
|
||||
#define MISCOMPARE 0x0e
|
||||
|
||||
|
||||
|
||||
/* This stuff should be in cdrom.h, since it is now generic... */
|
||||
#if VERBOSE_IDE_CD_ERRORS
|
||||
|
||||
/* The generic packet command opcodes for CD/DVD Logical Units,
|
||||
* From Table 57 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */
|
||||
static const struct {
|
||||
unsigned short packet_command;
|
||||
const char * const text;
|
||||
} packet_command_texts[] = {
|
||||
{ GPCMD_TEST_UNIT_READY, "Test Unit Ready" },
|
||||
{ GPCMD_REQUEST_SENSE, "Request Sense" },
|
||||
{ GPCMD_FORMAT_UNIT, "Format Unit" },
|
||||
{ GPCMD_INQUIRY, "Inquiry" },
|
||||
{ GPCMD_START_STOP_UNIT, "Start/Stop Unit" },
|
||||
{ GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL, "Prevent/Allow Medium Removal" },
|
||||
{ GPCMD_READ_FORMAT_CAPACITIES, "Read Format Capacities" },
|
||||
{ GPCMD_READ_CDVD_CAPACITY, "Read Cd/Dvd Capacity" },
|
||||
{ GPCMD_READ_10, "Read 10" },
|
||||
{ GPCMD_WRITE_10, "Write 10" },
|
||||
{ GPCMD_SEEK, "Seek" },
|
||||
{ GPCMD_WRITE_AND_VERIFY_10, "Write and Verify 10" },
|
||||
{ GPCMD_VERIFY_10, "Verify 10" },
|
||||
{ GPCMD_FLUSH_CACHE, "Flush Cache" },
|
||||
{ GPCMD_READ_SUBCHANNEL, "Read Subchannel" },
|
||||
{ GPCMD_READ_TOC_PMA_ATIP, "Read Table of Contents" },
|
||||
{ GPCMD_READ_HEADER, "Read Header" },
|
||||
{ GPCMD_PLAY_AUDIO_10, "Play Audio 10" },
|
||||
{ GPCMD_GET_CONFIGURATION, "Get Configuration" },
|
||||
{ GPCMD_PLAY_AUDIO_MSF, "Play Audio MSF" },
|
||||
{ GPCMD_PLAYAUDIO_TI, "Play Audio TrackIndex" },
|
||||
{ GPCMD_GET_EVENT_STATUS_NOTIFICATION, "Get Event Status Notification" },
|
||||
{ GPCMD_PAUSE_RESUME, "Pause/Resume" },
|
||||
{ GPCMD_STOP_PLAY_SCAN, "Stop Play/Scan" },
|
||||
{ GPCMD_READ_DISC_INFO, "Read Disc Info" },
|
||||
{ GPCMD_READ_TRACK_RZONE_INFO, "Read Track Rzone Info" },
|
||||
{ GPCMD_RESERVE_RZONE_TRACK, "Reserve Rzone Track" },
|
||||
{ GPCMD_SEND_OPC, "Send OPC" },
|
||||
{ GPCMD_MODE_SELECT_10, "Mode Select 10" },
|
||||
{ GPCMD_REPAIR_RZONE_TRACK, "Repair Rzone Track" },
|
||||
{ GPCMD_MODE_SENSE_10, "Mode Sense 10" },
|
||||
{ GPCMD_CLOSE_TRACK, "Close Track" },
|
||||
{ GPCMD_BLANK, "Blank" },
|
||||
{ GPCMD_SEND_EVENT, "Send Event" },
|
||||
{ GPCMD_SEND_KEY, "Send Key" },
|
||||
{ GPCMD_REPORT_KEY, "Report Key" },
|
||||
{ GPCMD_LOAD_UNLOAD, "Load/Unload" },
|
||||
{ GPCMD_SET_READ_AHEAD, "Set Read-ahead" },
|
||||
{ GPCMD_READ_12, "Read 12" },
|
||||
{ GPCMD_GET_PERFORMANCE, "Get Performance" },
|
||||
{ GPCMD_SEND_DVD_STRUCTURE, "Send DVD Structure" },
|
||||
{ GPCMD_READ_DVD_STRUCTURE, "Read DVD Structure" },
|
||||
{ GPCMD_SET_STREAMING, "Set Streaming" },
|
||||
{ GPCMD_READ_CD_MSF, "Read CD MSF" },
|
||||
{ GPCMD_SCAN, "Scan" },
|
||||
{ GPCMD_SET_SPEED, "Set Speed" },
|
||||
{ GPCMD_PLAY_CD, "Play CD" },
|
||||
{ GPCMD_MECHANISM_STATUS, "Mechanism Status" },
|
||||
{ GPCMD_READ_CD, "Read CD" },
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* From Table 303 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */
|
||||
static const char * const sense_key_texts[16] = {
|
||||
"No sense data",
|
||||
"Recovered error",
|
||||
"Not ready",
|
||||
"Medium error",
|
||||
"Hardware error",
|
||||
"Illegal request",
|
||||
"Unit attention",
|
||||
"Data protect",
|
||||
"Blank check",
|
||||
"(reserved)",
|
||||
"(reserved)",
|
||||
"Aborted command",
|
||||
"(reserved)",
|
||||
"(reserved)",
|
||||
"Miscompare",
|
||||
"(reserved)",
|
||||
};
|
||||
|
||||
/* From Table 304 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */
|
||||
static const struct {
|
||||
unsigned long asc_ascq;
|
||||
const char * const text;
|
||||
} sense_data_texts[] = {
|
||||
{ 0x000000, "No additional sense information" },
|
||||
{ 0x000011, "Play operation in progress" },
|
||||
{ 0x000012, "Play operation paused" },
|
||||
{ 0x000013, "Play operation successfully completed" },
|
||||
{ 0x000014, "Play operation stopped due to error" },
|
||||
{ 0x000015, "No current audio status to return" },
|
||||
{ 0x010c0a, "Write error - padding blocks added" },
|
||||
{ 0x011700, "Recovered data with no error correction applied" },
|
||||
{ 0x011701, "Recovered data with retries" },
|
||||
{ 0x011702, "Recovered data with positive head offset" },
|
||||
{ 0x011703, "Recovered data with negative head offset" },
|
||||
{ 0x011704, "Recovered data with retries and/or CIRC applied" },
|
||||
{ 0x011705, "Recovered data using previous sector ID" },
|
||||
{ 0x011800, "Recovered data with error correction applied" },
|
||||
{ 0x011801, "Recovered data with error correction and retries applied"},
|
||||
{ 0x011802, "Recovered data - the data was auto-reallocated" },
|
||||
{ 0x011803, "Recovered data with CIRC" },
|
||||
{ 0x011804, "Recovered data with L-EC" },
|
||||
{ 0x015d00,
|
||||
"Failure prediction threshold exceeded - Predicted logical unit failure" },
|
||||
{ 0x015d01,
|
||||
"Failure prediction threshold exceeded - Predicted media failure" },
|
||||
{ 0x015dff, "Failure prediction threshold exceeded - False" },
|
||||
{ 0x017301, "Power calibration area almost full" },
|
||||
{ 0x020400, "Logical unit not ready - cause not reportable" },
|
||||
/* Following is misspelled in ATAPI 2.6, _and_ in Mt. Fuji */
|
||||
{ 0x020401,
|
||||
"Logical unit not ready - in progress [sic] of becoming ready" },
|
||||
{ 0x020402, "Logical unit not ready - initializing command required" },
|
||||
{ 0x020403, "Logical unit not ready - manual intervention required" },
|
||||
{ 0x020404, "Logical unit not ready - format in progress" },
|
||||
{ 0x020407, "Logical unit not ready - operation in progress" },
|
||||
{ 0x020408, "Logical unit not ready - long write in progress" },
|
||||
{ 0x020600, "No reference position found (media may be upside down)" },
|
||||
{ 0x023000, "Incompatible medium installed" },
|
||||
{ 0x023a00, "Medium not present" },
|
||||
{ 0x025300, "Media load or eject failed" },
|
||||
{ 0x025700, "Unable to recover table of contents" },
|
||||
{ 0x030300, "Peripheral device write fault" },
|
||||
{ 0x030301, "No write current" },
|
||||
{ 0x030302, "Excessive write errors" },
|
||||
{ 0x030c00, "Write error" },
|
||||
{ 0x030c01, "Write error - Recovered with auto reallocation" },
|
||||
{ 0x030c02, "Write error - auto reallocation failed" },
|
||||
{ 0x030c03, "Write error - recommend reassignment" },
|
||||
{ 0x030c04, "Compression check miscompare error" },
|
||||
{ 0x030c05, "Data expansion occurred during compress" },
|
||||
{ 0x030c06, "Block not compressible" },
|
||||
{ 0x030c07, "Write error - recovery needed" },
|
||||
{ 0x030c08, "Write error - recovery failed" },
|
||||
{ 0x030c09, "Write error - loss of streaming" },
|
||||
{ 0x031100, "Unrecovered read error" },
|
||||
{ 0x031106, "CIRC unrecovered error" },
|
||||
{ 0x033101, "Format command failed" },
|
||||
{ 0x033200, "No defect spare location available" },
|
||||
{ 0x033201, "Defect list update failure" },
|
||||
{ 0x035100, "Erase failure" },
|
||||
{ 0x037200, "Session fixation error" },
|
||||
{ 0x037201, "Session fixation error writin lead-in" },
|
||||
{ 0x037202, "Session fixation error writin lead-out" },
|
||||
{ 0x037300, "CD control error" },
|
||||
{ 0x037302, "Power calibration area is full" },
|
||||
{ 0x037303, "Power calibration area error" },
|
||||
{ 0x037304, "Program memory area / RMA update failure" },
|
||||
{ 0x037305, "Program memory area / RMA is full" },
|
||||
{ 0x037306, "Program memory area / RMA is (almost) full" },
|
||||
|
||||
{ 0x040200, "No seek complete" },
|
||||
{ 0x040300, "Write fault" },
|
||||
{ 0x040900, "Track following error" },
|
||||
{ 0x040901, "Tracking servo failure" },
|
||||
{ 0x040902, "Focus servo failure" },
|
||||
{ 0x040903, "Spindle servo failure" },
|
||||
{ 0x041500, "Random positioning error" },
|
||||
{ 0x041501, "Mechanical positioning or changer error" },
|
||||
{ 0x041502, "Positioning error detected by read of medium" },
|
||||
{ 0x043c00, "Mechanical positioning or changer error" },
|
||||
{ 0x044000, "Diagnostic failure on component (ASCQ)" },
|
||||
{ 0x044400, "Internal CD/DVD logical unit failure" },
|
||||
{ 0x04b600, "Media load mechanism failed" },
|
||||
{ 0x051a00, "Parameter list length error" },
|
||||
{ 0x052000, "Invalid command operation code" },
|
||||
{ 0x052100, "Logical block address out of range" },
|
||||
{ 0x052102, "Invalid address for write" },
|
||||
{ 0x052400, "Invalid field in command packet" },
|
||||
{ 0x052600, "Invalid field in parameter list" },
|
||||
{ 0x052601, "Parameter not supported" },
|
||||
{ 0x052602, "Parameter value invalid" },
|
||||
{ 0x052700, "Write protected media" },
|
||||
{ 0x052c00, "Command sequence error" },
|
||||
{ 0x052c03, "Current program area is not empty" },
|
||||
{ 0x052c04, "Current program area is empty" },
|
||||
{ 0x053001, "Cannot read medium - unknown format" },
|
||||
{ 0x053002, "Cannot read medium - incompatible format" },
|
||||
{ 0x053900, "Saving parameters not supported" },
|
||||
{ 0x054e00, "Overlapped commands attempted" },
|
||||
{ 0x055302, "Medium removal prevented" },
|
||||
{ 0x055500, "System resource failure" },
|
||||
{ 0x056300, "End of user area encountered on this track" },
|
||||
{ 0x056400, "Illegal mode for this track or incompatible medium" },
|
||||
{ 0x056f00, "Copy protection key exchange failure - Authentication failure" },
|
||||
{ 0x056f01, "Copy protection key exchange failure - Key not present" },
|
||||
{ 0x056f02, "Copy protection key exchange failure - Key not established" },
|
||||
{ 0x056f03, "Read of scrambled sector without authentication" },
|
||||
{ 0x056f04, "Media region code is mismatched to logical unit" },
|
||||
{ 0x056f05, "Drive region must be permanent / region reset count error" },
|
||||
{ 0x057203, "Session fixation error - incomplete track in session" },
|
||||
{ 0x057204, "Empty or partially written reserved track" },
|
||||
{ 0x057205, "No more RZONE reservations are allowed" },
|
||||
{ 0x05bf00, "Loss of streaming" },
|
||||
{ 0x062800, "Not ready to ready transition, medium may have changed" },
|
||||
{ 0x062900, "Power on, reset or hardware reset occurred" },
|
||||
{ 0x062a00, "Parameters changed" },
|
||||
{ 0x062a01, "Mode parameters changed" },
|
||||
{ 0x062e00, "Insufficient time for operation" },
|
||||
{ 0x063f00, "Logical unit operating conditions have changed" },
|
||||
{ 0x063f01, "Microcode has been changed" },
|
||||
{ 0x065a00, "Operator request or state change input (unspecified)" },
|
||||
{ 0x065a01, "Operator medium removal request" },
|
||||
{ 0x0bb900, "Play operation aborted" },
|
||||
|
||||
/* Here we use 0xff for the key (not a valid key) to signify
|
||||
* that these can have _any_ key value associated with them... */
|
||||
{ 0xff0401, "Logical unit is in process of becoming ready" },
|
||||
{ 0xff0400, "Logical unit not ready, cause not reportable" },
|
||||
{ 0xff0402, "Logical unit not ready, initializing command required" },
|
||||
{ 0xff0403, "Logical unit not ready, manual intervention required" },
|
||||
{ 0xff0500, "Logical unit does not respond to selection" },
|
||||
{ 0xff0800, "Logical unit communication failure" },
|
||||
{ 0xff0802, "Logical unit communication parity error" },
|
||||
{ 0xff0801, "Logical unit communication time-out" },
|
||||
{ 0xff2500, "Logical unit not supported" },
|
||||
{ 0xff4c00, "Logical unit failed self-configuration" },
|
||||
{ 0xff3e00, "Logical unit has not self-configured yet" },
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _IDE_CD_H */
|
||||
BIN
extra/linux-2.6.10/drivers/ide/ide-cd.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-cd.o
Normal file
Binary file not shown.
BIN
extra/linux-2.6.10/drivers/ide/ide-core.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-core.o
Normal file
Binary file not shown.
72
extra/linux-2.6.10/drivers/ide/ide-default.c
Normal file
72
extra/linux-2.6.10/drivers/ide/ide-default.c
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* ide-default - Driver for unbound ide devices
|
||||
*
|
||||
* This provides a clean way to bind a device to default operations
|
||||
* by having an actual driver class that rather than special casing
|
||||
* "no driver" all over the IDE code
|
||||
*
|
||||
* Copyright (C) 2003, Red Hat <alan@redhat.com>
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/cdrom.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#define IDEDEFAULT_VERSION "0.9.newide"
|
||||
/*
|
||||
* Driver initialization.
|
||||
*/
|
||||
|
||||
static int idedefault_attach(ide_drive_t *drive);
|
||||
|
||||
/*
|
||||
* IDE subdriver functions, registered with ide.c
|
||||
*/
|
||||
|
||||
ide_driver_t idedefault_driver = {
|
||||
.name = "ide-default",
|
||||
.version = IDEDEFAULT_VERSION,
|
||||
.attach = idedefault_attach,
|
||||
.drives = LIST_HEAD_INIT(idedefault_driver.drives)
|
||||
};
|
||||
|
||||
static int idedefault_attach (ide_drive_t *drive)
|
||||
{
|
||||
if (ide_register_subdriver(drive, &idedefault_driver)) {
|
||||
printk(KERN_ERR "ide-default: %s: Failed to register the "
|
||||
"driver with ide.c\n", drive->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* For the sake of the request layer, we must make sure we have a
|
||||
* correct ready_stat value, that is 0 for ATAPI devices or we will
|
||||
* fail any request like Power Management
|
||||
*/
|
||||
if (drive->media != ide_disk)
|
||||
drive->ready_stat = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_DESCRIPTION("IDE Default Driver");
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
BIN
extra/linux-2.6.10/drivers/ide/ide-default.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-default.o
Normal file
Binary file not shown.
1501
extra/linux-2.6.10/drivers/ide/ide-disk.c
Normal file
1501
extra/linux-2.6.10/drivers/ide/ide-disk.c
Normal file
File diff suppressed because it is too large
Load Diff
BIN
extra/linux-2.6.10/drivers/ide/ide-disk.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-disk.o
Normal file
Binary file not shown.
958
extra/linux-2.6.10/drivers/ide/ide-dma.c
Normal file
958
extra/linux-2.6.10/drivers/ide/ide-dma.c
Normal file
@@ -0,0 +1,958 @@
|
||||
/*
|
||||
* linux/drivers/ide/ide-dma.c Version 4.10 June 9, 2000
|
||||
*
|
||||
* Copyright (c) 1999-2000 Andre Hedrick <andre@linux-ide.org>
|
||||
* May be copied or modified under the terms of the GNU General Public License
|
||||
*/
|
||||
|
||||
/*
|
||||
* Special Thanks to Mark for his Six years of work.
|
||||
*
|
||||
* Copyright (c) 1995-1998 Mark Lord
|
||||
* May be copied or modified under the terms of the GNU General Public License
|
||||
*/
|
||||
|
||||
/*
|
||||
* This module provides support for the bus-master IDE DMA functions
|
||||
* of various PCI chipsets, including the Intel PIIX (i82371FB for
|
||||
* the 430 FX chipset), the PIIX3 (i82371SB for the 430 HX/VX and
|
||||
* 440 chipsets), and the PIIX4 (i82371AB for the 430 TX chipset)
|
||||
* ("PIIX" stands for "PCI ISA IDE Xcellerator").
|
||||
*
|
||||
* Pretty much the same code works for other IDE PCI bus-mastering chipsets.
|
||||
*
|
||||
* DMA is supported for all IDE devices (disk drives, cdroms, tapes, floppies).
|
||||
*
|
||||
* By default, DMA support is prepared for use, but is currently enabled only
|
||||
* for drives which already have DMA enabled (UltraDMA or mode 2 multi/single),
|
||||
* or which are recognized as "good" (see table below). Drives with only mode0
|
||||
* or mode1 (multi/single) DMA should also work with this chipset/driver
|
||||
* (eg. MC2112A) but are not enabled by default.
|
||||
*
|
||||
* Use "hdparm -i" to view modes supported by a given drive.
|
||||
*
|
||||
* The hdparm-3.5 (or later) utility can be used for manually enabling/disabling
|
||||
* DMA support, but must be (re-)compiled against this kernel version or later.
|
||||
*
|
||||
* To enable DMA, use "hdparm -d1 /dev/hd?" on a per-drive basis after booting.
|
||||
* If problems arise, ide.c will disable DMA operation after a few retries.
|
||||
* This error recovery mechanism works and has been extremely well exercised.
|
||||
*
|
||||
* IDE drives, depending on their vintage, may support several different modes
|
||||
* of DMA operation. The boot-time modes are indicated with a "*" in
|
||||
* the "hdparm -i" listing, and can be changed with *knowledgeable* use of
|
||||
* the "hdparm -X" feature. There is seldom a need to do this, as drives
|
||||
* normally power-up with their "best" PIO/DMA modes enabled.
|
||||
*
|
||||
* Testing has been done with a rather extensive number of drives,
|
||||
* with Quantum & Western Digital models generally outperforming the pack,
|
||||
* and Fujitsu & Conner (and some Seagate which are really Conner) drives
|
||||
* showing more lackluster throughput.
|
||||
*
|
||||
* Keep an eye on /var/adm/messages for "DMA disabled" messages.
|
||||
*
|
||||
* Some people have reported trouble with Intel Zappa motherboards.
|
||||
* This can be fixed by upgrading the AMI BIOS to version 1.00.04.BS0,
|
||||
* available from ftp://ftp.intel.com/pub/bios/10004bs0.exe
|
||||
* (thanks to Glen Morrell <glen@spin.Stanford.edu> for researching this).
|
||||
*
|
||||
* Thanks to "Christopher J. Reimer" <reimer@doe.carleton.ca> for
|
||||
* fixing the problem with the BIOS on some Acer motherboards.
|
||||
*
|
||||
* Thanks to "Benoit Poulot-Cazajous" <poulot@chorus.fr> for testing
|
||||
* "TX" chipset compatibility and for providing patches for the "TX" chipset.
|
||||
*
|
||||
* Thanks to Christian Brunner <chb@muc.de> for taking a good first crack
|
||||
* at generic DMA -- his patches were referred to when preparing this code.
|
||||
*
|
||||
* Most importantly, thanks to Robert Bringman <rob@mars.trion.com>
|
||||
* for supplying a Promise UDMA board & WD UDMA drive for this work!
|
||||
*
|
||||
* And, yes, Intel Zappa boards really *do* use both PIIX IDE ports.
|
||||
*
|
||||
* ATA-66/100 and recovery functions, I forgot the rest......
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
struct drive_list_entry {
|
||||
const char *id_model;
|
||||
const char *id_firmware;
|
||||
};
|
||||
|
||||
static const struct drive_list_entry drive_whitelist [] = {
|
||||
|
||||
{ "Micropolis 2112A" , "ALL" },
|
||||
{ "CONNER CTMA 4000" , "ALL" },
|
||||
{ "CONNER CTT8000-A" , "ALL" },
|
||||
{ "ST34342A" , "ALL" },
|
||||
{ NULL , NULL }
|
||||
};
|
||||
|
||||
static const struct drive_list_entry drive_blacklist [] = {
|
||||
|
||||
{ "WDC AC11000H" , "ALL" },
|
||||
{ "WDC AC22100H" , "ALL" },
|
||||
{ "WDC AC32500H" , "ALL" },
|
||||
{ "WDC AC33100H" , "ALL" },
|
||||
{ "WDC AC31600H" , "ALL" },
|
||||
{ "WDC AC32100H" , "24.09P07" },
|
||||
{ "WDC AC23200L" , "21.10N21" },
|
||||
{ "Compaq CRD-8241B" , "ALL" },
|
||||
{ "CRD-8400B" , "ALL" },
|
||||
{ "CRD-8480B", "ALL" },
|
||||
{ "CRD-8480C", "ALL" },
|
||||
{ "CRD-8482B", "ALL" },
|
||||
{ "CRD-84" , "ALL" },
|
||||
{ "SanDisk SDP3B" , "ALL" },
|
||||
{ "SanDisk SDP3B-64" , "ALL" },
|
||||
{ "SANYO CD-ROM CRD" , "ALL" },
|
||||
{ "HITACHI CDR-8" , "ALL" },
|
||||
{ "HITACHI CDR-8335" , "ALL" },
|
||||
{ "HITACHI CDR-8435" , "ALL" },
|
||||
{ "Toshiba CD-ROM XM-6202B" , "ALL" },
|
||||
{ "CD-532E-A" , "ALL" },
|
||||
{ "E-IDE CD-ROM CR-840", "ALL" },
|
||||
{ "CD-ROM Drive/F5A", "ALL" },
|
||||
{ "WPI CDD-820", "ALL" },
|
||||
{ "SAMSUNG CD-ROM SC-148C", "ALL" },
|
||||
{ "SAMSUNG CD-ROM SC", "ALL" },
|
||||
{ "SanDisk SDP3B-64" , "ALL" },
|
||||
{ "SAMSUNG CD-ROM SN-124", "ALL" },
|
||||
{ "ATAPI CD-ROM DRIVE 40X MAXIMUM", "ALL" },
|
||||
{ "_NEC DV5800A", "ALL" },
|
||||
{ NULL , NULL }
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* in_drive_list - look for drive in black/white list
|
||||
* @id: drive identifier
|
||||
* @drive_table: list to inspect
|
||||
*
|
||||
* Look for a drive in the blacklist and the whitelist tables
|
||||
* Returns 1 if the drive is found in the table.
|
||||
*/
|
||||
|
||||
static int in_drive_list(struct hd_driveid *id, const struct drive_list_entry *drive_table)
|
||||
{
|
||||
for ( ; drive_table->id_model ; drive_table++)
|
||||
if ((!strcmp(drive_table->id_model, id->model)) &&
|
||||
((strstr(drive_table->id_firmware, id->fw_rev)) ||
|
||||
(!strcmp(drive_table->id_firmware, "ALL"))))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
|
||||
/**
|
||||
* ide_dma_intr - IDE DMA interrupt handler
|
||||
* @drive: the drive the interrupt is for
|
||||
*
|
||||
* Handle an interrupt completing a read/write DMA transfer on an
|
||||
* IDE device
|
||||
*/
|
||||
|
||||
ide_startstop_t ide_dma_intr (ide_drive_t *drive)
|
||||
{
|
||||
u8 stat = 0, dma_stat = 0;
|
||||
|
||||
dma_stat = HWIF(drive)->ide_dma_end(drive);
|
||||
stat = HWIF(drive)->INB(IDE_STATUS_REG); /* get drive status */
|
||||
if (OK_STAT(stat,DRIVE_READY,drive->bad_wstat|DRQ_STAT)) {
|
||||
if (!dma_stat) {
|
||||
struct request *rq = HWGROUP(drive)->rq;
|
||||
|
||||
DRIVER(drive)->end_request(drive, 1, rq->nr_sectors);
|
||||
return ide_stopped;
|
||||
}
|
||||
printk(KERN_ERR "%s: dma_intr: bad DMA status (dma_stat=%x)\n",
|
||||
drive->name, dma_stat);
|
||||
}
|
||||
return DRIVER(drive)->error(drive, "dma_intr", stat);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_dma_intr);
|
||||
|
||||
/**
|
||||
* ide_build_sglist - map IDE scatter gather for DMA I/O
|
||||
* @drive: the drive to build the DMA table for
|
||||
* @rq: the request holding the sg list
|
||||
*
|
||||
* Perform the PCI mapping magic necessary to access the source or
|
||||
* target buffers of a request via PCI DMA. The lower layers of the
|
||||
* kernel provide the necessary cache management so that we can
|
||||
* operate in a portable fashion
|
||||
*/
|
||||
|
||||
int ide_build_sglist(ide_drive_t *drive, struct request *rq)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct scatterlist *sg = hwif->sg_table;
|
||||
|
||||
if ((rq->flags & REQ_DRIVE_TASKFILE) && rq->nr_sectors > 256)
|
||||
BUG();
|
||||
|
||||
ide_map_sg(drive, rq);
|
||||
|
||||
if (rq_data_dir(rq) == READ)
|
||||
hwif->sg_dma_direction = PCI_DMA_FROMDEVICE;
|
||||
else
|
||||
hwif->sg_dma_direction = PCI_DMA_TODEVICE;
|
||||
|
||||
return pci_map_sg(hwif->pci_dev, sg, hwif->sg_nents, hwif->sg_dma_direction);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_build_sglist);
|
||||
|
||||
/**
|
||||
* ide_build_dmatable - build IDE DMA table
|
||||
*
|
||||
* ide_build_dmatable() prepares a dma request. We map the command
|
||||
* to get the pci bus addresses of the buffers and then build up
|
||||
* the PRD table that the IDE layer wants to be fed. The code
|
||||
* knows about the 64K wrap bug in the CS5530.
|
||||
*
|
||||
* Returns 0 if all went okay, returns 1 otherwise.
|
||||
* May also be invoked from trm290.c
|
||||
*/
|
||||
|
||||
int ide_build_dmatable (ide_drive_t *drive, struct request *rq)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
unsigned int *table = hwif->dmatable_cpu;
|
||||
unsigned int is_trm290 = (hwif->chipset == ide_trm290) ? 1 : 0;
|
||||
unsigned int count = 0;
|
||||
int i;
|
||||
struct scatterlist *sg;
|
||||
|
||||
hwif->sg_nents = i = ide_build_sglist(drive, rq);
|
||||
|
||||
if (!i)
|
||||
return 0;
|
||||
|
||||
sg = hwif->sg_table;
|
||||
while (i) {
|
||||
u32 cur_addr;
|
||||
u32 cur_len;
|
||||
|
||||
cur_addr = sg_dma_address(sg);
|
||||
cur_len = sg_dma_len(sg);
|
||||
|
||||
/*
|
||||
* Fill in the dma table, without crossing any 64kB boundaries.
|
||||
* Most hardware requires 16-bit alignment of all blocks,
|
||||
* but the trm290 requires 32-bit alignment.
|
||||
*/
|
||||
|
||||
while (cur_len) {
|
||||
if (count++ >= PRD_ENTRIES) {
|
||||
printk(KERN_ERR "%s: DMA table too small\n", drive->name);
|
||||
goto use_pio_instead;
|
||||
} else {
|
||||
u32 xcount, bcount = 0x10000 - (cur_addr & 0xffff);
|
||||
|
||||
if (bcount > cur_len)
|
||||
bcount = cur_len;
|
||||
*table++ = cpu_to_le32(cur_addr);
|
||||
xcount = bcount & 0xffff;
|
||||
if (is_trm290)
|
||||
xcount = ((xcount >> 2) - 1) << 16;
|
||||
if (xcount == 0x0000) {
|
||||
/*
|
||||
* Most chipsets correctly interpret a length of 0x0000 as 64KB,
|
||||
* but at least one (e.g. CS5530) misinterprets it as zero (!).
|
||||
* So here we break the 64KB entry into two 32KB entries instead.
|
||||
*/
|
||||
if (count++ >= PRD_ENTRIES) {
|
||||
printk(KERN_ERR "%s: DMA table too small\n", drive->name);
|
||||
goto use_pio_instead;
|
||||
}
|
||||
*table++ = cpu_to_le32(0x8000);
|
||||
*table++ = cpu_to_le32(cur_addr + 0x8000);
|
||||
xcount = 0x8000;
|
||||
}
|
||||
*table++ = cpu_to_le32(xcount);
|
||||
cur_addr += bcount;
|
||||
cur_len -= bcount;
|
||||
}
|
||||
}
|
||||
|
||||
sg++;
|
||||
i--;
|
||||
}
|
||||
|
||||
if (count) {
|
||||
if (!is_trm290)
|
||||
*--table |= cpu_to_le32(0x80000000);
|
||||
return count;
|
||||
}
|
||||
printk(KERN_ERR "%s: empty DMA table?\n", drive->name);
|
||||
use_pio_instead:
|
||||
pci_unmap_sg(hwif->pci_dev,
|
||||
hwif->sg_table,
|
||||
hwif->sg_nents,
|
||||
hwif->sg_dma_direction);
|
||||
return 0; /* revert to PIO for this request */
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_build_dmatable);
|
||||
|
||||
/**
|
||||
* ide_destroy_dmatable - clean up DMA mapping
|
||||
* @drive: The drive to unmap
|
||||
*
|
||||
* Teardown mappings after DMA has completed. This must be called
|
||||
* after the completion of each use of ide_build_dmatable and before
|
||||
* the next use of ide_build_dmatable. Failure to do so will cause
|
||||
* an oops as only one mapping can be live for each target at a given
|
||||
* time.
|
||||
*/
|
||||
|
||||
void ide_destroy_dmatable (ide_drive_t *drive)
|
||||
{
|
||||
struct pci_dev *dev = HWIF(drive)->pci_dev;
|
||||
struct scatterlist *sg = HWIF(drive)->sg_table;
|
||||
int nents = HWIF(drive)->sg_nents;
|
||||
|
||||
pci_unmap_sg(dev, sg, nents, HWIF(drive)->sg_dma_direction);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
|
||||
|
||||
/**
|
||||
* config_drive_for_dma - attempt to activate IDE DMA
|
||||
* @drive: the drive to place in DMA mode
|
||||
*
|
||||
* If the drive supports at least mode 2 DMA or UDMA of any kind
|
||||
* then attempt to place it into DMA mode. Drives that are known to
|
||||
* support DMA but predate the DMA properties or that are known
|
||||
* to have DMA handling bugs are also set up appropriately based
|
||||
* on the good/bad drive lists.
|
||||
*/
|
||||
|
||||
static int config_drive_for_dma (ide_drive_t *drive)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
|
||||
if ((id->capability & 1) && hwif->autodma) {
|
||||
/*
|
||||
* Enable DMA on any drive that has
|
||||
* UltraDMA (mode 0/1/2/3/4/5/6) enabled
|
||||
*/
|
||||
if ((id->field_valid & 4) && ((id->dma_ultra >> 8) & 0x7f))
|
||||
return hwif->ide_dma_on(drive);
|
||||
/*
|
||||
* Enable DMA on any drive that has mode2 DMA
|
||||
* (multi or single) enabled
|
||||
*/
|
||||
if (id->field_valid & 2) /* regular DMA */
|
||||
if ((id->dma_mword & 0x404) == 0x404 ||
|
||||
(id->dma_1word & 0x404) == 0x404)
|
||||
return hwif->ide_dma_on(drive);
|
||||
|
||||
/* Consult the list of known "good" drives */
|
||||
if (__ide_dma_good_drive(drive))
|
||||
return hwif->ide_dma_on(drive);
|
||||
}
|
||||
// if (hwif->tuneproc != NULL) hwif->tuneproc(drive, 255);
|
||||
return hwif->ide_dma_off_quietly(drive);
|
||||
}
|
||||
|
||||
/**
|
||||
* dma_timer_expiry - handle a DMA timeout
|
||||
* @drive: Drive that timed out
|
||||
*
|
||||
* An IDE DMA transfer timed out. In the event of an error we ask
|
||||
* the driver to resolve the problem, if a DMA transfer is still
|
||||
* in progress we continue to wait (arguably we need to add a
|
||||
* secondary 'I don't care what the drive thinks' timeout here)
|
||||
* Finally if we have an interrupt we let it complete the I/O.
|
||||
* But only one time - we clear expiry and if it's still not
|
||||
* completed after WAIT_CMD, we error and retry in PIO.
|
||||
* This can occur if an interrupt is lost or due to hang or bugs.
|
||||
*/
|
||||
|
||||
static int dma_timer_expiry (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 dma_stat = hwif->INB(hwif->dma_status);
|
||||
|
||||
printk(KERN_WARNING "%s: dma_timer_expiry: dma status == 0x%02x\n",
|
||||
drive->name, dma_stat);
|
||||
|
||||
if ((dma_stat & 0x18) == 0x18) /* BUSY Stupid Early Timer !! */
|
||||
return WAIT_CMD;
|
||||
|
||||
HWGROUP(drive)->expiry = NULL; /* one free ride for now */
|
||||
|
||||
/* 1 dmaing, 2 error, 4 intr */
|
||||
if (dma_stat & 2) /* ERROR */
|
||||
return -1;
|
||||
|
||||
if (dma_stat & 1) /* DMAing */
|
||||
return WAIT_CMD;
|
||||
|
||||
if (dma_stat & 4) /* Got an Interrupt */
|
||||
return WAIT_CMD;
|
||||
|
||||
return 0; /* Status is unknown -- reset the bus */
|
||||
}
|
||||
|
||||
/**
|
||||
* __ide_dma_host_off - Generic DMA kill
|
||||
* @drive: drive to control
|
||||
*
|
||||
* Perform the generic IDE controller DMA off operation. This
|
||||
* works for most IDE bus mastering controllers
|
||||
*/
|
||||
|
||||
int __ide_dma_host_off (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 unit = (drive->select.b.unit & 0x01);
|
||||
u8 dma_stat = hwif->INB(hwif->dma_status);
|
||||
|
||||
hwif->OUTB((dma_stat & ~(1<<(5+unit))), hwif->dma_status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_host_off);
|
||||
|
||||
/**
|
||||
* __ide_dma_host_off_quietly - Generic DMA kill
|
||||
* @drive: drive to control
|
||||
*
|
||||
* Turn off the current DMA on this IDE controller.
|
||||
*/
|
||||
|
||||
int __ide_dma_off_quietly (ide_drive_t *drive)
|
||||
{
|
||||
drive->using_dma = 0;
|
||||
ide_toggle_bounce(drive, 0);
|
||||
|
||||
if (HWIF(drive)->ide_dma_host_off(drive))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_off_quietly);
|
||||
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */
|
||||
|
||||
/**
|
||||
* __ide_dma_off - disable DMA on a device
|
||||
* @drive: drive to disable DMA on
|
||||
*
|
||||
* Disable IDE DMA for a device on this IDE controller.
|
||||
* Inform the user that DMA has been disabled.
|
||||
*/
|
||||
|
||||
int __ide_dma_off (ide_drive_t *drive)
|
||||
{
|
||||
printk(KERN_INFO "%s: DMA disabled\n", drive->name);
|
||||
return HWIF(drive)->ide_dma_off_quietly(drive);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_off);
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
|
||||
/**
|
||||
* __ide_dma_host_on - Enable DMA on a host
|
||||
* @drive: drive to enable for DMA
|
||||
*
|
||||
* Enable DMA on an IDE controller following generic bus mastering
|
||||
* IDE controller behaviour
|
||||
*/
|
||||
|
||||
int __ide_dma_host_on (ide_drive_t *drive)
|
||||
{
|
||||
if (drive->using_dma) {
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 unit = (drive->select.b.unit & 0x01);
|
||||
u8 dma_stat = hwif->INB(hwif->dma_status);
|
||||
|
||||
hwif->OUTB((dma_stat|(1<<(5+unit))), hwif->dma_status);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_host_on);
|
||||
|
||||
/**
|
||||
* __ide_dma_on - Enable DMA on a device
|
||||
* @drive: drive to enable DMA on
|
||||
*
|
||||
* Enable IDE DMA for a device on this IDE controller.
|
||||
*/
|
||||
|
||||
int __ide_dma_on (ide_drive_t *drive)
|
||||
{
|
||||
/* consult the list of known "bad" drives */
|
||||
if (__ide_dma_bad_drive(drive))
|
||||
return 1;
|
||||
|
||||
drive->using_dma = 1;
|
||||
ide_toggle_bounce(drive, 1);
|
||||
|
||||
if (HWIF(drive)->ide_dma_host_on(drive))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_on);
|
||||
|
||||
/**
|
||||
* __ide_dma_check - check DMA setup
|
||||
* @drive: drive to check
|
||||
*
|
||||
* Don't use - due for extermination
|
||||
*/
|
||||
|
||||
int __ide_dma_check (ide_drive_t *drive)
|
||||
{
|
||||
return config_drive_for_dma(drive);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_check);
|
||||
|
||||
/**
|
||||
* ide_dma_setup - begin a DMA phase
|
||||
* @drive: target device
|
||||
*
|
||||
* Build an IDE DMA PRD (IDE speak for scatter gather table)
|
||||
* and then set up the DMA transfer registers for a device
|
||||
* that follows generic IDE PCI DMA behaviour. Controllers can
|
||||
* override this function if they need to
|
||||
*
|
||||
* Returns 0 on success. If a PIO fallback is required then 1
|
||||
* is returned.
|
||||
*/
|
||||
|
||||
int ide_dma_setup(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
struct request *rq = HWGROUP(drive)->rq;
|
||||
unsigned int reading;
|
||||
u8 dma_stat;
|
||||
|
||||
if (rq_data_dir(rq))
|
||||
reading = 0;
|
||||
else
|
||||
reading = 1 << 3;
|
||||
|
||||
/* fall back to pio! */
|
||||
if (!ide_build_dmatable(drive, rq)) {
|
||||
ide_map_sg(drive, rq);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* PRD table */
|
||||
hwif->OUTL(hwif->dmatable_dma, hwif->dma_prdtable);
|
||||
|
||||
/* specify r/w */
|
||||
hwif->OUTB(reading, hwif->dma_command);
|
||||
|
||||
/* read dma_status for INTR & ERROR flags */
|
||||
dma_stat = hwif->INB(hwif->dma_status);
|
||||
|
||||
/* clear INTR & ERROR flags */
|
||||
hwif->OUTB(dma_stat|6, hwif->dma_status);
|
||||
drive->waiting_for_dma = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_dma_setup);
|
||||
|
||||
static void ide_dma_exec_cmd(ide_drive_t *drive, u8 command)
|
||||
{
|
||||
/* issue cmd to drive */
|
||||
ide_execute_command(drive, command, &ide_dma_intr, 2*WAIT_CMD, dma_timer_expiry);
|
||||
}
|
||||
|
||||
void ide_dma_start(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 dma_cmd = hwif->INB(hwif->dma_command);
|
||||
|
||||
/* Note that this is done *after* the cmd has
|
||||
* been issued to the drive, as per the BM-IDE spec.
|
||||
* The Promise Ultra33 doesn't work correctly when
|
||||
* we do this part before issuing the drive cmd.
|
||||
*/
|
||||
/* start DMA */
|
||||
hwif->OUTB(dma_cmd|1, hwif->dma_command);
|
||||
hwif->dma = 1;
|
||||
wmb();
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_dma_start);
|
||||
|
||||
/* returns 1 on error, 0 otherwise */
|
||||
int __ide_dma_end (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 dma_stat = 0, dma_cmd = 0;
|
||||
|
||||
drive->waiting_for_dma = 0;
|
||||
/* get dma_command mode */
|
||||
dma_cmd = hwif->INB(hwif->dma_command);
|
||||
/* stop DMA */
|
||||
hwif->OUTB(dma_cmd&~1, hwif->dma_command);
|
||||
/* get DMA status */
|
||||
dma_stat = hwif->INB(hwif->dma_status);
|
||||
/* clear the INTR & ERROR bits */
|
||||
hwif->OUTB(dma_stat|6, hwif->dma_status);
|
||||
/* purge DMA mappings */
|
||||
ide_destroy_dmatable(drive);
|
||||
/* verify good DMA status */
|
||||
hwif->dma = 0;
|
||||
wmb();
|
||||
return (dma_stat & 7) != 4 ? (0x10 | dma_stat) : 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_end);
|
||||
|
||||
/* returns 1 if dma irq issued, 0 otherwise */
|
||||
int __ide_dma_test_irq (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 dma_stat = hwif->INB(hwif->dma_status);
|
||||
|
||||
#if 0 /* do not set unless you know what you are doing */
|
||||
if (dma_stat & 4) {
|
||||
u8 stat = hwif->INB(IDE_STATUS_REG);
|
||||
hwif->OUTB(hwif->dma_status, dma_stat & 0xE4);
|
||||
}
|
||||
#endif
|
||||
/* return 1 if INTR asserted */
|
||||
if ((dma_stat & 4) == 4)
|
||||
return 1;
|
||||
if (!drive->waiting_for_dma)
|
||||
printk(KERN_WARNING "%s: (%s) called while not waiting\n",
|
||||
drive->name, __FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_test_irq);
|
||||
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */
|
||||
|
||||
int __ide_dma_bad_drive (ide_drive_t *drive)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
|
||||
int blacklist = in_drive_list(id, drive_blacklist);
|
||||
if (blacklist) {
|
||||
printk(KERN_WARNING "%s: Disabling (U)DMA for %s (blacklisted)\n",
|
||||
drive->name, id->model);
|
||||
return blacklist;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_bad_drive);
|
||||
|
||||
int __ide_dma_good_drive (ide_drive_t *drive)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
return in_drive_list(id, drive_whitelist);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_good_drive);
|
||||
|
||||
int ide_use_dma(ide_drive_t *drive)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
|
||||
/* consult the list of known "bad" drives */
|
||||
if (__ide_dma_bad_drive(drive))
|
||||
return 0;
|
||||
|
||||
/* capable of UltraDMA modes */
|
||||
if (id->field_valid & 4) {
|
||||
if (hwif->ultra_mask & id->dma_ultra)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* capable of regular DMA modes */
|
||||
if (id->field_valid & 2) {
|
||||
if (hwif->mwdma_mask & id->dma_mword)
|
||||
return 1;
|
||||
if (hwif->swdma_mask & id->dma_1word)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* consult the list of known "good" drives */
|
||||
if (__ide_dma_good_drive(drive) && id->eide_dma_time < 150)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_use_dma);
|
||||
|
||||
void ide_dma_verbose(ide_drive_t *drive)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
|
||||
if (id->field_valid & 4) {
|
||||
if ((id->dma_ultra >> 8) && (id->dma_mword >> 8))
|
||||
goto bug_dma_off;
|
||||
if (id->dma_ultra & ((id->dma_ultra >> 8) & hwif->ultra_mask)) {
|
||||
if (((id->dma_ultra >> 11) & 0x1F) &&
|
||||
eighty_ninty_three(drive)) {
|
||||
if ((id->dma_ultra >> 15) & 1) {
|
||||
printk(", UDMA(mode 7)");
|
||||
} else if ((id->dma_ultra >> 14) & 1) {
|
||||
printk(", UDMA(133)");
|
||||
} else if ((id->dma_ultra >> 13) & 1) {
|
||||
printk(", UDMA(100)");
|
||||
} else if ((id->dma_ultra >> 12) & 1) {
|
||||
printk(", UDMA(66)");
|
||||
} else if ((id->dma_ultra >> 11) & 1) {
|
||||
printk(", UDMA(44)");
|
||||
} else
|
||||
goto mode_two;
|
||||
} else {
|
||||
mode_two:
|
||||
if ((id->dma_ultra >> 10) & 1) {
|
||||
printk(", UDMA(33)");
|
||||
} else if ((id->dma_ultra >> 9) & 1) {
|
||||
printk(", UDMA(25)");
|
||||
} else if ((id->dma_ultra >> 8) & 1) {
|
||||
printk(", UDMA(16)");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
printk(", (U)DMA"); /* Can be BIOS-enabled! */
|
||||
}
|
||||
} else if (id->field_valid & 2) {
|
||||
if ((id->dma_mword >> 8) && (id->dma_1word >> 8))
|
||||
goto bug_dma_off;
|
||||
printk(", DMA");
|
||||
} else if (id->field_valid & 1) {
|
||||
printk(", BUG");
|
||||
}
|
||||
return;
|
||||
bug_dma_off:
|
||||
printk(", BUG DMA OFF");
|
||||
hwif->ide_dma_off_quietly(drive);
|
||||
return;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ide_dma_verbose);
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
|
||||
int __ide_dma_lostirq (ide_drive_t *drive)
|
||||
{
|
||||
printk("%s: DMA interrupt recovery\n", drive->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_lostirq);
|
||||
|
||||
int __ide_dma_timeout (ide_drive_t *drive)
|
||||
{
|
||||
printk(KERN_ERR "%s: timeout waiting for DMA\n", drive->name);
|
||||
if (HWIF(drive)->ide_dma_test_irq(drive))
|
||||
return 0;
|
||||
|
||||
return HWIF(drive)->ide_dma_end(drive);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ide_dma_timeout);
|
||||
|
||||
/*
|
||||
* Needed for allowing full modular support of ide-driver
|
||||
*/
|
||||
int ide_release_dma_engine (ide_hwif_t *hwif)
|
||||
{
|
||||
if (hwif->dmatable_cpu) {
|
||||
pci_free_consistent(hwif->pci_dev,
|
||||
PRD_ENTRIES * PRD_BYTES,
|
||||
hwif->dmatable_cpu,
|
||||
hwif->dmatable_dma);
|
||||
hwif->dmatable_cpu = NULL;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ide_release_iomio_dma (ide_hwif_t *hwif)
|
||||
{
|
||||
if ((hwif->dma_extra) && (hwif->channel == 0))
|
||||
release_region((hwif->dma_base + 16), hwif->dma_extra);
|
||||
release_region(hwif->dma_base, 8);
|
||||
if (hwif->dma_base2)
|
||||
release_region(hwif->dma_base, 8);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Needed for allowing full modular support of ide-driver
|
||||
*/
|
||||
int ide_release_dma (ide_hwif_t *hwif)
|
||||
{
|
||||
if (hwif->mmio == 2)
|
||||
return 1;
|
||||
if (hwif->chipset == ide_etrax100)
|
||||
return 1;
|
||||
|
||||
ide_release_dma_engine(hwif);
|
||||
return ide_release_iomio_dma(hwif);
|
||||
}
|
||||
|
||||
int ide_allocate_dma_engine (ide_hwif_t *hwif)
|
||||
{
|
||||
hwif->dmatable_cpu = pci_alloc_consistent(hwif->pci_dev,
|
||||
PRD_ENTRIES * PRD_BYTES,
|
||||
&hwif->dmatable_dma);
|
||||
|
||||
if (hwif->dmatable_cpu)
|
||||
return 0;
|
||||
|
||||
printk(KERN_ERR "%s: -- Error, unable to allocate%s DMA table(s).\n",
|
||||
(hwif->dmatable_cpu == NULL) ? " CPU" : "",
|
||||
hwif->cds->name);
|
||||
|
||||
ide_release_dma_engine(hwif);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ide_mapped_mmio_dma (ide_hwif_t *hwif, unsigned long base, unsigned int ports)
|
||||
{
|
||||
printk(KERN_INFO " %s: MMIO-DMA ", hwif->name);
|
||||
|
||||
hwif->dma_base = base;
|
||||
if (hwif->cds->extra && hwif->channel == 0)
|
||||
hwif->dma_extra = hwif->cds->extra;
|
||||
|
||||
if(hwif->mate)
|
||||
hwif->dma_master = (hwif->channel) ? hwif->mate->dma_base : base;
|
||||
else
|
||||
hwif->dma_master = base;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ide_iomio_dma (ide_hwif_t *hwif, unsigned long base, unsigned int ports)
|
||||
{
|
||||
printk(KERN_INFO " %s: BM-DMA at 0x%04lx-0x%04lx",
|
||||
hwif->name, base, base + ports - 1);
|
||||
if (!request_region(base, ports, hwif->name)) {
|
||||
printk(" -- Error, ports in use.\n");
|
||||
return 1;
|
||||
}
|
||||
hwif->dma_base = base;
|
||||
if ((hwif->cds->extra) && (hwif->channel == 0)) {
|
||||
request_region(base+16, hwif->cds->extra, hwif->cds->name);
|
||||
hwif->dma_extra = hwif->cds->extra;
|
||||
}
|
||||
|
||||
if(hwif->mate)
|
||||
hwif->dma_master = (hwif->channel) ? hwif->mate->dma_base : base;
|
||||
else
|
||||
hwif->dma_master = base;
|
||||
if (hwif->dma_base2) {
|
||||
if (!request_region(hwif->dma_base2, ports, hwif->name))
|
||||
{
|
||||
printk(" -- Error, secondary ports in use.\n");
|
||||
release_region(base, ports);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
int ide_dma_iobase (ide_hwif_t *hwif, unsigned long base, unsigned int ports)
|
||||
{
|
||||
if (hwif->mmio == 2)
|
||||
return ide_mapped_mmio_dma(hwif, base,ports);
|
||||
BUG_ON(hwif->mmio == 1);
|
||||
return ide_iomio_dma(hwif, base, ports);
|
||||
}
|
||||
|
||||
/*
|
||||
* This can be called for a dynamically installed interface. Don't __init it
|
||||
*/
|
||||
void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_ports)
|
||||
{
|
||||
if (ide_dma_iobase(hwif, dma_base, num_ports))
|
||||
return;
|
||||
|
||||
if (ide_allocate_dma_engine(hwif)) {
|
||||
ide_release_dma(hwif);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(hwif->dma_command))
|
||||
hwif->dma_command = hwif->dma_base;
|
||||
if (!(hwif->dma_vendor1))
|
||||
hwif->dma_vendor1 = (hwif->dma_base + 1);
|
||||
if (!(hwif->dma_status))
|
||||
hwif->dma_status = (hwif->dma_base + 2);
|
||||
if (!(hwif->dma_vendor3))
|
||||
hwif->dma_vendor3 = (hwif->dma_base + 3);
|
||||
if (!(hwif->dma_prdtable))
|
||||
hwif->dma_prdtable = (hwif->dma_base + 4);
|
||||
|
||||
if (!hwif->ide_dma_off_quietly)
|
||||
hwif->ide_dma_off_quietly = &__ide_dma_off_quietly;
|
||||
if (!hwif->ide_dma_host_off)
|
||||
hwif->ide_dma_host_off = &__ide_dma_host_off;
|
||||
if (!hwif->ide_dma_on)
|
||||
hwif->ide_dma_on = &__ide_dma_on;
|
||||
if (!hwif->ide_dma_host_on)
|
||||
hwif->ide_dma_host_on = &__ide_dma_host_on;
|
||||
if (!hwif->ide_dma_check)
|
||||
hwif->ide_dma_check = &__ide_dma_check;
|
||||
if (!hwif->dma_setup)
|
||||
hwif->dma_setup = &ide_dma_setup;
|
||||
if (!hwif->dma_exec_cmd)
|
||||
hwif->dma_exec_cmd = &ide_dma_exec_cmd;
|
||||
if (!hwif->dma_start)
|
||||
hwif->dma_start = &ide_dma_start;
|
||||
if (!hwif->ide_dma_end)
|
||||
hwif->ide_dma_end = &__ide_dma_end;
|
||||
if (!hwif->ide_dma_test_irq)
|
||||
hwif->ide_dma_test_irq = &__ide_dma_test_irq;
|
||||
if (!hwif->ide_dma_timeout)
|
||||
hwif->ide_dma_timeout = &__ide_dma_timeout;
|
||||
if (!hwif->ide_dma_lostirq)
|
||||
hwif->ide_dma_lostirq = &__ide_dma_lostirq;
|
||||
|
||||
if (hwif->chipset != ide_trm290) {
|
||||
u8 dma_stat = hwif->INB(hwif->dma_status);
|
||||
printk(", BIOS settings: %s:%s, %s:%s",
|
||||
hwif->drives[0].name, (dma_stat & 0x20) ? "DMA" : "pio",
|
||||
hwif->drives[1].name, (dma_stat & 0x40) ? "DMA" : "pio");
|
||||
}
|
||||
printk("\n");
|
||||
|
||||
if (!(hwif->dma_master))
|
||||
BUG();
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_setup_dma);
|
||||
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */
|
||||
BIN
extra/linux-2.6.10/drivers/ide/ide-dma.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-dma.o
Normal file
Binary file not shown.
2111
extra/linux-2.6.10/drivers/ide/ide-floppy.c
Normal file
2111
extra/linux-2.6.10/drivers/ide/ide-floppy.c
Normal file
File diff suppressed because it is too large
Load Diff
32
extra/linux-2.6.10/drivers/ide/ide-generic.c
Normal file
32
extra/linux-2.6.10/drivers/ide/ide-generic.c
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* generic/default IDE host driver
|
||||
*
|
||||
* Copyright (C) 2004 Bartlomiej Zolnierkiewicz
|
||||
* This code was split off from ide.c. See it for original copyrights.
|
||||
*
|
||||
* May be copied or modified under the terms of the GNU General Public License.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/ide.h>
|
||||
|
||||
static int __init ide_generic_init(void)
|
||||
{
|
||||
if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
|
||||
ide_get_lock(NULL, NULL); /* for atari only */
|
||||
|
||||
(void)ideprobe_init();
|
||||
|
||||
if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
|
||||
ide_release_lock(); /* for atari only */
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(ide_generic_init);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
BIN
extra/linux-2.6.10/drivers/ide/ide-generic.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-generic.o
Normal file
Binary file not shown.
1613
extra/linux-2.6.10/drivers/ide/ide-io.c
Normal file
1613
extra/linux-2.6.10/drivers/ide/ide-io.c
Normal file
File diff suppressed because it is too large
Load Diff
BIN
extra/linux-2.6.10/drivers/ide/ide-io.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-io.o
Normal file
Binary file not shown.
1270
extra/linux-2.6.10/drivers/ide/ide-iops.c
Normal file
1270
extra/linux-2.6.10/drivers/ide/ide-iops.c
Normal file
File diff suppressed because it is too large
Load Diff
BIN
extra/linux-2.6.10/drivers/ide/ide-iops.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-iops.o
Normal file
Binary file not shown.
495
extra/linux-2.6.10/drivers/ide/ide-lib.c
Normal file
495
extra/linux-2.6.10/drivers/ide/ide-lib.c
Normal file
@@ -0,0 +1,495 @@
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/blkpg.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
/*
|
||||
* IDE library routines. These are plug in code that most
|
||||
* drivers can use but occasionally may be weird enough
|
||||
* to want to do their own thing with
|
||||
*
|
||||
* Add common non I/O op stuff here. Make sure it has proper
|
||||
* kernel-doc function headers or your patch will be rejected
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* ide_xfer_verbose - return IDE mode names
|
||||
* @xfer_rate: rate to name
|
||||
*
|
||||
* Returns a constant string giving the name of the mode
|
||||
* requested.
|
||||
*/
|
||||
|
||||
char *ide_xfer_verbose (u8 xfer_rate)
|
||||
{
|
||||
switch(xfer_rate) {
|
||||
case XFER_UDMA_7: return("UDMA 7");
|
||||
case XFER_UDMA_6: return("UDMA 6");
|
||||
case XFER_UDMA_5: return("UDMA 5");
|
||||
case XFER_UDMA_4: return("UDMA 4");
|
||||
case XFER_UDMA_3: return("UDMA 3");
|
||||
case XFER_UDMA_2: return("UDMA 2");
|
||||
case XFER_UDMA_1: return("UDMA 1");
|
||||
case XFER_UDMA_0: return("UDMA 0");
|
||||
case XFER_MW_DMA_2: return("MW DMA 2");
|
||||
case XFER_MW_DMA_1: return("MW DMA 1");
|
||||
case XFER_MW_DMA_0: return("MW DMA 0");
|
||||
case XFER_SW_DMA_2: return("SW DMA 2");
|
||||
case XFER_SW_DMA_1: return("SW DMA 1");
|
||||
case XFER_SW_DMA_0: return("SW DMA 0");
|
||||
case XFER_PIO_4: return("PIO 4");
|
||||
case XFER_PIO_3: return("PIO 3");
|
||||
case XFER_PIO_2: return("PIO 2");
|
||||
case XFER_PIO_1: return("PIO 1");
|
||||
case XFER_PIO_0: return("PIO 0");
|
||||
case XFER_PIO_SLOW: return("PIO SLOW");
|
||||
default: return("XFER ERROR");
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ide_xfer_verbose);
|
||||
|
||||
/**
|
||||
* ide_dma_speed - compute DMA speed
|
||||
* @drive: drive
|
||||
* @mode; intended mode
|
||||
*
|
||||
* Checks the drive capabilities and returns the speed to use
|
||||
* for the transfer. Returns -1 if the requested mode is unknown
|
||||
* (eg PIO)
|
||||
*/
|
||||
|
||||
u8 ide_dma_speed(ide_drive_t *drive, u8 mode)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 speed = 0;
|
||||
|
||||
if (drive->media != ide_disk && hwif->atapi_dma == 0)
|
||||
return 0;
|
||||
|
||||
switch(mode) {
|
||||
case 0x04:
|
||||
if ((id->dma_ultra & 0x0040) &&
|
||||
(id->dma_ultra & hwif->ultra_mask))
|
||||
{ speed = XFER_UDMA_6; break; }
|
||||
case 0x03:
|
||||
if ((id->dma_ultra & 0x0020) &&
|
||||
(id->dma_ultra & hwif->ultra_mask))
|
||||
{ speed = XFER_UDMA_5; break; }
|
||||
case 0x02:
|
||||
if ((id->dma_ultra & 0x0010) &&
|
||||
(id->dma_ultra & hwif->ultra_mask))
|
||||
{ speed = XFER_UDMA_4; break; }
|
||||
if ((id->dma_ultra & 0x0008) &&
|
||||
(id->dma_ultra & hwif->ultra_mask))
|
||||
{ speed = XFER_UDMA_3; break; }
|
||||
case 0x01:
|
||||
if ((id->dma_ultra & 0x0004) &&
|
||||
(id->dma_ultra & hwif->ultra_mask))
|
||||
{ speed = XFER_UDMA_2; break; }
|
||||
if ((id->dma_ultra & 0x0002) &&
|
||||
(id->dma_ultra & hwif->ultra_mask))
|
||||
{ speed = XFER_UDMA_1; break; }
|
||||
if ((id->dma_ultra & 0x0001) &&
|
||||
(id->dma_ultra & hwif->ultra_mask))
|
||||
{ speed = XFER_UDMA_0; break; }
|
||||
case 0x00:
|
||||
if ((id->dma_mword & 0x0004) &&
|
||||
(id->dma_mword & hwif->mwdma_mask))
|
||||
{ speed = XFER_MW_DMA_2; break; }
|
||||
if ((id->dma_mword & 0x0002) &&
|
||||
(id->dma_mword & hwif->mwdma_mask))
|
||||
{ speed = XFER_MW_DMA_1; break; }
|
||||
if ((id->dma_mword & 0x0001) &&
|
||||
(id->dma_mword & hwif->mwdma_mask))
|
||||
{ speed = XFER_MW_DMA_0; break; }
|
||||
if ((id->dma_1word & 0x0004) &&
|
||||
(id->dma_1word & hwif->swdma_mask))
|
||||
{ speed = XFER_SW_DMA_2; break; }
|
||||
if ((id->dma_1word & 0x0002) &&
|
||||
(id->dma_1word & hwif->swdma_mask))
|
||||
{ speed = XFER_SW_DMA_1; break; }
|
||||
if ((id->dma_1word & 0x0001) &&
|
||||
(id->dma_1word & hwif->swdma_mask))
|
||||
{ speed = XFER_SW_DMA_0; break; }
|
||||
}
|
||||
|
||||
// printk("%s: %s: mode 0x%02x, speed 0x%02x\n",
|
||||
// __FUNCTION__, drive->name, mode, speed);
|
||||
|
||||
return speed;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ide_dma_speed);
|
||||
|
||||
|
||||
/**
|
||||
* ide_rate_filter - return best speed for mode
|
||||
* @mode: modes available
|
||||
* @speed: desired speed
|
||||
*
|
||||
* Given the available DMA/UDMA mode this function returns
|
||||
* the best available speed at or below the speed requested.
|
||||
*/
|
||||
|
||||
u8 ide_rate_filter (u8 mode, u8 speed)
|
||||
{
|
||||
#ifdef CONFIG_BLK_DEV_IDEDMA
|
||||
static u8 speed_max[] = {
|
||||
XFER_MW_DMA_2, XFER_UDMA_2, XFER_UDMA_4,
|
||||
XFER_UDMA_5, XFER_UDMA_6
|
||||
};
|
||||
|
||||
// printk("%s: mode 0x%02x, speed 0x%02x\n", __FUNCTION__, mode, speed);
|
||||
|
||||
/* So that we remember to update this if new modes appear */
|
||||
if (mode > 4)
|
||||
BUG();
|
||||
return min(speed, speed_max[mode]);
|
||||
#else /* !CONFIG_BLK_DEV_IDEDMA */
|
||||
return min(speed, (u8)XFER_PIO_4);
|
||||
#endif /* CONFIG_BLK_DEV_IDEDMA */
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ide_rate_filter);
|
||||
|
||||
int ide_dma_enable (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct hd_driveid *id = drive->id;
|
||||
|
||||
return ((int) ((((id->dma_ultra >> 8) & hwif->ultra_mask) ||
|
||||
((id->dma_mword >> 8) & hwif->mwdma_mask) ||
|
||||
((id->dma_1word >> 8) & hwif->swdma_mask)) ? 1 : 0));
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ide_dma_enable);
|
||||
|
||||
/*
|
||||
* Standard (generic) timings for PIO modes, from ATA2 specification.
|
||||
* These timings are for access to the IDE data port register *only*.
|
||||
* Some drives may specify a mode, while also specifying a different
|
||||
* value for cycle_time (from drive identification data).
|
||||
*/
|
||||
const ide_pio_timings_t ide_pio_timings[6] = {
|
||||
{ 70, 165, 600 }, /* PIO Mode 0 */
|
||||
{ 50, 125, 383 }, /* PIO Mode 1 */
|
||||
{ 30, 100, 240 }, /* PIO Mode 2 */
|
||||
{ 30, 80, 180 }, /* PIO Mode 3 with IORDY */
|
||||
{ 25, 70, 120 }, /* PIO Mode 4 with IORDY */
|
||||
{ 20, 50, 100 } /* PIO Mode 5 with IORDY (nonstandard) */
|
||||
};
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_pio_timings);
|
||||
|
||||
/*
|
||||
* Shared data/functions for determining best PIO mode for an IDE drive.
|
||||
* Most of this stuff originally lived in cmd640.c, and changes to the
|
||||
* ide_pio_blacklist[] table should be made with EXTREME CAUTION to avoid
|
||||
* breaking the fragile cmd640.c support.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Black list. Some drives incorrectly report their maximal PIO mode,
|
||||
* at least in respect to CMD640. Here we keep info on some known drives.
|
||||
*/
|
||||
static struct ide_pio_info {
|
||||
const char *name;
|
||||
int pio;
|
||||
} ide_pio_blacklist [] = {
|
||||
/* { "Conner Peripherals 1275MB - CFS1275A", 4 }, */
|
||||
{ "Conner Peripherals 540MB - CFS540A", 3 },
|
||||
|
||||
{ "WDC AC2700", 3 },
|
||||
{ "WDC AC2540", 3 },
|
||||
{ "WDC AC2420", 3 },
|
||||
{ "WDC AC2340", 3 },
|
||||
{ "WDC AC2250", 0 },
|
||||
{ "WDC AC2200", 0 },
|
||||
{ "WDC AC21200", 4 },
|
||||
{ "WDC AC2120", 0 },
|
||||
{ "WDC AC2850", 3 },
|
||||
{ "WDC AC1270", 3 },
|
||||
{ "WDC AC1170", 1 },
|
||||
{ "WDC AC1210", 1 },
|
||||
{ "WDC AC280", 0 },
|
||||
/* { "WDC AC21000", 4 }, */
|
||||
{ "WDC AC31000", 3 },
|
||||
{ "WDC AC31200", 3 },
|
||||
/* { "WDC AC31600", 4 }, */
|
||||
|
||||
{ "Maxtor 7131 AT", 1 },
|
||||
{ "Maxtor 7171 AT", 1 },
|
||||
{ "Maxtor 7213 AT", 1 },
|
||||
{ "Maxtor 7245 AT", 1 },
|
||||
{ "Maxtor 7345 AT", 1 },
|
||||
{ "Maxtor 7546 AT", 3 },
|
||||
{ "Maxtor 7540 AV", 3 },
|
||||
|
||||
{ "SAMSUNG SHD-3121A", 1 },
|
||||
{ "SAMSUNG SHD-3122A", 1 },
|
||||
{ "SAMSUNG SHD-3172A", 1 },
|
||||
|
||||
/* { "ST51080A", 4 },
|
||||
* { "ST51270A", 4 },
|
||||
* { "ST31220A", 4 },
|
||||
* { "ST31640A", 4 },
|
||||
* { "ST32140A", 4 },
|
||||
* { "ST3780A", 4 },
|
||||
*/
|
||||
{ "ST5660A", 3 },
|
||||
{ "ST3660A", 3 },
|
||||
{ "ST3630A", 3 },
|
||||
{ "ST3655A", 3 },
|
||||
{ "ST3391A", 3 },
|
||||
{ "ST3390A", 1 },
|
||||
{ "ST3600A", 1 },
|
||||
{ "ST3290A", 0 },
|
||||
{ "ST3144A", 0 },
|
||||
{ "ST3491A", 1 }, /* reports 3, should be 1 or 2 (depending on */
|
||||
/* drive) according to Seagates FIND-ATA program */
|
||||
|
||||
{ "QUANTUM ELS127A", 0 },
|
||||
{ "QUANTUM ELS170A", 0 },
|
||||
{ "QUANTUM LPS240A", 0 },
|
||||
{ "QUANTUM LPS210A", 3 },
|
||||
{ "QUANTUM LPS270A", 3 },
|
||||
{ "QUANTUM LPS365A", 3 },
|
||||
{ "QUANTUM LPS540A", 3 },
|
||||
{ "QUANTUM LIGHTNING 540A", 3 },
|
||||
{ "QUANTUM LIGHTNING 730A", 3 },
|
||||
|
||||
{ "QUANTUM FIREBALL_540", 3 }, /* Older Quantum Fireballs don't work */
|
||||
{ "QUANTUM FIREBALL_640", 3 },
|
||||
{ "QUANTUM FIREBALL_1080", 3 },
|
||||
{ "QUANTUM FIREBALL_1280", 3 },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
/**
|
||||
* ide_scan_pio_blacklist - check for a blacklisted drive
|
||||
* @model: Drive model string
|
||||
*
|
||||
* This routine searches the ide_pio_blacklist for an entry
|
||||
* matching the start/whole of the supplied model name.
|
||||
*
|
||||
* Returns -1 if no match found.
|
||||
* Otherwise returns the recommended PIO mode from ide_pio_blacklist[].
|
||||
*/
|
||||
|
||||
static int ide_scan_pio_blacklist (char *model)
|
||||
{
|
||||
struct ide_pio_info *p;
|
||||
|
||||
for (p = ide_pio_blacklist; p->name != NULL; p++) {
|
||||
if (strncmp(p->name, model, strlen(p->name)) == 0)
|
||||
return p->pio;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* ide_get_best_pio_mode - get PIO mode from drive
|
||||
* @driver: drive to consider
|
||||
* @mode_wanted: preferred mode
|
||||
* @max_mode: highest allowed
|
||||
* @d: pio data
|
||||
*
|
||||
* This routine returns the recommended PIO settings for a given drive,
|
||||
* based on the drive->id information and the ide_pio_blacklist[].
|
||||
* This is used by most chipset support modules when "auto-tuning".
|
||||
*
|
||||
* Drive PIO mode auto selection
|
||||
*/
|
||||
|
||||
u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d)
|
||||
{
|
||||
int pio_mode;
|
||||
int cycle_time = 0;
|
||||
int use_iordy = 0;
|
||||
struct hd_driveid* id = drive->id;
|
||||
int overridden = 0;
|
||||
int blacklisted = 0;
|
||||
|
||||
if (mode_wanted != 255) {
|
||||
pio_mode = mode_wanted;
|
||||
} else if (!drive->id) {
|
||||
pio_mode = 0;
|
||||
} else if ((pio_mode = ide_scan_pio_blacklist(id->model)) != -1) {
|
||||
overridden = 1;
|
||||
blacklisted = 1;
|
||||
use_iordy = (pio_mode > 2);
|
||||
} else {
|
||||
pio_mode = id->tPIO;
|
||||
if (pio_mode > 2) { /* 2 is maximum allowed tPIO value */
|
||||
pio_mode = 2;
|
||||
overridden = 1;
|
||||
}
|
||||
if (id->field_valid & 2) { /* drive implements ATA2? */
|
||||
if (id->capability & 8) { /* drive supports use_iordy? */
|
||||
use_iordy = 1;
|
||||
cycle_time = id->eide_pio_iordy;
|
||||
if (id->eide_pio_modes & 7) {
|
||||
overridden = 0;
|
||||
if (id->eide_pio_modes & 4)
|
||||
pio_mode = 5;
|
||||
else if (id->eide_pio_modes & 2)
|
||||
pio_mode = 4;
|
||||
else
|
||||
pio_mode = 3;
|
||||
}
|
||||
} else {
|
||||
cycle_time = id->eide_pio;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (drive->id->major_rev_num & 0x0004) printk("ATA-2 ");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Conservative "downgrade" for all pre-ATA2 drives
|
||||
*/
|
||||
if (pio_mode && pio_mode < 4) {
|
||||
pio_mode--;
|
||||
overridden = 1;
|
||||
#if 0
|
||||
use_iordy = (pio_mode > 2);
|
||||
#endif
|
||||
if (cycle_time && cycle_time < ide_pio_timings[pio_mode].cycle_time)
|
||||
cycle_time = 0; /* use standard timing */
|
||||
}
|
||||
}
|
||||
if (pio_mode > max_mode) {
|
||||
pio_mode = max_mode;
|
||||
cycle_time = 0;
|
||||
}
|
||||
if (d) {
|
||||
d->pio_mode = pio_mode;
|
||||
d->cycle_time = cycle_time ? cycle_time : ide_pio_timings[pio_mode].cycle_time;
|
||||
d->use_iordy = use_iordy;
|
||||
d->overridden = overridden;
|
||||
d->blacklisted = blacklisted;
|
||||
}
|
||||
return pio_mode;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_get_best_pio_mode);
|
||||
|
||||
/**
|
||||
* ide_toggle_bounce - handle bounce buffering
|
||||
* @drive: drive to update
|
||||
* @on: on/off boolean
|
||||
*
|
||||
* Enable or disable bounce buffering for the device. Drives move
|
||||
* between PIO and DMA and that changes the rules we need.
|
||||
*/
|
||||
|
||||
void ide_toggle_bounce(ide_drive_t *drive, int on)
|
||||
{
|
||||
u64 addr = BLK_BOUNCE_HIGH; /* dma64_addr_t */
|
||||
|
||||
if (on && drive->media == ide_disk) {
|
||||
if (!PCI_DMA_BUS_IS_PHYS)
|
||||
addr = BLK_BOUNCE_ANY;
|
||||
else if (HWIF(drive)->pci_dev)
|
||||
addr = HWIF(drive)->pci_dev->dma_mask;
|
||||
}
|
||||
|
||||
if (drive->queue)
|
||||
blk_queue_bounce_limit(drive->queue, addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* ide_set_xfer_rate - set transfer rate
|
||||
* @drive: drive to set
|
||||
* @speed: speed to attempt to set
|
||||
*
|
||||
* General helper for setting the speed of an IDE device. This
|
||||
* function knows about user enforced limits from the configuration
|
||||
* which speedproc() does not. High level drivers should never
|
||||
* invoke speedproc() directly.
|
||||
*/
|
||||
|
||||
int ide_set_xfer_rate(ide_drive_t *drive, u8 rate)
|
||||
{
|
||||
#ifndef CONFIG_BLK_DEV_IDEDMA
|
||||
rate = min(rate, (u8) XFER_PIO_4);
|
||||
#endif
|
||||
if(HWIF(drive)->speedproc)
|
||||
return HWIF(drive)->speedproc(drive, rate);
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_set_xfer_rate);
|
||||
|
||||
/**
|
||||
* ide_dump_atapi_status - print human readable atapi status
|
||||
* @drive: drive that status applies to
|
||||
* @msg: text message to print
|
||||
* @stat: status byte to decode
|
||||
*
|
||||
* Error reporting, in human readable form (luxurious, but a memory hog).
|
||||
*/
|
||||
byte ide_dump_atapi_status (ide_drive_t *drive, const char *msg, byte stat)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
atapi_status_t status;
|
||||
atapi_error_t error;
|
||||
|
||||
status.all = stat;
|
||||
local_irq_set(flags);
|
||||
printk("%s: %s: status=0x%02x", drive->name, msg, stat);
|
||||
printk(" { ");
|
||||
if (status.b.bsy)
|
||||
printk("Busy ");
|
||||
else {
|
||||
if (status.b.drdy) printk("DriveReady ");
|
||||
if (status.b.df) printk("DeviceFault ");
|
||||
if (status.b.dsc) printk("SeekComplete ");
|
||||
if (status.b.drq) printk("DataRequest ");
|
||||
if (status.b.corr) printk("CorrectedError ");
|
||||
if (status.b.idx) printk("Index ");
|
||||
if (status.b.check) printk("Error ");
|
||||
}
|
||||
printk("}");
|
||||
printk("\n");
|
||||
if ((status.all & (status.b.bsy|status.b.check)) == status.b.check) {
|
||||
error.all = HWIF(drive)->INB(IDE_ERROR_REG);
|
||||
printk("%s: %s: error=0x%02x", drive->name, msg, error.all);
|
||||
if (error.b.ili) printk("IllegalLengthIndication ");
|
||||
if (error.b.eom) printk("EndOfMedia ");
|
||||
if (error.b.abrt) printk("Aborted Command ");
|
||||
if (error.b.mcr) printk("MediaChangeRequested ");
|
||||
if (error.b.sense_key) printk("LastFailedSense 0x%02x ",
|
||||
error.b.sense_key);
|
||||
printk("\n");
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
return error.all;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ide_dump_atapi_status);
|
||||
BIN
extra/linux-2.6.10/drivers/ide/ide-lib.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-lib.o
Normal file
Binary file not shown.
75
extra/linux-2.6.10/drivers/ide/ide-pnp.c
Normal file
75
extra/linux-2.6.10/drivers/ide/ide-pnp.c
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* linux/drivers/ide/ide-pnp.c
|
||||
*
|
||||
* This file provides autodetection for ISA PnP IDE interfaces.
|
||||
* It was tested with "ESS ES1868 Plug and Play AudioDrive" IDE interface.
|
||||
*
|
||||
* Copyright (C) 2000 Andrey Panin <pazke@donpac.ru>
|
||||
*
|
||||
* 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, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* (for example /usr/src/linux/COPYING); if not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/pnp.h>
|
||||
#include <linux/ide.h>
|
||||
|
||||
/* Add your devices here :)) */
|
||||
struct pnp_device_id idepnp_devices[] = {
|
||||
/* Generic ESDI/IDE/ATA compatible hard disk controller */
|
||||
{.id = "PNP0600", .driver_data = 0},
|
||||
{.id = ""}
|
||||
};
|
||||
|
||||
static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id)
|
||||
{
|
||||
hw_regs_t hw;
|
||||
ide_hwif_t *hwif;
|
||||
int index;
|
||||
|
||||
if (!(pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && pnp_irq_valid(dev, 0)))
|
||||
return -1;
|
||||
|
||||
memset(&hw, 0, sizeof(hw));
|
||||
ide_std_init_ports(&hw, pnp_port_start(dev, 0),
|
||||
pnp_port_start(dev, 1));
|
||||
hw.irq = pnp_irq(dev, 0);
|
||||
hw.dma = NO_DMA;
|
||||
|
||||
index = ide_register_hw(&hw, &hwif);
|
||||
|
||||
if (index != -1) {
|
||||
printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
|
||||
pnp_set_drvdata(dev,hwif);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void idepnp_remove(struct pnp_dev * dev)
|
||||
{
|
||||
ide_hwif_t *hwif = pnp_get_drvdata(dev);
|
||||
if (hwif) {
|
||||
ide_unregister(hwif->index);
|
||||
} else
|
||||
printk(KERN_ERR "idepnp: Unable to remove device, please report.\n");
|
||||
}
|
||||
|
||||
static struct pnp_driver idepnp_driver = {
|
||||
.name = "ide",
|
||||
.id_table = idepnp_devices,
|
||||
.probe = idepnp_probe,
|
||||
.remove = idepnp_remove,
|
||||
};
|
||||
|
||||
void __init pnpide_init(void)
|
||||
{
|
||||
pnp_register_driver(&idepnp_driver);
|
||||
}
|
||||
1352
extra/linux-2.6.10/drivers/ide/ide-probe.c
Normal file
1352
extra/linux-2.6.10/drivers/ide/ide-probe.c
Normal file
File diff suppressed because it is too large
Load Diff
BIN
extra/linux-2.6.10/drivers/ide/ide-probe.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-probe.o
Normal file
Binary file not shown.
540
extra/linux-2.6.10/drivers/ide/ide-proc.c
Normal file
540
extra/linux-2.6.10/drivers/ide/ide-proc.c
Normal file
@@ -0,0 +1,540 @@
|
||||
/*
|
||||
* linux/drivers/ide/ide-proc.c Version 1.05 Mar 05, 2003
|
||||
*
|
||||
* Copyright (C) 1997-1998 Mark Lord
|
||||
* Copyright (C) 2003 Red Hat <alan@redhat.com>
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is the /proc/ide/ filesystem implementation.
|
||||
*
|
||||
* Drive/Driver settings can be retrieved by reading the drive's
|
||||
* "settings" files. e.g. "cat /proc/ide0/hda/settings"
|
||||
* To write a new value "val" into a specific setting "name", use:
|
||||
* echo "name:val" >/proc/ide/ide0/hda/settings
|
||||
*
|
||||
* Also useful, "cat /proc/ide0/hda/[identify, smart_values,
|
||||
* smart_thresholds, capabilities]" will issue an IDENTIFY /
|
||||
* PACKET_IDENTIFY / SMART_READ_VALUES / SMART_READ_THRESHOLDS /
|
||||
* SENSE CAPABILITIES command to /dev/hda, and then dump out the
|
||||
* returned data as 256 16-bit words. The "hdparm" utility will
|
||||
* be updated someday soon to use this mechanism.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/seq_file.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
static int proc_ide_read_imodel
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_hwif_t *hwif = (ide_hwif_t *) data;
|
||||
int len;
|
||||
const char *name;
|
||||
|
||||
/*
|
||||
* Neither ide_unknown nor ide_forced should be set at this point.
|
||||
*/
|
||||
switch (hwif->chipset) {
|
||||
case ide_generic: name = "generic"; break;
|
||||
case ide_pci: name = "pci"; break;
|
||||
case ide_cmd640: name = "cmd640"; break;
|
||||
case ide_dtc2278: name = "dtc2278"; break;
|
||||
case ide_ali14xx: name = "ali14xx"; break;
|
||||
case ide_qd65xx: name = "qd65xx"; break;
|
||||
case ide_umc8672: name = "umc8672"; break;
|
||||
case ide_ht6560b: name = "ht6560b"; break;
|
||||
case ide_rz1000: name = "rz1000"; break;
|
||||
case ide_trm290: name = "trm290"; break;
|
||||
case ide_cmd646: name = "cmd646"; break;
|
||||
case ide_cy82c693: name = "cy82c693"; break;
|
||||
case ide_4drives: name = "4drives"; break;
|
||||
case ide_pmac: name = "mac-io"; break;
|
||||
default: name = "(unknown)"; break;
|
||||
}
|
||||
len = sprintf(page, "%s\n", name);
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
static int proc_ide_read_mate
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_hwif_t *hwif = (ide_hwif_t *) data;
|
||||
int len;
|
||||
|
||||
if (hwif && hwif->mate && hwif->mate->present)
|
||||
len = sprintf(page, "%s\n", hwif->mate->name);
|
||||
else
|
||||
len = sprintf(page, "(none)\n");
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
static int proc_ide_read_channel
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_hwif_t *hwif = (ide_hwif_t *) data;
|
||||
int len;
|
||||
|
||||
page[0] = hwif->channel ? '1' : '0';
|
||||
page[1] = '\n';
|
||||
len = 2;
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
static int proc_ide_read_identify
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *)data;
|
||||
int len = 0, i = 0;
|
||||
int err = 0;
|
||||
|
||||
len = sprintf(page, "\n");
|
||||
|
||||
if (drive) {
|
||||
unsigned short *val = (unsigned short *) page;
|
||||
|
||||
BUG_ON(!drive->driver);
|
||||
|
||||
err = taskfile_lib_get_identify(drive, page);
|
||||
if (!err) {
|
||||
char *out = ((char *)page) + (SECTOR_WORDS * 4);
|
||||
page = out;
|
||||
do {
|
||||
out += sprintf(out, "%04x%c",
|
||||
le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
|
||||
val += 1;
|
||||
} while (i < (SECTOR_WORDS * 2));
|
||||
len = out - page;
|
||||
}
|
||||
}
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
static void proc_ide_settings_warn(void)
|
||||
{
|
||||
static int warned = 0;
|
||||
|
||||
if (warned)
|
||||
return;
|
||||
|
||||
printk(KERN_WARNING "Warning: /proc/ide/hd?/settings interface is "
|
||||
"obsolete, and will be removed soon!\n");
|
||||
warned = 1;
|
||||
}
|
||||
|
||||
static int proc_ide_read_settings
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *) data;
|
||||
ide_settings_t *setting = (ide_settings_t *) drive->settings;
|
||||
char *out = page;
|
||||
int len, rc, mul_factor, div_factor;
|
||||
|
||||
proc_ide_settings_warn();
|
||||
|
||||
down(&ide_setting_sem);
|
||||
out += sprintf(out, "name\t\t\tvalue\t\tmin\t\tmax\t\tmode\n");
|
||||
out += sprintf(out, "----\t\t\t-----\t\t---\t\t---\t\t----\n");
|
||||
while(setting) {
|
||||
mul_factor = setting->mul_factor;
|
||||
div_factor = setting->div_factor;
|
||||
out += sprintf(out, "%-24s", setting->name);
|
||||
if ((rc = ide_read_setting(drive, setting)) >= 0)
|
||||
out += sprintf(out, "%-16d", rc * mul_factor / div_factor);
|
||||
else
|
||||
out += sprintf(out, "%-16s", "write-only");
|
||||
out += sprintf(out, "%-16d%-16d", (setting->min * mul_factor + div_factor - 1) / div_factor, setting->max * mul_factor / div_factor);
|
||||
if (setting->rw & SETTING_READ)
|
||||
out += sprintf(out, "r");
|
||||
if (setting->rw & SETTING_WRITE)
|
||||
out += sprintf(out, "w");
|
||||
out += sprintf(out, "\n");
|
||||
setting = setting->next;
|
||||
}
|
||||
len = out - page;
|
||||
up(&ide_setting_sem);
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
#define MAX_LEN 30
|
||||
|
||||
static int proc_ide_write_settings(struct file *file, const char __user *buffer,
|
||||
unsigned long count, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *) data;
|
||||
char name[MAX_LEN + 1];
|
||||
int for_real = 0;
|
||||
unsigned long n;
|
||||
ide_settings_t *setting;
|
||||
char *buf, *s;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EACCES;
|
||||
|
||||
proc_ide_settings_warn();
|
||||
|
||||
if (count >= PAGE_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
s = buf = (char *)__get_free_page(GFP_USER);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
if (copy_from_user(buf, buffer, count)) {
|
||||
free_page((unsigned long)buf);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
buf[count] = '\0';
|
||||
|
||||
/*
|
||||
* Skip over leading whitespace
|
||||
*/
|
||||
while (count && isspace(*s)) {
|
||||
--count;
|
||||
++s;
|
||||
}
|
||||
/*
|
||||
* Do one full pass to verify all parameters,
|
||||
* then do another to actually write the new settings.
|
||||
*/
|
||||
do {
|
||||
char *p = s;
|
||||
n = count;
|
||||
while (n > 0) {
|
||||
unsigned val;
|
||||
char *q = p;
|
||||
|
||||
while (n > 0 && *p != ':') {
|
||||
--n;
|
||||
p++;
|
||||
}
|
||||
if (*p != ':')
|
||||
goto parse_error;
|
||||
if (p - q > MAX_LEN)
|
||||
goto parse_error;
|
||||
memcpy(name, q, p - q);
|
||||
name[p - q] = 0;
|
||||
|
||||
if (n > 0) {
|
||||
--n;
|
||||
p++;
|
||||
} else
|
||||
goto parse_error;
|
||||
|
||||
val = simple_strtoul(p, &q, 10);
|
||||
n -= q - p;
|
||||
p = q;
|
||||
if (n > 0 && !isspace(*p))
|
||||
goto parse_error;
|
||||
while (n > 0 && isspace(*p)) {
|
||||
--n;
|
||||
++p;
|
||||
}
|
||||
|
||||
down(&ide_setting_sem);
|
||||
setting = ide_find_setting_by_name(drive, name);
|
||||
if (!setting)
|
||||
{
|
||||
up(&ide_setting_sem);
|
||||
goto parse_error;
|
||||
}
|
||||
if (for_real)
|
||||
ide_write_setting(drive, setting, val * setting->div_factor / setting->mul_factor);
|
||||
up(&ide_setting_sem);
|
||||
}
|
||||
} while (!for_real++);
|
||||
free_page((unsigned long)buf);
|
||||
return count;
|
||||
parse_error:
|
||||
free_page((unsigned long)buf);
|
||||
printk("proc_ide_write_settings(): parse error\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
int proc_ide_read_capacity
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *) data;
|
||||
int len;
|
||||
|
||||
len = sprintf(page,"%llu\n",
|
||||
(long long) (DRIVER(drive)->capacity(drive)));
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
int proc_ide_read_geometry
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *) data;
|
||||
char *out = page;
|
||||
int len;
|
||||
|
||||
out += sprintf(out,"physical %d/%d/%d\n",
|
||||
drive->cyl, drive->head, drive->sect);
|
||||
out += sprintf(out,"logical %d/%d/%d\n",
|
||||
drive->bios_cyl, drive->bios_head, drive->bios_sect);
|
||||
|
||||
len = out - page;
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(proc_ide_read_geometry);
|
||||
|
||||
static int proc_ide_read_dmodel
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *) data;
|
||||
struct hd_driveid *id = drive->id;
|
||||
int len;
|
||||
|
||||
len = sprintf(page, "%.40s\n",
|
||||
(id && id->model[0]) ? (char *)id->model : "(none)");
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
static int proc_ide_read_driver
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *) data;
|
||||
ide_driver_t *driver = drive->driver;
|
||||
int len;
|
||||
|
||||
len = sprintf(page, "%s version %s\n",
|
||||
driver->name, driver->version);
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
static int proc_ide_write_driver
|
||||
(struct file *file, const char __user *buffer, unsigned long count, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *) data;
|
||||
char name[32];
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EACCES;
|
||||
if (count > 31)
|
||||
count = 31;
|
||||
if (copy_from_user(name, buffer, count))
|
||||
return -EFAULT;
|
||||
name[count] = '\0';
|
||||
if (ide_replace_subdriver(drive, name))
|
||||
return -EINVAL;
|
||||
return count;
|
||||
}
|
||||
|
||||
static int proc_ide_read_media
|
||||
(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||
{
|
||||
ide_drive_t *drive = (ide_drive_t *) data;
|
||||
const char *media;
|
||||
int len;
|
||||
|
||||
switch (drive->media) {
|
||||
case ide_disk: media = "disk\n";
|
||||
break;
|
||||
case ide_cdrom: media = "cdrom\n";
|
||||
break;
|
||||
case ide_tape: media = "tape\n";
|
||||
break;
|
||||
case ide_floppy:media = "floppy\n";
|
||||
break;
|
||||
default: media = "UNKNOWN\n";
|
||||
break;
|
||||
}
|
||||
strcpy(page,media);
|
||||
len = strlen(media);
|
||||
PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
|
||||
}
|
||||
|
||||
static ide_proc_entry_t generic_drive_entries[] = {
|
||||
{ "driver", S_IFREG|S_IRUGO, proc_ide_read_driver, proc_ide_write_driver },
|
||||
{ "identify", S_IFREG|S_IRUSR, proc_ide_read_identify, NULL },
|
||||
{ "media", S_IFREG|S_IRUGO, proc_ide_read_media, NULL },
|
||||
{ "model", S_IFREG|S_IRUGO, proc_ide_read_dmodel, NULL },
|
||||
{ "settings", S_IFREG|S_IRUSR|S_IWUSR,proc_ide_read_settings, proc_ide_write_settings },
|
||||
{ NULL, 0, NULL, NULL }
|
||||
};
|
||||
|
||||
void ide_add_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p, void *data)
|
||||
{
|
||||
struct proc_dir_entry *ent;
|
||||
|
||||
if (!dir || !p)
|
||||
return;
|
||||
while (p->name != NULL) {
|
||||
ent = create_proc_entry(p->name, p->mode, dir);
|
||||
if (!ent) return;
|
||||
ent->nlink = 1;
|
||||
ent->data = data;
|
||||
ent->read_proc = p->read_proc;
|
||||
ent->write_proc = p->write_proc;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
void ide_remove_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p)
|
||||
{
|
||||
if (!dir || !p)
|
||||
return;
|
||||
while (p->name != NULL) {
|
||||
remove_proc_entry(p->name, dir);
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
static void create_proc_ide_drives(ide_hwif_t *hwif)
|
||||
{
|
||||
int d;
|
||||
struct proc_dir_entry *ent;
|
||||
struct proc_dir_entry *parent = hwif->proc;
|
||||
char name[64];
|
||||
|
||||
for (d = 0; d < MAX_DRIVES; d++) {
|
||||
ide_drive_t *drive = &hwif->drives[d];
|
||||
|
||||
if (!drive->present)
|
||||
continue;
|
||||
if (drive->proc)
|
||||
continue;
|
||||
|
||||
drive->proc = proc_mkdir(drive->name, parent);
|
||||
if (drive->proc)
|
||||
ide_add_proc_entries(drive->proc, generic_drive_entries, drive);
|
||||
sprintf(name,"ide%d/%s", (drive->name[2]-'a')/2, drive->name);
|
||||
ent = proc_symlink(drive->name, proc_ide_root, name);
|
||||
if (!ent) return;
|
||||
}
|
||||
}
|
||||
|
||||
static void destroy_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive)
|
||||
{
|
||||
ide_driver_t *driver = drive->driver;
|
||||
|
||||
if (drive->proc) {
|
||||
ide_remove_proc_entries(drive->proc, driver->proc);
|
||||
ide_remove_proc_entries(drive->proc, generic_drive_entries);
|
||||
remove_proc_entry(drive->name, proc_ide_root);
|
||||
remove_proc_entry(drive->name, hwif->proc);
|
||||
drive->proc = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void destroy_proc_ide_drives(ide_hwif_t *hwif)
|
||||
{
|
||||
int d;
|
||||
|
||||
for (d = 0; d < MAX_DRIVES; d++) {
|
||||
ide_drive_t *drive = &hwif->drives[d];
|
||||
if (drive->proc)
|
||||
destroy_proc_ide_device(hwif, drive);
|
||||
}
|
||||
}
|
||||
|
||||
static ide_proc_entry_t hwif_entries[] = {
|
||||
{ "channel", S_IFREG|S_IRUGO, proc_ide_read_channel, NULL },
|
||||
{ "mate", S_IFREG|S_IRUGO, proc_ide_read_mate, NULL },
|
||||
{ "model", S_IFREG|S_IRUGO, proc_ide_read_imodel, NULL },
|
||||
{ NULL, 0, NULL, NULL }
|
||||
};
|
||||
|
||||
void create_proc_ide_interfaces(void)
|
||||
{
|
||||
int h;
|
||||
|
||||
for (h = 0; h < MAX_HWIFS; h++) {
|
||||
ide_hwif_t *hwif = &ide_hwifs[h];
|
||||
|
||||
if (!hwif->present)
|
||||
continue;
|
||||
if (!hwif->proc) {
|
||||
hwif->proc = proc_mkdir(hwif->name, proc_ide_root);
|
||||
if (!hwif->proc)
|
||||
return;
|
||||
ide_add_proc_entries(hwif->proc, hwif_entries, hwif);
|
||||
}
|
||||
create_proc_ide_drives(hwif);
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(create_proc_ide_interfaces);
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_IDEPCI
|
||||
void ide_pci_create_host_proc(const char *name, get_info_t *get_info)
|
||||
{
|
||||
create_proc_info_entry(name, 0, proc_ide_root, get_info);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(ide_pci_create_host_proc);
|
||||
#endif
|
||||
|
||||
void destroy_proc_ide_interface(ide_hwif_t *hwif)
|
||||
{
|
||||
if (hwif->proc) {
|
||||
destroy_proc_ide_drives(hwif);
|
||||
ide_remove_proc_entries(hwif->proc, hwif_entries);
|
||||
remove_proc_entry(hwif->name, proc_ide_root);
|
||||
hwif->proc = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void destroy_proc_ide_interfaces(void)
|
||||
{
|
||||
int h;
|
||||
|
||||
for (h = 0; h < MAX_HWIFS; h++) {
|
||||
ide_hwif_t *hwif = &ide_hwifs[h];
|
||||
#if 0
|
||||
if (!hwif->present)
|
||||
continue;
|
||||
#endif
|
||||
destroy_proc_ide_interface(hwif);
|
||||
}
|
||||
}
|
||||
|
||||
extern struct seq_operations ide_drivers_op;
|
||||
static int ide_drivers_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open(file, &ide_drivers_op);
|
||||
}
|
||||
static struct file_operations ide_drivers_operations = {
|
||||
.open = ide_drivers_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release,
|
||||
};
|
||||
|
||||
void proc_ide_create(void)
|
||||
{
|
||||
struct proc_dir_entry *entry;
|
||||
|
||||
if (!proc_ide_root)
|
||||
return;
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
entry = create_proc_entry("drivers", 0, proc_ide_root);
|
||||
if (entry)
|
||||
entry->proc_fops = &ide_drivers_operations;
|
||||
}
|
||||
|
||||
void proc_ide_destroy(void)
|
||||
{
|
||||
remove_proc_entry("ide/drivers", proc_ide_root);
|
||||
destroy_proc_ide_interfaces();
|
||||
remove_proc_entry("ide", NULL);
|
||||
}
|
||||
BIN
extra/linux-2.6.10/drivers/ide/ide-proc.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-proc.o
Normal file
Binary file not shown.
4821
extra/linux-2.6.10/drivers/ide/ide-tape.c
Normal file
4821
extra/linux-2.6.10/drivers/ide/ide-tape.c
Normal file
File diff suppressed because it is too large
Load Diff
885
extra/linux-2.6.10/drivers/ide/ide-taskfile.c
Normal file
885
extra/linux-2.6.10/drivers/ide/ide-taskfile.c
Normal file
@@ -0,0 +1,885 @@
|
||||
/*
|
||||
* linux/drivers/ide/ide-taskfile.c Version 0.38 March 05, 2003
|
||||
*
|
||||
* Copyright (C) 2000-2002 Michael Cornwell <cornwell@acm.org>
|
||||
* Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org>
|
||||
* Copyright (C) 2001-2002 Klaus Smolin
|
||||
* IBM Storage Technology Division
|
||||
* Copyright (C) 2003-2004 Bartlomiej Zolnierkiewicz
|
||||
*
|
||||
* The big the bad and the ugly.
|
||||
*
|
||||
* Problems to be fixed because of BH interface or the lack therefore.
|
||||
*
|
||||
* Fill me in stupid !!!
|
||||
*
|
||||
* HOST:
|
||||
* General refers to the Controller and Driver "pair".
|
||||
* DATA HANDLER:
|
||||
* Under the context of Linux it generally refers to an interrupt handler.
|
||||
* However, it correctly describes the 'HOST'
|
||||
* DATA BLOCK:
|
||||
* The amount of data needed to be transfered as predefined in the
|
||||
* setup of the device.
|
||||
* STORAGE ATOMIC:
|
||||
* The 'DATA BLOCK' associated to the 'DATA HANDLER', and can be as
|
||||
* small as a single sector or as large as the entire command block
|
||||
* request.
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/blkpg.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#define DEBUG_TASKFILE 0 /* unset when fixed */
|
||||
|
||||
static void ata_bswap_data (void *buffer, int wcount)
|
||||
{
|
||||
u16 *p = buffer;
|
||||
|
||||
while (wcount--) {
|
||||
*p = *p << 8 | *p >> 8; p++;
|
||||
*p = *p << 8 | *p >> 8; p++;
|
||||
}
|
||||
}
|
||||
|
||||
static void taskfile_input_data(ide_drive_t *drive, void *buffer, u32 wcount)
|
||||
{
|
||||
HWIF(drive)->ata_input_data(drive, buffer, wcount);
|
||||
if (drive->bswap)
|
||||
ata_bswap_data(buffer, wcount);
|
||||
}
|
||||
|
||||
static void taskfile_output_data(ide_drive_t *drive, void *buffer, u32 wcount)
|
||||
{
|
||||
if (drive->bswap) {
|
||||
ata_bswap_data(buffer, wcount);
|
||||
HWIF(drive)->ata_output_data(drive, buffer, wcount);
|
||||
ata_bswap_data(buffer, wcount);
|
||||
} else {
|
||||
HWIF(drive)->ata_output_data(drive, buffer, wcount);
|
||||
}
|
||||
}
|
||||
|
||||
int taskfile_lib_get_identify (ide_drive_t *drive, u8 *buf)
|
||||
{
|
||||
ide_task_t args;
|
||||
memset(&args, 0, sizeof(ide_task_t));
|
||||
args.tfRegister[IDE_NSECTOR_OFFSET] = 0x01;
|
||||
if (drive->media == ide_disk)
|
||||
args.tfRegister[IDE_COMMAND_OFFSET] = WIN_IDENTIFY;
|
||||
else
|
||||
args.tfRegister[IDE_COMMAND_OFFSET] = WIN_PIDENTIFY;
|
||||
args.command_type = IDE_DRIVE_TASK_IN;
|
||||
args.data_phase = TASKFILE_IN;
|
||||
args.handler = &task_in_intr;
|
||||
return ide_raw_taskfile(drive, &args, buf);
|
||||
}
|
||||
|
||||
ide_startstop_t do_rw_taskfile (ide_drive_t *drive, ide_task_t *task)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
task_struct_t *taskfile = (task_struct_t *) task->tfRegister;
|
||||
hob_struct_t *hobfile = (hob_struct_t *) task->hobRegister;
|
||||
u8 HIHI = (drive->addressing == 1) ? 0xE0 : 0xEF;
|
||||
|
||||
/* ALL Command Block Executions SHALL clear nIEN, unless otherwise */
|
||||
if (IDE_CONTROL_REG) {
|
||||
/* clear nIEN */
|
||||
hwif->OUTB(drive->ctl, IDE_CONTROL_REG);
|
||||
}
|
||||
SELECT_MASK(drive, 0);
|
||||
|
||||
if (drive->addressing == 1) {
|
||||
hwif->OUTB(hobfile->feature, IDE_FEATURE_REG);
|
||||
hwif->OUTB(hobfile->sector_count, IDE_NSECTOR_REG);
|
||||
hwif->OUTB(hobfile->sector_number, IDE_SECTOR_REG);
|
||||
hwif->OUTB(hobfile->low_cylinder, IDE_LCYL_REG);
|
||||
hwif->OUTB(hobfile->high_cylinder, IDE_HCYL_REG);
|
||||
}
|
||||
|
||||
hwif->OUTB(taskfile->feature, IDE_FEATURE_REG);
|
||||
hwif->OUTB(taskfile->sector_count, IDE_NSECTOR_REG);
|
||||
hwif->OUTB(taskfile->sector_number, IDE_SECTOR_REG);
|
||||
hwif->OUTB(taskfile->low_cylinder, IDE_LCYL_REG);
|
||||
hwif->OUTB(taskfile->high_cylinder, IDE_HCYL_REG);
|
||||
|
||||
hwif->OUTB((taskfile->device_head & HIHI) | drive->select.all, IDE_SELECT_REG);
|
||||
|
||||
if (task->handler != NULL) {
|
||||
if (task->prehandler != NULL) {
|
||||
hwif->OUTBSYNC(drive, taskfile->command, IDE_COMMAND_REG);
|
||||
ndelay(400); /* FIXME */
|
||||
return task->prehandler(drive, task->rq);
|
||||
}
|
||||
ide_execute_command(drive, taskfile->command, task->handler, WAIT_WORSTCASE, NULL);
|
||||
return ide_started;
|
||||
}
|
||||
|
||||
if (!drive->using_dma)
|
||||
return ide_stopped;
|
||||
|
||||
switch (taskfile->command) {
|
||||
case WIN_WRITEDMA_ONCE:
|
||||
case WIN_WRITEDMA:
|
||||
case WIN_WRITEDMA_EXT:
|
||||
case WIN_READDMA_ONCE:
|
||||
case WIN_READDMA:
|
||||
case WIN_READDMA_EXT:
|
||||
case WIN_IDENTIFY_DMA:
|
||||
if (!hwif->dma_setup(drive)) {
|
||||
hwif->dma_exec_cmd(drive, taskfile->command);
|
||||
hwif->dma_start(drive);
|
||||
return ide_started;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (task->handler == NULL)
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(do_rw_taskfile);
|
||||
|
||||
/*
|
||||
* set_multmode_intr() is invoked on completion of a WIN_SETMULT cmd.
|
||||
*/
|
||||
ide_startstop_t set_multmode_intr (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 stat;
|
||||
|
||||
if (OK_STAT(stat = hwif->INB(IDE_STATUS_REG),READY_STAT,BAD_STAT)) {
|
||||
drive->mult_count = drive->mult_req;
|
||||
} else {
|
||||
drive->mult_req = drive->mult_count = 0;
|
||||
drive->special.b.recalibrate = 1;
|
||||
(void) ide_dump_status(drive, "set_multmode", stat);
|
||||
}
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(set_multmode_intr);
|
||||
|
||||
/*
|
||||
* set_geometry_intr() is invoked on completion of a WIN_SPECIFY cmd.
|
||||
*/
|
||||
ide_startstop_t set_geometry_intr (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
int retries = 5;
|
||||
u8 stat;
|
||||
|
||||
while (((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT) && retries--)
|
||||
udelay(10);
|
||||
|
||||
if (OK_STAT(stat, READY_STAT, BAD_STAT))
|
||||
return ide_stopped;
|
||||
|
||||
if (stat & (ERR_STAT|DRQ_STAT))
|
||||
return DRIVER(drive)->error(drive, "set_geometry_intr", stat);
|
||||
|
||||
if (HWGROUP(drive)->handler != NULL)
|
||||
BUG();
|
||||
ide_set_handler(drive, &set_geometry_intr, WAIT_WORSTCASE, NULL);
|
||||
return ide_started;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(set_geometry_intr);
|
||||
|
||||
/*
|
||||
* recal_intr() is invoked on completion of a WIN_RESTORE (recalibrate) cmd.
|
||||
*/
|
||||
ide_startstop_t recal_intr (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 stat;
|
||||
|
||||
if (!OK_STAT(stat = hwif->INB(IDE_STATUS_REG), READY_STAT, BAD_STAT))
|
||||
return DRIVER(drive)->error(drive, "recal_intr", stat);
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(recal_intr);
|
||||
|
||||
/*
|
||||
* Handler for commands without a data phase
|
||||
*/
|
||||
ide_startstop_t task_no_data_intr (ide_drive_t *drive)
|
||||
{
|
||||
ide_task_t *args = HWGROUP(drive)->rq->special;
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 stat;
|
||||
|
||||
local_irq_enable();
|
||||
if (!OK_STAT(stat = hwif->INB(IDE_STATUS_REG),READY_STAT,BAD_STAT)) {
|
||||
return DRIVER(drive)->error(drive, "task_no_data_intr", stat);
|
||||
/* calls ide_end_drive_cmd */
|
||||
}
|
||||
if (args)
|
||||
ide_end_drive_cmd(drive, stat, hwif->INB(IDE_ERROR_REG));
|
||||
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(task_no_data_intr);
|
||||
|
||||
static u8 wait_drive_not_busy(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
int retries = 100;
|
||||
u8 stat;
|
||||
|
||||
/*
|
||||
* Last sector was transfered, wait until drive is ready.
|
||||
* This can take up to 10 usec, but we will wait max 1 ms
|
||||
* (drive_cmd_intr() waits that long).
|
||||
*/
|
||||
while (((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT) && retries--)
|
||||
udelay(10);
|
||||
|
||||
if (!retries)
|
||||
printk(KERN_ERR "%s: drive still BUSY!\n", drive->name);
|
||||
|
||||
return stat;
|
||||
}
|
||||
|
||||
static void ide_pio_sector(ide_drive_t *drive, unsigned int write)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
struct scatterlist *sg = hwif->sg_table;
|
||||
struct page *page;
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
unsigned long flags;
|
||||
#endif
|
||||
unsigned int offset;
|
||||
u8 *buf;
|
||||
|
||||
page = sg[hwif->cursg].page;
|
||||
offset = sg[hwif->cursg].offset + hwif->cursg_ofs * SECTOR_SIZE;
|
||||
|
||||
/* get the current page and offset */
|
||||
page = nth_page(page, (offset >> PAGE_SHIFT));
|
||||
offset %= PAGE_SIZE;
|
||||
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
local_irq_save(flags);
|
||||
#endif
|
||||
buf = kmap_atomic(page, KM_BIO_SRC_IRQ) + offset;
|
||||
|
||||
hwif->nleft--;
|
||||
hwif->cursg_ofs++;
|
||||
|
||||
if ((hwif->cursg_ofs * SECTOR_SIZE) == sg[hwif->cursg].length) {
|
||||
hwif->cursg++;
|
||||
hwif->cursg_ofs = 0;
|
||||
}
|
||||
|
||||
/* do the actual data transfer */
|
||||
if (write)
|
||||
taskfile_output_data(drive, buf, SECTOR_WORDS);
|
||||
else
|
||||
taskfile_input_data(drive, buf, SECTOR_WORDS);
|
||||
|
||||
kunmap_atomic(buf, KM_BIO_SRC_IRQ);
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
local_irq_restore(flags);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void ide_pio_multi(ide_drive_t *drive, unsigned int write)
|
||||
{
|
||||
unsigned int nsect;
|
||||
|
||||
nsect = min_t(unsigned int, drive->hwif->nleft, drive->mult_count);
|
||||
while (nsect--)
|
||||
ide_pio_sector(drive, write);
|
||||
}
|
||||
|
||||
static inline void ide_pio_datablock(ide_drive_t *drive, struct request *rq,
|
||||
unsigned int write)
|
||||
{
|
||||
if (rq->bio) /* fs request */
|
||||
rq->errors = 0;
|
||||
|
||||
switch (drive->hwif->data_phase) {
|
||||
case TASKFILE_MULTI_IN:
|
||||
case TASKFILE_MULTI_OUT:
|
||||
ide_pio_multi(drive, write);
|
||||
break;
|
||||
default:
|
||||
ide_pio_sector(drive, write);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static ide_startstop_t task_error(ide_drive_t *drive, struct request *rq,
|
||||
const char *s, u8 stat)
|
||||
{
|
||||
if (rq->bio) {
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
int sectors = hwif->nsect - hwif->nleft;
|
||||
|
||||
switch (hwif->data_phase) {
|
||||
case TASKFILE_IN:
|
||||
if (hwif->nleft)
|
||||
break;
|
||||
/* fall through */
|
||||
case TASKFILE_OUT:
|
||||
sectors--;
|
||||
break;
|
||||
case TASKFILE_MULTI_IN:
|
||||
if (hwif->nleft)
|
||||
break;
|
||||
/* fall through */
|
||||
case TASKFILE_MULTI_OUT:
|
||||
sectors -= drive->mult_count;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (sectors > 0)
|
||||
drive->driver->end_request(drive, 1, sectors);
|
||||
}
|
||||
return drive->driver->error(drive, s, stat);
|
||||
}
|
||||
|
||||
static void task_end_request(ide_drive_t *drive, struct request *rq, u8 stat)
|
||||
{
|
||||
if (rq->flags & REQ_DRIVE_TASKFILE) {
|
||||
ide_task_t *task = rq->special;
|
||||
|
||||
if (task->tf_out_flags.all) {
|
||||
u8 err = drive->hwif->INB(IDE_ERROR_REG);
|
||||
ide_end_drive_cmd(drive, stat, err);
|
||||
return;
|
||||
}
|
||||
}
|
||||
drive->driver->end_request(drive, 1, rq->hard_nr_sectors);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handler for command with PIO data-in phase (Read/Read Multiple).
|
||||
*/
|
||||
ide_startstop_t task_in_intr (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
struct request *rq = HWGROUP(drive)->rq;
|
||||
u8 stat = hwif->INB(IDE_STATUS_REG);
|
||||
|
||||
/* new way for dealing with premature shared PCI interrupts */
|
||||
if (!OK_STAT(stat, DATA_READY, BAD_R_STAT)) {
|
||||
if (stat & (ERR_STAT | DRQ_STAT))
|
||||
return task_error(drive, rq, __FUNCTION__, stat);
|
||||
/* No data yet, so wait for another IRQ. */
|
||||
ide_set_handler(drive, &task_in_intr, WAIT_WORSTCASE, NULL);
|
||||
return ide_started;
|
||||
}
|
||||
|
||||
ide_pio_datablock(drive, rq, 0);
|
||||
|
||||
/* If it was the last datablock check status and finish transfer. */
|
||||
if (!hwif->nleft) {
|
||||
stat = wait_drive_not_busy(drive);
|
||||
if (!OK_STAT(stat, 0, BAD_R_STAT))
|
||||
return task_error(drive, rq, __FUNCTION__, stat);
|
||||
task_end_request(drive, rq, stat);
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
/* Still data left to transfer. */
|
||||
ide_set_handler(drive, &task_in_intr, WAIT_WORSTCASE, NULL);
|
||||
|
||||
return ide_started;
|
||||
}
|
||||
EXPORT_SYMBOL(task_in_intr);
|
||||
|
||||
/*
|
||||
* Handler for command with PIO data-out phase (Write/Write Multiple).
|
||||
*/
|
||||
static ide_startstop_t task_out_intr (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
struct request *rq = HWGROUP(drive)->rq;
|
||||
u8 stat = hwif->INB(IDE_STATUS_REG);
|
||||
|
||||
if (!OK_STAT(stat, DRIVE_READY, drive->bad_wstat))
|
||||
return task_error(drive, rq, __FUNCTION__, stat);
|
||||
|
||||
/* Deal with unexpected ATA data phase. */
|
||||
if (((stat & DRQ_STAT) == 0) ^ !hwif->nleft)
|
||||
return task_error(drive, rq, __FUNCTION__, stat);
|
||||
|
||||
if (!hwif->nleft) {
|
||||
task_end_request(drive, rq, stat);
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
/* Still data left to transfer. */
|
||||
ide_pio_datablock(drive, rq, 1);
|
||||
ide_set_handler(drive, &task_out_intr, WAIT_WORSTCASE, NULL);
|
||||
|
||||
return ide_started;
|
||||
}
|
||||
|
||||
ide_startstop_t pre_task_out_intr (ide_drive_t *drive, struct request *rq)
|
||||
{
|
||||
ide_startstop_t startstop;
|
||||
|
||||
if (ide_wait_stat(&startstop, drive, DATA_READY,
|
||||
drive->bad_wstat, WAIT_DRQ)) {
|
||||
printk(KERN_ERR "%s: no DRQ after issuing %sWRITE%s\n",
|
||||
drive->name,
|
||||
drive->hwif->data_phase ? "MULT" : "",
|
||||
drive->addressing ? "_EXT" : "");
|
||||
return startstop;
|
||||
}
|
||||
|
||||
if (!drive->unmask)
|
||||
local_irq_disable();
|
||||
|
||||
ide_set_handler(drive, &task_out_intr, WAIT_WORSTCASE, NULL);
|
||||
ide_pio_datablock(drive, rq, 1);
|
||||
|
||||
return ide_started;
|
||||
}
|
||||
EXPORT_SYMBOL(pre_task_out_intr);
|
||||
|
||||
static int ide_diag_taskfile(ide_drive_t *drive, ide_task_t *args, unsigned long data_size, u8 *buf)
|
||||
{
|
||||
struct request rq;
|
||||
|
||||
memset(&rq, 0, sizeof(rq));
|
||||
rq.flags = REQ_DRIVE_TASKFILE;
|
||||
rq.buffer = buf;
|
||||
|
||||
/*
|
||||
* (ks) We transfer currently only whole sectors.
|
||||
* This is suffient for now. But, it would be great,
|
||||
* if we would find a solution to transfer any size.
|
||||
* To support special commands like READ LONG.
|
||||
*/
|
||||
if (args->command_type != IDE_DRIVE_TASK_NO_DATA) {
|
||||
if (data_size == 0)
|
||||
rq.nr_sectors = (args->hobRegister[IDE_NSECTOR_OFFSET] << 8) | args->tfRegister[IDE_NSECTOR_OFFSET];
|
||||
else
|
||||
rq.nr_sectors = data_size / SECTOR_SIZE;
|
||||
|
||||
if (!rq.nr_sectors) {
|
||||
printk(KERN_ERR "%s: in/out command without data\n",
|
||||
drive->name);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
rq.hard_nr_sectors = rq.nr_sectors;
|
||||
rq.hard_cur_sectors = rq.current_nr_sectors = rq.nr_sectors;
|
||||
|
||||
if (args->command_type == IDE_DRIVE_TASK_RAW_WRITE)
|
||||
rq.flags |= REQ_RW;
|
||||
}
|
||||
|
||||
rq.special = args;
|
||||
return ide_do_drive_cmd(drive, &rq, ide_wait);
|
||||
}
|
||||
|
||||
int ide_raw_taskfile (ide_drive_t *drive, ide_task_t *args, u8 *buf)
|
||||
{
|
||||
return ide_diag_taskfile(drive, args, 0, buf);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ide_raw_taskfile);
|
||||
|
||||
int ide_taskfile_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
ide_task_request_t *req_task;
|
||||
ide_task_t args;
|
||||
u8 *outbuf = NULL;
|
||||
u8 *inbuf = NULL;
|
||||
task_ioreg_t *argsptr = args.tfRegister;
|
||||
task_ioreg_t *hobsptr = args.hobRegister;
|
||||
int err = 0;
|
||||
int tasksize = sizeof(struct ide_task_request_s);
|
||||
int taskin = 0;
|
||||
int taskout = 0;
|
||||
u8 io_32bit = drive->io_32bit;
|
||||
char __user *buf = (char __user *)arg;
|
||||
|
||||
// printk("IDE Taskfile ...\n");
|
||||
|
||||
req_task = kmalloc(tasksize, GFP_KERNEL);
|
||||
if (req_task == NULL) return -ENOMEM;
|
||||
memset(req_task, 0, tasksize);
|
||||
if (copy_from_user(req_task, buf, tasksize)) {
|
||||
kfree(req_task);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
taskout = (int) req_task->out_size;
|
||||
taskin = (int) req_task->in_size;
|
||||
|
||||
if (taskout) {
|
||||
int outtotal = tasksize;
|
||||
outbuf = kmalloc(taskout, GFP_KERNEL);
|
||||
if (outbuf == NULL) {
|
||||
err = -ENOMEM;
|
||||
goto abort;
|
||||
}
|
||||
memset(outbuf, 0, taskout);
|
||||
if (copy_from_user(outbuf, buf + outtotal, taskout)) {
|
||||
err = -EFAULT;
|
||||
goto abort;
|
||||
}
|
||||
}
|
||||
|
||||
if (taskin) {
|
||||
int intotal = tasksize + taskout;
|
||||
inbuf = kmalloc(taskin, GFP_KERNEL);
|
||||
if (inbuf == NULL) {
|
||||
err = -ENOMEM;
|
||||
goto abort;
|
||||
}
|
||||
memset(inbuf, 0, taskin);
|
||||
if (copy_from_user(inbuf, buf + intotal, taskin)) {
|
||||
err = -EFAULT;
|
||||
goto abort;
|
||||
}
|
||||
}
|
||||
|
||||
memset(&args, 0, sizeof(ide_task_t));
|
||||
memcpy(argsptr, req_task->io_ports, HDIO_DRIVE_TASK_HDR_SIZE);
|
||||
memcpy(hobsptr, req_task->hob_ports, HDIO_DRIVE_HOB_HDR_SIZE);
|
||||
|
||||
args.tf_in_flags = req_task->in_flags;
|
||||
args.tf_out_flags = req_task->out_flags;
|
||||
args.data_phase = req_task->data_phase;
|
||||
args.command_type = req_task->req_cmd;
|
||||
|
||||
drive->io_32bit = 0;
|
||||
switch(req_task->data_phase) {
|
||||
case TASKFILE_OUT_DMAQ:
|
||||
case TASKFILE_OUT_DMA:
|
||||
err = ide_diag_taskfile(drive, &args, taskout, outbuf);
|
||||
break;
|
||||
case TASKFILE_IN_DMAQ:
|
||||
case TASKFILE_IN_DMA:
|
||||
err = ide_diag_taskfile(drive, &args, taskin, inbuf);
|
||||
break;
|
||||
case TASKFILE_MULTI_OUT:
|
||||
if (!drive->mult_count) {
|
||||
/* (hs): give up if multcount is not set */
|
||||
printk(KERN_ERR "%s: %s Multimode Write " \
|
||||
"multcount is not set\n",
|
||||
drive->name, __FUNCTION__);
|
||||
err = -EPERM;
|
||||
goto abort;
|
||||
}
|
||||
/* fall through */
|
||||
case TASKFILE_OUT:
|
||||
args.prehandler = &pre_task_out_intr;
|
||||
args.handler = &task_out_intr;
|
||||
err = ide_diag_taskfile(drive, &args, taskout, outbuf);
|
||||
break;
|
||||
case TASKFILE_MULTI_IN:
|
||||
if (!drive->mult_count) {
|
||||
/* (hs): give up if multcount is not set */
|
||||
printk(KERN_ERR "%s: %s Multimode Read failure " \
|
||||
"multcount is not set\n",
|
||||
drive->name, __FUNCTION__);
|
||||
err = -EPERM;
|
||||
goto abort;
|
||||
}
|
||||
/* fall through */
|
||||
case TASKFILE_IN:
|
||||
args.handler = &task_in_intr;
|
||||
err = ide_diag_taskfile(drive, &args, taskin, inbuf);
|
||||
break;
|
||||
case TASKFILE_NO_DATA:
|
||||
args.handler = &task_no_data_intr;
|
||||
err = ide_diag_taskfile(drive, &args, 0, NULL);
|
||||
break;
|
||||
default:
|
||||
err = -EFAULT;
|
||||
goto abort;
|
||||
}
|
||||
|
||||
memcpy(req_task->io_ports, &(args.tfRegister), HDIO_DRIVE_TASK_HDR_SIZE);
|
||||
memcpy(req_task->hob_ports, &(args.hobRegister), HDIO_DRIVE_HOB_HDR_SIZE);
|
||||
req_task->in_flags = args.tf_in_flags;
|
||||
req_task->out_flags = args.tf_out_flags;
|
||||
|
||||
if (copy_to_user(buf, req_task, tasksize)) {
|
||||
err = -EFAULT;
|
||||
goto abort;
|
||||
}
|
||||
if (taskout) {
|
||||
int outtotal = tasksize;
|
||||
if (copy_to_user(buf + outtotal, outbuf, taskout)) {
|
||||
err = -EFAULT;
|
||||
goto abort;
|
||||
}
|
||||
}
|
||||
if (taskin) {
|
||||
int intotal = tasksize + taskout;
|
||||
if (copy_to_user(buf + intotal, inbuf, taskin)) {
|
||||
err = -EFAULT;
|
||||
goto abort;
|
||||
}
|
||||
}
|
||||
abort:
|
||||
kfree(req_task);
|
||||
if (outbuf != NULL)
|
||||
kfree(outbuf);
|
||||
if (inbuf != NULL)
|
||||
kfree(inbuf);
|
||||
|
||||
// printk("IDE Taskfile ioctl ended. rc = %i\n", err);
|
||||
|
||||
drive->io_32bit = io_32bit;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int ide_wait_cmd (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors, u8 *buf)
|
||||
{
|
||||
struct request rq;
|
||||
u8 buffer[4];
|
||||
|
||||
if (!buf)
|
||||
buf = buffer;
|
||||
memset(buf, 0, 4 + SECTOR_WORDS * 4 * sectors);
|
||||
ide_init_drive_cmd(&rq);
|
||||
rq.buffer = buf;
|
||||
*buf++ = cmd;
|
||||
*buf++ = nsect;
|
||||
*buf++ = feature;
|
||||
*buf++ = sectors;
|
||||
return ide_do_drive_cmd(drive, &rq, ide_wait);
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME : this needs to map into at taskfile. <andre@linux-ide.org>
|
||||
*/
|
||||
int ide_cmd_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
int err = 0;
|
||||
u8 args[4], *argbuf = args;
|
||||
u8 xfer_rate = 0;
|
||||
int argsize = 4;
|
||||
ide_task_t tfargs;
|
||||
|
||||
if (NULL == (void *) arg) {
|
||||
struct request rq;
|
||||
ide_init_drive_cmd(&rq);
|
||||
return ide_do_drive_cmd(drive, &rq, ide_wait);
|
||||
}
|
||||
|
||||
if (copy_from_user(args, (void __user *)arg, 4))
|
||||
return -EFAULT;
|
||||
|
||||
memset(&tfargs, 0, sizeof(ide_task_t));
|
||||
tfargs.tfRegister[IDE_FEATURE_OFFSET] = args[2];
|
||||
tfargs.tfRegister[IDE_NSECTOR_OFFSET] = args[3];
|
||||
tfargs.tfRegister[IDE_SECTOR_OFFSET] = args[1];
|
||||
tfargs.tfRegister[IDE_LCYL_OFFSET] = 0x00;
|
||||
tfargs.tfRegister[IDE_HCYL_OFFSET] = 0x00;
|
||||
tfargs.tfRegister[IDE_SELECT_OFFSET] = 0x00;
|
||||
tfargs.tfRegister[IDE_COMMAND_OFFSET] = args[0];
|
||||
|
||||
if (args[3]) {
|
||||
argsize = 4 + (SECTOR_WORDS * 4 * args[3]);
|
||||
argbuf = kmalloc(argsize, GFP_KERNEL);
|
||||
if (argbuf == NULL)
|
||||
return -ENOMEM;
|
||||
memcpy(argbuf, args, 4);
|
||||
}
|
||||
if (set_transfer(drive, &tfargs)) {
|
||||
xfer_rate = args[1];
|
||||
if (ide_ata66_check(drive, &tfargs))
|
||||
goto abort;
|
||||
}
|
||||
|
||||
err = ide_wait_cmd(drive, args[0], args[1], args[2], args[3], argbuf);
|
||||
|
||||
if (!err && xfer_rate) {
|
||||
/* active-retuning-calls future */
|
||||
ide_set_xfer_rate(drive, xfer_rate);
|
||||
ide_driveid_update(drive);
|
||||
}
|
||||
abort:
|
||||
if (copy_to_user((void __user *)arg, argbuf, argsize))
|
||||
err = -EFAULT;
|
||||
if (argsize > 4)
|
||||
kfree(argbuf);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ide_wait_cmd_task(ide_drive_t *drive, u8 *buf)
|
||||
{
|
||||
struct request rq;
|
||||
|
||||
ide_init_drive_cmd(&rq);
|
||||
rq.flags = REQ_DRIVE_TASK;
|
||||
rq.buffer = buf;
|
||||
return ide_do_drive_cmd(drive, &rq, ide_wait);
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME : this needs to map into at taskfile. <andre@linux-ide.org>
|
||||
*/
|
||||
int ide_task_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
void __user *p = (void __user *)arg;
|
||||
int err = 0;
|
||||
u8 args[7], *argbuf = args;
|
||||
int argsize = 7;
|
||||
|
||||
if (copy_from_user(args, p, 7))
|
||||
return -EFAULT;
|
||||
err = ide_wait_cmd_task(drive, argbuf);
|
||||
if (copy_to_user(p, argbuf, argsize))
|
||||
err = -EFAULT;
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTICE: This is additions from IBM to provide a discrete interface,
|
||||
* for selective taskregister access operations. Nice JOB Klaus!!!
|
||||
* Glad to be able to work and co-develop this with you and IBM.
|
||||
*/
|
||||
ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
task_struct_t *taskfile = (task_struct_t *) task->tfRegister;
|
||||
hob_struct_t *hobfile = (hob_struct_t *) task->hobRegister;
|
||||
#if DEBUG_TASKFILE
|
||||
u8 status;
|
||||
#endif
|
||||
|
||||
if (task->data_phase == TASKFILE_MULTI_IN ||
|
||||
task->data_phase == TASKFILE_MULTI_OUT) {
|
||||
if (!drive->mult_count) {
|
||||
printk(KERN_ERR "%s: multimode not set!\n", drive->name);
|
||||
return ide_stopped;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (ks) Check taskfile in/out flags.
|
||||
* If set, then execute as it is defined.
|
||||
* If not set, then define default settings.
|
||||
* The default values are:
|
||||
* write and read all taskfile registers (except data)
|
||||
* write and read the hob registers (sector,nsector,lcyl,hcyl)
|
||||
*/
|
||||
if (task->tf_out_flags.all == 0) {
|
||||
task->tf_out_flags.all = IDE_TASKFILE_STD_OUT_FLAGS;
|
||||
if (drive->addressing == 1)
|
||||
task->tf_out_flags.all |= (IDE_HOB_STD_OUT_FLAGS << 8);
|
||||
}
|
||||
|
||||
if (task->tf_in_flags.all == 0) {
|
||||
task->tf_in_flags.all = IDE_TASKFILE_STD_IN_FLAGS;
|
||||
if (drive->addressing == 1)
|
||||
task->tf_in_flags.all |= (IDE_HOB_STD_IN_FLAGS << 8);
|
||||
}
|
||||
|
||||
/* ALL Command Block Executions SHALL clear nIEN, unless otherwise */
|
||||
if (IDE_CONTROL_REG)
|
||||
/* clear nIEN */
|
||||
hwif->OUTB(drive->ctl, IDE_CONTROL_REG);
|
||||
SELECT_MASK(drive, 0);
|
||||
|
||||
#if DEBUG_TASKFILE
|
||||
status = hwif->INB(IDE_STATUS_REG);
|
||||
if (status & 0x80) {
|
||||
printk("flagged_taskfile -> Bad status. Status = %02x. wait 100 usec ...\n", status);
|
||||
udelay(100);
|
||||
status = hwif->INB(IDE_STATUS_REG);
|
||||
printk("flagged_taskfile -> Status = %02x\n", status);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (task->tf_out_flags.b.data) {
|
||||
u16 data = taskfile->data + (hobfile->data << 8);
|
||||
hwif->OUTW(data, IDE_DATA_REG);
|
||||
}
|
||||
|
||||
/* (ks) send hob registers first */
|
||||
if (task->tf_out_flags.b.nsector_hob)
|
||||
hwif->OUTB(hobfile->sector_count, IDE_NSECTOR_REG);
|
||||
if (task->tf_out_flags.b.sector_hob)
|
||||
hwif->OUTB(hobfile->sector_number, IDE_SECTOR_REG);
|
||||
if (task->tf_out_flags.b.lcyl_hob)
|
||||
hwif->OUTB(hobfile->low_cylinder, IDE_LCYL_REG);
|
||||
if (task->tf_out_flags.b.hcyl_hob)
|
||||
hwif->OUTB(hobfile->high_cylinder, IDE_HCYL_REG);
|
||||
|
||||
/* (ks) Send now the standard registers */
|
||||
if (task->tf_out_flags.b.error_feature)
|
||||
hwif->OUTB(taskfile->feature, IDE_FEATURE_REG);
|
||||
/* refers to number of sectors to transfer */
|
||||
if (task->tf_out_flags.b.nsector)
|
||||
hwif->OUTB(taskfile->sector_count, IDE_NSECTOR_REG);
|
||||
/* refers to sector offset or start sector */
|
||||
if (task->tf_out_flags.b.sector)
|
||||
hwif->OUTB(taskfile->sector_number, IDE_SECTOR_REG);
|
||||
if (task->tf_out_flags.b.lcyl)
|
||||
hwif->OUTB(taskfile->low_cylinder, IDE_LCYL_REG);
|
||||
if (task->tf_out_flags.b.hcyl)
|
||||
hwif->OUTB(taskfile->high_cylinder, IDE_HCYL_REG);
|
||||
|
||||
/*
|
||||
* (ks) In the flagged taskfile approch, we will used all specified
|
||||
* registers and the register value will not be changed. Except the
|
||||
* select bit (master/slave) in the drive_head register. We must make
|
||||
* sure that the desired drive is selected.
|
||||
*/
|
||||
hwif->OUTB(taskfile->device_head | drive->select.all, IDE_SELECT_REG);
|
||||
switch(task->data_phase) {
|
||||
|
||||
case TASKFILE_OUT_DMAQ:
|
||||
case TASKFILE_OUT_DMA:
|
||||
case TASKFILE_IN_DMAQ:
|
||||
case TASKFILE_IN_DMA:
|
||||
hwif->dma_setup(drive);
|
||||
hwif->dma_exec_cmd(drive, taskfile->command);
|
||||
hwif->dma_start(drive);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (task->handler == NULL)
|
||||
return ide_stopped;
|
||||
|
||||
/* Issue the command */
|
||||
if (task->prehandler) {
|
||||
hwif->OUTBSYNC(drive, taskfile->command, IDE_COMMAND_REG);
|
||||
ndelay(400); /* FIXME */
|
||||
return task->prehandler(drive, task->rq);
|
||||
}
|
||||
ide_execute_command(drive, taskfile->command, task->handler, WAIT_WORSTCASE, NULL);
|
||||
}
|
||||
|
||||
return ide_started;
|
||||
}
|
||||
BIN
extra/linux-2.6.10/drivers/ide/ide-taskfile.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide-taskfile.o
Normal file
Binary file not shown.
281
extra/linux-2.6.10/drivers/ide/ide-timing.h
Normal file
281
extra/linux-2.6.10/drivers/ide/ide-timing.h
Normal file
@@ -0,0 +1,281 @@
|
||||
#ifndef _IDE_TIMING_H
|
||||
#define _IDE_TIMING_H
|
||||
|
||||
/*
|
||||
* $Id: ide-timing.h,v 1.6 2001/12/23 22:47:56 vojtech Exp $
|
||||
*
|
||||
* Copyright (c) 1999-2001 Vojtech Pavlik
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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
|
||||
*
|
||||
* Should you need to contact me, the author, you can do so either by
|
||||
* e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
|
||||
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
|
||||
*/
|
||||
|
||||
#include <linux/hdreg.h>
|
||||
|
||||
#define XFER_PIO_5 0x0d
|
||||
#define XFER_UDMA_SLOW 0x4f
|
||||
|
||||
struct ide_timing {
|
||||
short mode;
|
||||
short setup; /* t1 */
|
||||
short act8b; /* t2 for 8-bit io */
|
||||
short rec8b; /* t2i for 8-bit io */
|
||||
short cyc8b; /* t0 for 8-bit io */
|
||||
short active; /* t2 or tD */
|
||||
short recover; /* t2i or tK */
|
||||
short cycle; /* t0 */
|
||||
short udma; /* t2CYCTYP/2 */
|
||||
};
|
||||
|
||||
/*
|
||||
* PIO 0-5, MWDMA 0-2 and UDMA 0-6 timings (in nanoseconds).
|
||||
* These were taken from ATA/ATAPI-6 standard, rev 0a, except
|
||||
* for PIO 5, which is a nonstandard extension and UDMA6, which
|
||||
* is currently supported only by Maxtor drives.
|
||||
*/
|
||||
|
||||
static struct ide_timing ide_timing[] = {
|
||||
|
||||
{ XFER_UDMA_6, 0, 0, 0, 0, 0, 0, 0, 15 },
|
||||
{ XFER_UDMA_5, 0, 0, 0, 0, 0, 0, 0, 20 },
|
||||
{ XFER_UDMA_4, 0, 0, 0, 0, 0, 0, 0, 30 },
|
||||
{ XFER_UDMA_3, 0, 0, 0, 0, 0, 0, 0, 45 },
|
||||
|
||||
{ XFER_UDMA_2, 0, 0, 0, 0, 0, 0, 0, 60 },
|
||||
{ XFER_UDMA_1, 0, 0, 0, 0, 0, 0, 0, 80 },
|
||||
{ XFER_UDMA_0, 0, 0, 0, 0, 0, 0, 0, 120 },
|
||||
|
||||
{ XFER_UDMA_SLOW, 0, 0, 0, 0, 0, 0, 0, 150 },
|
||||
|
||||
{ XFER_MW_DMA_2, 25, 0, 0, 0, 70, 25, 120, 0 },
|
||||
{ XFER_MW_DMA_1, 45, 0, 0, 0, 80, 50, 150, 0 },
|
||||
{ XFER_MW_DMA_0, 60, 0, 0, 0, 215, 215, 480, 0 },
|
||||
|
||||
{ XFER_SW_DMA_2, 60, 0, 0, 0, 120, 120, 240, 0 },
|
||||
{ XFER_SW_DMA_1, 90, 0, 0, 0, 240, 240, 480, 0 },
|
||||
{ XFER_SW_DMA_0, 120, 0, 0, 0, 480, 480, 960, 0 },
|
||||
|
||||
{ XFER_PIO_5, 20, 50, 30, 100, 50, 30, 100, 0 },
|
||||
{ XFER_PIO_4, 25, 70, 25, 120, 70, 25, 120, 0 },
|
||||
{ XFER_PIO_3, 30, 80, 70, 180, 80, 70, 180, 0 },
|
||||
|
||||
{ XFER_PIO_2, 30, 290, 40, 330, 100, 90, 240, 0 },
|
||||
{ XFER_PIO_1, 50, 290, 93, 383, 125, 100, 383, 0 },
|
||||
{ XFER_PIO_0, 70, 290, 240, 600, 165, 150, 600, 0 },
|
||||
|
||||
{ XFER_PIO_SLOW, 120, 290, 240, 960, 290, 240, 960, 0 },
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
#define IDE_TIMING_SETUP 0x01
|
||||
#define IDE_TIMING_ACT8B 0x02
|
||||
#define IDE_TIMING_REC8B 0x04
|
||||
#define IDE_TIMING_CYC8B 0x08
|
||||
#define IDE_TIMING_8BIT 0x0e
|
||||
#define IDE_TIMING_ACTIVE 0x10
|
||||
#define IDE_TIMING_RECOVER 0x20
|
||||
#define IDE_TIMING_CYCLE 0x40
|
||||
#define IDE_TIMING_UDMA 0x80
|
||||
#define IDE_TIMING_ALL 0xff
|
||||
|
||||
#define MIN(a,b) ((a)<(b)?(a):(b))
|
||||
#define MAX(a,b) ((a)>(b)?(a):(b))
|
||||
#define FIT(v,min,max) MAX(MIN(v,max),min)
|
||||
#define ENOUGH(v,unit) (((v)-1)/(unit)+1)
|
||||
#define EZ(v,unit) ((v)?ENOUGH(v,unit):0)
|
||||
|
||||
#define XFER_MODE 0xf0
|
||||
#define XFER_UDMA_133 0x48
|
||||
#define XFER_UDMA_100 0x44
|
||||
#define XFER_UDMA_66 0x42
|
||||
#define XFER_UDMA 0x40
|
||||
#define XFER_MWDMA 0x20
|
||||
#define XFER_SWDMA 0x10
|
||||
#define XFER_EPIO 0x01
|
||||
#define XFER_PIO 0x00
|
||||
|
||||
static short ide_find_best_mode(ide_drive_t *drive, int map)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
short best = 0;
|
||||
|
||||
if (!id)
|
||||
return XFER_PIO_SLOW;
|
||||
|
||||
if ((map & XFER_UDMA) && (id->field_valid & 4)) { /* Want UDMA and UDMA bitmap valid */
|
||||
|
||||
if ((map & XFER_UDMA_133) == XFER_UDMA_133)
|
||||
if ((best = (id->dma_ultra & 0x0040) ? XFER_UDMA_6 : 0)) return best;
|
||||
|
||||
if ((map & XFER_UDMA_100) == XFER_UDMA_100)
|
||||
if ((best = (id->dma_ultra & 0x0020) ? XFER_UDMA_5 : 0)) return best;
|
||||
|
||||
if ((map & XFER_UDMA_66) == XFER_UDMA_66)
|
||||
if ((best = (id->dma_ultra & 0x0010) ? XFER_UDMA_4 :
|
||||
(id->dma_ultra & 0x0008) ? XFER_UDMA_3 : 0)) return best;
|
||||
|
||||
if ((best = (id->dma_ultra & 0x0004) ? XFER_UDMA_2 :
|
||||
(id->dma_ultra & 0x0002) ? XFER_UDMA_1 :
|
||||
(id->dma_ultra & 0x0001) ? XFER_UDMA_0 : 0)) return best;
|
||||
}
|
||||
|
||||
if ((map & XFER_MWDMA) && (id->field_valid & 2)) { /* Want MWDMA and drive has EIDE fields */
|
||||
|
||||
if ((best = (id->dma_mword & 0x0004) ? XFER_MW_DMA_2 :
|
||||
(id->dma_mword & 0x0002) ? XFER_MW_DMA_1 :
|
||||
(id->dma_mword & 0x0001) ? XFER_MW_DMA_0 : 0)) return best;
|
||||
}
|
||||
|
||||
if (map & XFER_SWDMA) { /* Want SWDMA */
|
||||
|
||||
if (id->field_valid & 2) { /* EIDE SWDMA */
|
||||
|
||||
if ((best = (id->dma_1word & 0x0004) ? XFER_SW_DMA_2 :
|
||||
(id->dma_1word & 0x0002) ? XFER_SW_DMA_1 :
|
||||
(id->dma_1word & 0x0001) ? XFER_SW_DMA_0 : 0)) return best;
|
||||
}
|
||||
|
||||
if (id->capability & 1) { /* Pre-EIDE style SWDMA */
|
||||
|
||||
if ((best = (id->tDMA == 2) ? XFER_SW_DMA_2 :
|
||||
(id->tDMA == 1) ? XFER_SW_DMA_1 :
|
||||
(id->tDMA == 0) ? XFER_SW_DMA_0 : 0)) return best;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ((map & XFER_EPIO) && (id->field_valid & 2)) { /* EIDE PIO modes */
|
||||
|
||||
if ((best = (drive->id->eide_pio_modes & 4) ? XFER_PIO_5 :
|
||||
(drive->id->eide_pio_modes & 2) ? XFER_PIO_4 :
|
||||
(drive->id->eide_pio_modes & 1) ? XFER_PIO_3 : 0)) return best;
|
||||
}
|
||||
|
||||
return (drive->id->tPIO == 2) ? XFER_PIO_2 :
|
||||
(drive->id->tPIO == 1) ? XFER_PIO_1 :
|
||||
(drive->id->tPIO == 0) ? XFER_PIO_0 : XFER_PIO_SLOW;
|
||||
}
|
||||
|
||||
static void ide_timing_quantize(struct ide_timing *t, struct ide_timing *q, int T, int UT)
|
||||
{
|
||||
q->setup = EZ(t->setup * 1000, T);
|
||||
q->act8b = EZ(t->act8b * 1000, T);
|
||||
q->rec8b = EZ(t->rec8b * 1000, T);
|
||||
q->cyc8b = EZ(t->cyc8b * 1000, T);
|
||||
q->active = EZ(t->active * 1000, T);
|
||||
q->recover = EZ(t->recover * 1000, T);
|
||||
q->cycle = EZ(t->cycle * 1000, T);
|
||||
q->udma = EZ(t->udma * 1000, UT);
|
||||
}
|
||||
|
||||
static void ide_timing_merge(struct ide_timing *a, struct ide_timing *b, struct ide_timing *m, unsigned int what)
|
||||
{
|
||||
if (what & IDE_TIMING_SETUP ) m->setup = MAX(a->setup, b->setup);
|
||||
if (what & IDE_TIMING_ACT8B ) m->act8b = MAX(a->act8b, b->act8b);
|
||||
if (what & IDE_TIMING_REC8B ) m->rec8b = MAX(a->rec8b, b->rec8b);
|
||||
if (what & IDE_TIMING_CYC8B ) m->cyc8b = MAX(a->cyc8b, b->cyc8b);
|
||||
if (what & IDE_TIMING_ACTIVE ) m->active = MAX(a->active, b->active);
|
||||
if (what & IDE_TIMING_RECOVER) m->recover = MAX(a->recover, b->recover);
|
||||
if (what & IDE_TIMING_CYCLE ) m->cycle = MAX(a->cycle, b->cycle);
|
||||
if (what & IDE_TIMING_UDMA ) m->udma = MAX(a->udma, b->udma);
|
||||
}
|
||||
|
||||
static struct ide_timing* ide_timing_find_mode(short speed)
|
||||
{
|
||||
struct ide_timing *t;
|
||||
|
||||
for (t = ide_timing; t->mode != speed; t++)
|
||||
if (t->mode < 0)
|
||||
return NULL;
|
||||
return t;
|
||||
}
|
||||
|
||||
static int ide_timing_compute(ide_drive_t *drive, short speed, struct ide_timing *t, int T, int UT)
|
||||
{
|
||||
struct hd_driveid *id = drive->id;
|
||||
struct ide_timing *s, p;
|
||||
|
||||
/*
|
||||
* Find the mode.
|
||||
*/
|
||||
|
||||
if (!(s = ide_timing_find_mode(speed)))
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* If the drive is an EIDE drive, it can tell us it needs extended
|
||||
* PIO/MWDMA cycle timing.
|
||||
*/
|
||||
|
||||
if (id && id->field_valid & 2) { /* EIDE drive */
|
||||
|
||||
memset(&p, 0, sizeof(p));
|
||||
|
||||
switch (speed & XFER_MODE) {
|
||||
|
||||
case XFER_PIO:
|
||||
if (speed <= XFER_PIO_2) p.cycle = p.cyc8b = id->eide_pio;
|
||||
else p.cycle = p.cyc8b = id->eide_pio_iordy;
|
||||
break;
|
||||
|
||||
case XFER_MWDMA:
|
||||
p.cycle = id->eide_dma_min;
|
||||
break;
|
||||
}
|
||||
|
||||
ide_timing_merge(&p, t, t, IDE_TIMING_CYCLE | IDE_TIMING_CYC8B);
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the timing to bus clock counts.
|
||||
*/
|
||||
|
||||
ide_timing_quantize(s, t, T, UT);
|
||||
|
||||
/*
|
||||
* Even in DMA/UDMA modes we still use PIO access for IDENTIFY, S.M.A.R.T
|
||||
* and some other commands. We have to ensure that the DMA cycle timing is
|
||||
* slower/equal than the fastest PIO timing.
|
||||
*/
|
||||
|
||||
if ((speed & XFER_MODE) != XFER_PIO) {
|
||||
ide_timing_compute(drive, ide_find_best_mode(drive, XFER_PIO | XFER_EPIO), &p, T, UT);
|
||||
ide_timing_merge(&p, t, t, IDE_TIMING_ALL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Lenghten active & recovery time so that cycle time is correct.
|
||||
*/
|
||||
|
||||
if (t->act8b + t->rec8b < t->cyc8b) {
|
||||
t->act8b += (t->cyc8b - (t->act8b + t->rec8b)) / 2;
|
||||
t->rec8b = t->cyc8b - t->act8b;
|
||||
}
|
||||
|
||||
if (t->active + t->recover < t->cycle) {
|
||||
t->active += (t->cycle - (t->active + t->recover)) / 2;
|
||||
t->recover = t->cycle - t->active;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
2524
extra/linux-2.6.10/drivers/ide/ide.c
Normal file
2524
extra/linux-2.6.10/drivers/ide/ide.c
Normal file
File diff suppressed because it is too large
Load Diff
BIN
extra/linux-2.6.10/drivers/ide/ide.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/ide.o
Normal file
Binary file not shown.
1
extra/linux-2.6.10/drivers/ide/legacy/.built-in.o.cmd
Normal file
1
extra/linux-2.6.10/drivers/ide/legacy/.built-in.o.cmd
Normal file
@@ -0,0 +1 @@
|
||||
cmd_drivers/ide/legacy/built-in.o := rm -f drivers/ide/legacy/built-in.o; ar rcs drivers/ide/legacy/built-in.o
|
||||
13
extra/linux-2.6.10/drivers/ide/legacy/Makefile
Normal file
13
extra/linux-2.6.10/drivers/ide/legacy/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_ALI14XX) += ali14xx.o
|
||||
obj-$(CONFIG_BLK_DEV_DTC2278) += dtc2278.o
|
||||
obj-$(CONFIG_BLK_DEV_HT6560B) += ht6560b.o
|
||||
obj-$(CONFIG_BLK_DEV_QD65XX) += qd65xx.o
|
||||
obj-$(CONFIG_BLK_DEV_UMC8672) += umc8672.o
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_IDECS) += ide-cs.o
|
||||
|
||||
# Last of all
|
||||
obj-$(CONFIG_BLK_DEV_HD) += hd.o
|
||||
|
||||
EXTRA_CFLAGS := -Idrivers/ide
|
||||
253
extra/linux-2.6.10/drivers/ide/legacy/ali14xx.c
Normal file
253
extra/linux-2.6.10/drivers/ide/legacy/ali14xx.c
Normal file
@@ -0,0 +1,253 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/ali14xx.c Version 0.03 Feb 09, 1996
|
||||
*
|
||||
* Copyright (C) 1996 Linus Torvalds & author (see below)
|
||||
*/
|
||||
|
||||
/*
|
||||
* ALI M14xx chipset EIDE controller
|
||||
*
|
||||
* Works for ALI M1439/1443/1445/1487/1489 chipsets.
|
||||
*
|
||||
* Adapted from code developed by derekn@vw.ece.cmu.edu. -ml
|
||||
* Derek's notes follow:
|
||||
*
|
||||
* I think the code should be pretty understandable,
|
||||
* but I'll be happy to (try to) answer questions.
|
||||
*
|
||||
* The critical part is in the setupDrive function. The initRegisters
|
||||
* function doesn't seem to be necessary, but the DOS driver does it, so
|
||||
* I threw it in.
|
||||
*
|
||||
* I've only tested this on my system, which only has one disk. I posted
|
||||
* it to comp.sys.linux.hardware, so maybe some other people will try it
|
||||
* out.
|
||||
*
|
||||
* Derek Noonburg (derekn@ece.cmu.edu)
|
||||
* 95-sep-26
|
||||
*
|
||||
* Update 96-jul-13:
|
||||
*
|
||||
* I've since upgraded to two disks and a CD-ROM, with no trouble, and
|
||||
* I've also heard from several others who have used it successfully.
|
||||
* This driver appears to work with both the 1443/1445 and the 1487/1489
|
||||
* chipsets. I've added support for PIO mode 4 for the 1487. This
|
||||
* seems to work just fine on the 1443 also, although I'm not sure it's
|
||||
* advertised as supporting mode 4. (I've been running a WDC AC21200 in
|
||||
* mode 4 for a while now with no trouble.) -Derek
|
||||
*/
|
||||
|
||||
#undef REALLY_SLOW_IO /* most systems can safely undef this */
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
/* port addresses for auto-detection */
|
||||
#define ALI_NUM_PORTS 4
|
||||
static int ports[ALI_NUM_PORTS] __initdata = {0x074, 0x0f4, 0x034, 0x0e4};
|
||||
|
||||
/* register initialization data */
|
||||
typedef struct { u8 reg, data; } RegInitializer;
|
||||
|
||||
static RegInitializer initData[] __initdata = {
|
||||
{0x01, 0x0f}, {0x02, 0x00}, {0x03, 0x00}, {0x04, 0x00},
|
||||
{0x05, 0x00}, {0x06, 0x00}, {0x07, 0x2b}, {0x0a, 0x0f},
|
||||
{0x25, 0x00}, {0x26, 0x00}, {0x27, 0x00}, {0x28, 0x00},
|
||||
{0x29, 0x00}, {0x2a, 0x00}, {0x2f, 0x00}, {0x2b, 0x00},
|
||||
{0x2c, 0x00}, {0x2d, 0x00}, {0x2e, 0x00}, {0x30, 0x00},
|
||||
{0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00}, {0x34, 0xff},
|
||||
{0x35, 0x03}, {0x00, 0x00}
|
||||
};
|
||||
|
||||
#define ALI_MAX_PIO 4
|
||||
|
||||
/* timing parameter registers for each drive */
|
||||
static struct { u8 reg1, reg2, reg3, reg4; } regTab[4] = {
|
||||
{0x03, 0x26, 0x04, 0x27}, /* drive 0 */
|
||||
{0x05, 0x28, 0x06, 0x29}, /* drive 1 */
|
||||
{0x2b, 0x30, 0x2c, 0x31}, /* drive 2 */
|
||||
{0x2d, 0x32, 0x2e, 0x33}, /* drive 3 */
|
||||
};
|
||||
|
||||
static int basePort; /* base port address */
|
||||
static int regPort; /* port for register number */
|
||||
static int dataPort; /* port for register data */
|
||||
static u8 regOn; /* output to base port to access registers */
|
||||
static u8 regOff; /* output to base port to close registers */
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Read a controller register.
|
||||
*/
|
||||
static inline u8 inReg (u8 reg)
|
||||
{
|
||||
outb_p(reg, regPort);
|
||||
return inb(dataPort);
|
||||
}
|
||||
|
||||
/*
|
||||
* Write a controller register.
|
||||
*/
|
||||
static void outReg (u8 data, u8 reg)
|
||||
{
|
||||
outb_p(reg, regPort);
|
||||
outb_p(data, dataPort);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set PIO mode for the specified drive.
|
||||
* This function computes timing parameters
|
||||
* and sets controller registers accordingly.
|
||||
*/
|
||||
static void ali14xx_tune_drive (ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
int driveNum;
|
||||
int time1, time2;
|
||||
u8 param1, param2, param3, param4;
|
||||
unsigned long flags;
|
||||
ide_pio_data_t d;
|
||||
int bus_speed = system_bus_clock();
|
||||
|
||||
pio = ide_get_best_pio_mode(drive, pio, ALI_MAX_PIO, &d);
|
||||
|
||||
/* calculate timing, according to PIO mode */
|
||||
time1 = d.cycle_time;
|
||||
time2 = ide_pio_timings[pio].active_time;
|
||||
param3 = param1 = (time2 * bus_speed + 999) / 1000;
|
||||
param4 = param2 = (time1 * bus_speed + 999) / 1000 - param1;
|
||||
if (pio < 3) {
|
||||
param3 += 8;
|
||||
param4 += 8;
|
||||
}
|
||||
printk(KERN_DEBUG "%s: PIO mode%d, t1=%dns, t2=%dns, cycles = %d+%d, %d+%d\n",
|
||||
drive->name, pio, time1, time2, param1, param2, param3, param4);
|
||||
|
||||
/* stuff timing parameters into controller registers */
|
||||
driveNum = (HWIF(drive)->index << 1) + drive->select.b.unit;
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
outb_p(regOn, basePort);
|
||||
outReg(param1, regTab[driveNum].reg1);
|
||||
outReg(param2, regTab[driveNum].reg2);
|
||||
outReg(param3, regTab[driveNum].reg3);
|
||||
outReg(param4, regTab[driveNum].reg4);
|
||||
outb_p(regOff, basePort);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Auto-detect the IDE controller port.
|
||||
*/
|
||||
static int __init findPort (void)
|
||||
{
|
||||
int i;
|
||||
u8 t;
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
for (i = 0; i < ALI_NUM_PORTS; ++i) {
|
||||
basePort = ports[i];
|
||||
regOff = inb(basePort);
|
||||
for (regOn = 0x30; regOn <= 0x33; ++regOn) {
|
||||
outb_p(regOn, basePort);
|
||||
if (inb(basePort) == regOn) {
|
||||
regPort = basePort + 4;
|
||||
dataPort = basePort + 8;
|
||||
t = inReg(0) & 0xf0;
|
||||
outb_p(regOff, basePort);
|
||||
local_irq_restore(flags);
|
||||
if (t != 0x50)
|
||||
return 0;
|
||||
return 1; /* success */
|
||||
}
|
||||
}
|
||||
outb_p(regOff, basePort);
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize controller registers with default values.
|
||||
*/
|
||||
static int __init initRegisters (void) {
|
||||
RegInitializer *p;
|
||||
u8 t;
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
outb_p(regOn, basePort);
|
||||
for (p = initData; p->reg != 0; ++p)
|
||||
outReg(p->data, p->reg);
|
||||
outb_p(0x01, regPort);
|
||||
t = inb(regPort) & 0x01;
|
||||
outb_p(regOff, basePort);
|
||||
local_irq_restore(flags);
|
||||
return t;
|
||||
}
|
||||
|
||||
static int __init ali14xx_probe(void)
|
||||
{
|
||||
ide_hwif_t *hwif, *mate;
|
||||
|
||||
printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n",
|
||||
basePort, regOn);
|
||||
|
||||
/* initialize controller registers */
|
||||
if (!initRegisters()) {
|
||||
printk(KERN_ERR "ali14xx: Chip initialization failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
hwif = &ide_hwifs[0];
|
||||
mate = &ide_hwifs[1];
|
||||
|
||||
hwif->chipset = ide_ali14xx;
|
||||
hwif->tuneproc = &ali14xx_tune_drive;
|
||||
hwif->mate = mate;
|
||||
|
||||
mate->chipset = ide_ali14xx;
|
||||
mate->tuneproc = &ali14xx_tune_drive;
|
||||
mate->mate = hwif;
|
||||
mate->channel = 1;
|
||||
|
||||
probe_hwif_init(hwif);
|
||||
probe_hwif_init(mate);
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Can be called directly from ide.c. */
|
||||
int __init ali14xx_init(void)
|
||||
{
|
||||
/* auto-detect IDE controller port */
|
||||
if (findPort()) {
|
||||
if (ali14xx_probe())
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
}
|
||||
printk(KERN_ERR "ali14xx: not found.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#ifdef MODULE
|
||||
module_init(ali14xx_init);
|
||||
#endif
|
||||
|
||||
MODULE_AUTHOR("see local file");
|
||||
MODULE_DESCRIPTION("support of ALI 14XX IDE chipsets");
|
||||
MODULE_LICENSE("GPL");
|
||||
235
extra/linux-2.6.10/drivers/ide/legacy/buddha.c
Normal file
235
extra/linux-2.6.10/drivers/ide/legacy/buddha.c
Normal file
@@ -0,0 +1,235 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/buddha.c -- Amiga Buddha, Catweasel and X-Surf IDE Driver
|
||||
*
|
||||
* Copyright (C) 1997, 2001 by Geert Uytterhoeven and others
|
||||
*
|
||||
* This driver was written based on the specifications in README.buddha and
|
||||
* the X-Surf info from Inside_XSurf.txt available at
|
||||
* http://www.jschoenfeld.com
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive for
|
||||
* more details.
|
||||
*
|
||||
* TODO:
|
||||
* - test it :-)
|
||||
* - tune the timings using the speed-register
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/zorro.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/amigahw.h>
|
||||
#include <asm/amigaints.h>
|
||||
|
||||
|
||||
/*
|
||||
* The Buddha has 2 IDE interfaces, the Catweasel has 3, X-Surf has 2
|
||||
*/
|
||||
|
||||
#define BUDDHA_NUM_HWIFS 2
|
||||
#define CATWEASEL_NUM_HWIFS 3
|
||||
#define XSURF_NUM_HWIFS 2
|
||||
|
||||
/*
|
||||
* Bases of the IDE interfaces (relative to the board address)
|
||||
*/
|
||||
|
||||
#define BUDDHA_BASE1 0x800
|
||||
#define BUDDHA_BASE2 0xa00
|
||||
#define BUDDHA_BASE3 0xc00
|
||||
|
||||
#define XSURF_BASE1 0xb000 /* 2.5" Interface */
|
||||
#define XSURF_BASE2 0xd000 /* 3.5" Interface */
|
||||
|
||||
static u_int buddha_bases[CATWEASEL_NUM_HWIFS] __initdata = {
|
||||
BUDDHA_BASE1, BUDDHA_BASE2, BUDDHA_BASE3
|
||||
};
|
||||
|
||||
static u_int xsurf_bases[XSURF_NUM_HWIFS] __initdata = {
|
||||
XSURF_BASE1, XSURF_BASE2
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Offsets from one of the above bases
|
||||
*/
|
||||
|
||||
#define BUDDHA_DATA 0x00
|
||||
#define BUDDHA_ERROR 0x06 /* see err-bits */
|
||||
#define BUDDHA_NSECTOR 0x0a /* nr of sectors to read/write */
|
||||
#define BUDDHA_SECTOR 0x0e /* starting sector */
|
||||
#define BUDDHA_LCYL 0x12 /* starting cylinder */
|
||||
#define BUDDHA_HCYL 0x16 /* high byte of starting cyl */
|
||||
#define BUDDHA_SELECT 0x1a /* 101dhhhh , d=drive, hhhh=head */
|
||||
#define BUDDHA_STATUS 0x1e /* see status-bits */
|
||||
#define BUDDHA_CONTROL 0x11a
|
||||
#define XSURF_CONTROL -1 /* X-Surf has no CS1* (Control/AltStat) */
|
||||
|
||||
static int buddha_offsets[IDE_NR_PORTS] __initdata = {
|
||||
BUDDHA_DATA, BUDDHA_ERROR, BUDDHA_NSECTOR, BUDDHA_SECTOR, BUDDHA_LCYL,
|
||||
BUDDHA_HCYL, BUDDHA_SELECT, BUDDHA_STATUS, BUDDHA_CONTROL, -1
|
||||
};
|
||||
|
||||
static int xsurf_offsets[IDE_NR_PORTS] __initdata = {
|
||||
BUDDHA_DATA, BUDDHA_ERROR, BUDDHA_NSECTOR, BUDDHA_SECTOR, BUDDHA_LCYL,
|
||||
BUDDHA_HCYL, BUDDHA_SELECT, BUDDHA_STATUS, XSURF_CONTROL, -1
|
||||
};
|
||||
|
||||
/*
|
||||
* Other registers
|
||||
*/
|
||||
|
||||
#define BUDDHA_IRQ1 0xf00 /* MSB = 1, Harddisk is source of */
|
||||
#define BUDDHA_IRQ2 0xf40 /* interrupt */
|
||||
#define BUDDHA_IRQ3 0xf80
|
||||
|
||||
#define XSURF_IRQ1 0x7e
|
||||
#define XSURF_IRQ2 0x7e
|
||||
|
||||
static int buddha_irqports[CATWEASEL_NUM_HWIFS] __initdata = {
|
||||
BUDDHA_IRQ1, BUDDHA_IRQ2, BUDDHA_IRQ3
|
||||
};
|
||||
|
||||
static int xsurf_irqports[XSURF_NUM_HWIFS] __initdata = {
|
||||
XSURF_IRQ1, XSURF_IRQ2
|
||||
};
|
||||
|
||||
#define BUDDHA_IRQ_MR 0xfc0 /* master interrupt enable */
|
||||
|
||||
|
||||
/*
|
||||
* Board information
|
||||
*/
|
||||
|
||||
typedef enum BuddhaType_Enum {
|
||||
BOARD_BUDDHA, BOARD_CATWEASEL, BOARD_XSURF
|
||||
} BuddhaType;
|
||||
|
||||
|
||||
/*
|
||||
* Check and acknowledge the interrupt status
|
||||
*/
|
||||
|
||||
static int buddha_ack_intr(ide_hwif_t *hwif)
|
||||
{
|
||||
unsigned char ch;
|
||||
|
||||
ch = z_readb(hwif->io_ports[IDE_IRQ_OFFSET]);
|
||||
if (!(ch & 0x80))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int xsurf_ack_intr(ide_hwif_t *hwif)
|
||||
{
|
||||
unsigned char ch;
|
||||
|
||||
ch = z_readb(hwif->io_ports[IDE_IRQ_OFFSET]);
|
||||
/* X-Surf needs a 0 written to IRQ register to ensure ISA bit A11 stays at 0 */
|
||||
z_writeb(0, hwif->io_ports[IDE_IRQ_OFFSET]);
|
||||
if (!(ch & 0x80))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Probe for a Buddha or Catweasel IDE interface
|
||||
*/
|
||||
|
||||
void __init buddha_init(void)
|
||||
{
|
||||
hw_regs_t hw;
|
||||
ide_hwif_t *hwif;
|
||||
int i, index;
|
||||
|
||||
struct zorro_dev *z = NULL;
|
||||
u_long buddha_board = 0;
|
||||
BuddhaType type;
|
||||
int buddha_num_hwifs;
|
||||
|
||||
while ((z = zorro_find_device(ZORRO_WILDCARD, z))) {
|
||||
unsigned long board;
|
||||
if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA) {
|
||||
buddha_num_hwifs = BUDDHA_NUM_HWIFS;
|
||||
type=BOARD_BUDDHA;
|
||||
} else if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_CATWEASEL) {
|
||||
buddha_num_hwifs = CATWEASEL_NUM_HWIFS;
|
||||
type=BOARD_CATWEASEL;
|
||||
} else if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF) {
|
||||
buddha_num_hwifs = XSURF_NUM_HWIFS;
|
||||
type=BOARD_XSURF;
|
||||
} else
|
||||
continue;
|
||||
|
||||
board = z->resource.start;
|
||||
|
||||
/*
|
||||
* FIXME: we now have selectable mmio v/s iomio transports.
|
||||
*/
|
||||
|
||||
if(type != BOARD_XSURF) {
|
||||
if (!request_mem_region(board+BUDDHA_BASE1, 0x800, "IDE"))
|
||||
continue;
|
||||
} else {
|
||||
if (!request_mem_region(board+XSURF_BASE1, 0x1000, "IDE"))
|
||||
continue;
|
||||
if (!request_mem_region(board+XSURF_BASE2, 0x1000, "IDE"))
|
||||
goto fail_base2;
|
||||
if (!request_mem_region(board+XSURF_IRQ1, 0x8, "IDE")) {
|
||||
release_mem_region(board+XSURF_BASE2, 0x1000);
|
||||
fail_base2:
|
||||
release_mem_region(board+XSURF_BASE1, 0x1000);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
buddha_board = ZTWO_VADDR(board);
|
||||
|
||||
/* write to BUDDHA_IRQ_MR to enable the board IRQ */
|
||||
/* X-Surf doesn't have this. IRQs are always on */
|
||||
if (type != BOARD_XSURF)
|
||||
z_writeb(0, buddha_board+BUDDHA_IRQ_MR);
|
||||
|
||||
for(i=0;i<buddha_num_hwifs;i++) {
|
||||
if(type != BOARD_XSURF) {
|
||||
ide_setup_ports(&hw, (buddha_board+buddha_bases[i]),
|
||||
buddha_offsets, 0,
|
||||
(buddha_board+buddha_irqports[i]),
|
||||
buddha_ack_intr,
|
||||
// budda_iops,
|
||||
IRQ_AMIGA_PORTS);
|
||||
} else {
|
||||
ide_setup_ports(&hw, (buddha_board+xsurf_bases[i]),
|
||||
xsurf_offsets, 0,
|
||||
(buddha_board+xsurf_irqports[i]),
|
||||
xsurf_ack_intr,
|
||||
// xsurf_iops,
|
||||
IRQ_AMIGA_PORTS);
|
||||
}
|
||||
|
||||
index = ide_register_hw(&hw, &hwif);
|
||||
if (index != -1) {
|
||||
hwif->mmio = 2;
|
||||
printk("ide%d: ", index);
|
||||
switch(type) {
|
||||
case BOARD_BUDDHA:
|
||||
printk("Buddha");
|
||||
break;
|
||||
case BOARD_CATWEASEL:
|
||||
printk("Catweasel");
|
||||
break;
|
||||
case BOARD_XSURF:
|
||||
printk("X-Surf");
|
||||
break;
|
||||
}
|
||||
printk(" IDE interface\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1
extra/linux-2.6.10/drivers/ide/legacy/built-in.o
Normal file
1
extra/linux-2.6.10/drivers/ide/legacy/built-in.o
Normal file
@@ -0,0 +1 @@
|
||||
!<arch>
|
||||
165
extra/linux-2.6.10/drivers/ide/legacy/dtc2278.c
Normal file
165
extra/linux-2.6.10/drivers/ide/legacy/dtc2278.c
Normal file
@@ -0,0 +1,165 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/dtc2278.c Version 0.02 Feb 10, 1996
|
||||
*
|
||||
* Copyright (C) 1996 Linus Torvalds & author (see below)
|
||||
*/
|
||||
|
||||
#undef REALLY_SLOW_IO /* most systems can safely undef this */
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
/*
|
||||
* Changing this #undef to #define may solve start up problems in some systems.
|
||||
*/
|
||||
#undef ALWAYS_SET_DTC2278_PIO_MODE
|
||||
|
||||
/*
|
||||
* From: andy@cercle.cts.com (Dyan Wile)
|
||||
*
|
||||
* Below is a patch for DTC-2278 - alike software-programmable controllers
|
||||
* The code enables the secondary IDE controller and the PIO4 (3?) timings on
|
||||
* the primary (EIDE). You may probably have to enable the 32-bit support to
|
||||
* get the full speed. You better get the disk interrupts disabled ( hdparm -u0
|
||||
* /dev/hd.. ) for the drives connected to the EIDE interface. (I get my
|
||||
* filesystem corrupted with -u1, but under heavy disk load only :-)
|
||||
*
|
||||
* This card is now forced to use the "serialize" feature,
|
||||
* and irq-unmasking is disallowed. If io_32bit is enabled,
|
||||
* it must be done for BOTH drives on each interface.
|
||||
*
|
||||
* This code was written for the DTC2278E, but might work with any of these:
|
||||
*
|
||||
* DTC2278S has only a single IDE interface.
|
||||
* DTC2278D has two IDE interfaces and is otherwise identical to the S version.
|
||||
* DTC2278E also has serial ports and a printer port
|
||||
* DTC2278EB: has onboard BIOS, and "works like a charm" -- Kent Bradford <kent@theory.caltech.edu>
|
||||
*
|
||||
* There may be a fourth controller type. The S and D versions use the
|
||||
* Winbond chip, and I think the E version does also.
|
||||
*
|
||||
*/
|
||||
|
||||
static void sub22 (char b, char c)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < 3; ++i) {
|
||||
inb(0x3f6);
|
||||
outb_p(b,0xb0);
|
||||
inb(0x3f6);
|
||||
outb_p(c,0xb4);
|
||||
inb(0x3f6);
|
||||
if(inb(0xb4) == c) {
|
||||
outb_p(7,0xb0);
|
||||
inb(0x3f6);
|
||||
return; /* success */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void tune_dtc2278 (ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
pio = ide_get_best_pio_mode(drive, pio, 4, NULL);
|
||||
|
||||
if (pio >= 3) {
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
/*
|
||||
* This enables PIO mode4 (3?) on the first interface
|
||||
*/
|
||||
sub22(1,0xc3);
|
||||
sub22(0,0xa0);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
} else {
|
||||
/* we don't know how to set it back again.. */
|
||||
}
|
||||
|
||||
/*
|
||||
* 32bit I/O has to be enabled for *both* drives at the same time.
|
||||
*/
|
||||
drive->io_32bit = 1;
|
||||
HWIF(drive)->drives[!drive->select.b.unit].io_32bit = 1;
|
||||
}
|
||||
|
||||
static int __init probe_dtc2278(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
ide_hwif_t *hwif, *mate;
|
||||
|
||||
hwif = &ide_hwifs[0];
|
||||
mate = &ide_hwifs[1];
|
||||
|
||||
if (hwif->chipset != ide_unknown || mate->chipset != ide_unknown)
|
||||
return 1;
|
||||
|
||||
local_irq_save(flags);
|
||||
/*
|
||||
* This enables the second interface
|
||||
*/
|
||||
outb_p(4,0xb0);
|
||||
inb(0x3f6);
|
||||
outb_p(0x20,0xb4);
|
||||
inb(0x3f6);
|
||||
#ifdef ALWAYS_SET_DTC2278_PIO_MODE
|
||||
/*
|
||||
* This enables PIO mode4 (3?) on the first interface
|
||||
* and may solve start-up problems for some people.
|
||||
*/
|
||||
sub22(1,0xc3);
|
||||
sub22(0,0xa0);
|
||||
#endif
|
||||
local_irq_restore(flags);
|
||||
|
||||
hwif->serialized = 1;
|
||||
hwif->chipset = ide_dtc2278;
|
||||
hwif->tuneproc = &tune_dtc2278;
|
||||
hwif->drives[0].no_unmask = 1;
|
||||
hwif->drives[1].no_unmask = 1;
|
||||
hwif->mate = mate;
|
||||
|
||||
mate->serialized = 1;
|
||||
mate->chipset = ide_dtc2278;
|
||||
mate->drives[0].no_unmask = 1;
|
||||
mate->drives[1].no_unmask = 1;
|
||||
mate->mate = hwif;
|
||||
mate->channel = 1;
|
||||
|
||||
probe_hwif_init(hwif);
|
||||
probe_hwif_init(mate);
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Can be called directly from ide.c. */
|
||||
int __init dtc2278_init(void)
|
||||
{
|
||||
if (probe_dtc2278()) {
|
||||
printk(KERN_ERR "dtc2278: ide interfaces already in use!\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef MODULE
|
||||
module_init(dtc2278_init);
|
||||
#endif
|
||||
|
||||
MODULE_AUTHOR("See Local File");
|
||||
MODULE_DESCRIPTION("support of DTC-2278 VLB IDE chipsets");
|
||||
MODULE_LICENSE("GPL");
|
||||
78
extra/linux-2.6.10/drivers/ide/legacy/falconide.c
Normal file
78
extra/linux-2.6.10/drivers/ide/legacy/falconide.c
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/falconide.c -- Atari Falcon IDE Driver
|
||||
*
|
||||
* Created 12 Jul 1997 by Geert Uytterhoeven
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/atariints.h>
|
||||
#include <asm/atari_stdma.h>
|
||||
|
||||
|
||||
/*
|
||||
* Base of the IDE interface
|
||||
*/
|
||||
|
||||
#define ATA_HD_BASE 0xfff00000
|
||||
|
||||
/*
|
||||
* Offsets from the above base
|
||||
*/
|
||||
|
||||
#define ATA_HD_DATA 0x00
|
||||
#define ATA_HD_ERROR 0x05 /* see err-bits */
|
||||
#define ATA_HD_NSECTOR 0x09 /* nr of sectors to read/write */
|
||||
#define ATA_HD_SECTOR 0x0d /* starting sector */
|
||||
#define ATA_HD_LCYL 0x11 /* starting cylinder */
|
||||
#define ATA_HD_HCYL 0x15 /* high byte of starting cyl */
|
||||
#define ATA_HD_SELECT 0x19 /* 101dhhhh , d=drive, hhhh=head */
|
||||
#define ATA_HD_STATUS 0x1d /* see status-bits */
|
||||
#define ATA_HD_CONTROL 0x39
|
||||
|
||||
static int falconide_offsets[IDE_NR_PORTS] __initdata = {
|
||||
ATA_HD_DATA, ATA_HD_ERROR, ATA_HD_NSECTOR, ATA_HD_SECTOR, ATA_HD_LCYL,
|
||||
ATA_HD_HCYL, ATA_HD_SELECT, ATA_HD_STATUS, ATA_HD_CONTROL, -1
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* falconide_intr_lock is used to obtain access to the IDE interrupt,
|
||||
* which is shared between several drivers.
|
||||
*/
|
||||
|
||||
int falconide_intr_lock;
|
||||
|
||||
|
||||
/*
|
||||
* Probe for a Falcon IDE interface
|
||||
*/
|
||||
|
||||
void __init falconide_init(void)
|
||||
{
|
||||
if (MACH_IS_ATARI && ATARIHW_PRESENT(IDE)) {
|
||||
hw_regs_t hw;
|
||||
int index;
|
||||
|
||||
ide_setup_ports(&hw, ATA_HD_BASE, falconide_offsets,
|
||||
0, 0, NULL,
|
||||
// falconide_iops,
|
||||
IRQ_MFP_IDE);
|
||||
index = ide_register_hw(&hw, NULL);
|
||||
|
||||
if (index != -1)
|
||||
printk("ide%d: Falcon IDE interface\n", index);
|
||||
}
|
||||
}
|
||||
186
extra/linux-2.6.10/drivers/ide/legacy/gayle.c
Normal file
186
extra/linux-2.6.10/drivers/ide/legacy/gayle.c
Normal file
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/gayle.c -- Amiga Gayle IDE Driver
|
||||
*
|
||||
* Created 9 Jul 1997 by Geert Uytterhoeven
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/zorro.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/amigahw.h>
|
||||
#include <asm/amigaints.h>
|
||||
#include <asm/amigayle.h>
|
||||
|
||||
|
||||
/*
|
||||
* Bases of the IDE interfaces
|
||||
*/
|
||||
|
||||
#define GAYLE_BASE_4000 0xdd2020 /* A4000/A4000T */
|
||||
#define GAYLE_BASE_1200 0xda0000 /* A1200/A600 and E-Matrix 530 */
|
||||
|
||||
/*
|
||||
* Offsets from one of the above bases
|
||||
*/
|
||||
|
||||
#define GAYLE_DATA 0x00
|
||||
#define GAYLE_ERROR 0x06 /* see err-bits */
|
||||
#define GAYLE_NSECTOR 0x0a /* nr of sectors to read/write */
|
||||
#define GAYLE_SECTOR 0x0e /* starting sector */
|
||||
#define GAYLE_LCYL 0x12 /* starting cylinder */
|
||||
#define GAYLE_HCYL 0x16 /* high byte of starting cyl */
|
||||
#define GAYLE_SELECT 0x1a /* 101dhhhh , d=drive, hhhh=head */
|
||||
#define GAYLE_STATUS 0x1e /* see status-bits */
|
||||
#define GAYLE_CONTROL 0x101a
|
||||
|
||||
static int gayle_offsets[IDE_NR_PORTS] __initdata = {
|
||||
GAYLE_DATA, GAYLE_ERROR, GAYLE_NSECTOR, GAYLE_SECTOR, GAYLE_LCYL,
|
||||
GAYLE_HCYL, GAYLE_SELECT, GAYLE_STATUS, -1, -1
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* These are at different offsets from the base
|
||||
*/
|
||||
|
||||
#define GAYLE_IRQ_4000 0xdd3020 /* MSB = 1, Harddisk is source of */
|
||||
#define GAYLE_IRQ_1200 0xda9000 /* interrupt */
|
||||
|
||||
|
||||
/*
|
||||
* Offset of the secondary port for IDE doublers
|
||||
* Note that GAYLE_CONTROL is NOT available then!
|
||||
*/
|
||||
|
||||
#define GAYLE_NEXT_PORT 0x1000
|
||||
|
||||
#ifndef CONFIG_BLK_DEV_IDEDOUBLER
|
||||
#define GAYLE_NUM_HWIFS 1
|
||||
#define GAYLE_NUM_PROBE_HWIFS GAYLE_NUM_HWIFS
|
||||
#define GAYLE_HAS_CONTROL_REG 1
|
||||
#define GAYLE_IDEREG_SIZE 0x2000
|
||||
#else /* CONFIG_BLK_DEV_IDEDOUBLER */
|
||||
#define GAYLE_NUM_HWIFS 2
|
||||
#define GAYLE_NUM_PROBE_HWIFS (ide_doubler ? GAYLE_NUM_HWIFS : \
|
||||
GAYLE_NUM_HWIFS-1)
|
||||
#define GAYLE_HAS_CONTROL_REG (!ide_doubler)
|
||||
#define GAYLE_IDEREG_SIZE (ide_doubler ? 0x1000 : 0x2000)
|
||||
int ide_doubler = 0; /* support IDE doublers? */
|
||||
#endif /* CONFIG_BLK_DEV_IDEDOUBLER */
|
||||
|
||||
|
||||
/*
|
||||
* Check and acknowledge the interrupt status
|
||||
*/
|
||||
|
||||
static int gayle_ack_intr_a4000(ide_hwif_t *hwif)
|
||||
{
|
||||
unsigned char ch;
|
||||
|
||||
ch = z_readb(hwif->io_ports[IDE_IRQ_OFFSET]);
|
||||
if (!(ch & GAYLE_IRQ_IDE))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int gayle_ack_intr_a1200(ide_hwif_t *hwif)
|
||||
{
|
||||
unsigned char ch;
|
||||
|
||||
ch = z_readb(hwif->io_ports[IDE_IRQ_OFFSET]);
|
||||
if (!(ch & GAYLE_IRQ_IDE))
|
||||
return 0;
|
||||
(void)z_readb(hwif->io_ports[IDE_STATUS_OFFSET]);
|
||||
z_writeb(0x7c, hwif->io_ports[IDE_IRQ_OFFSET]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Probe for a Gayle IDE interface (and optionally for an IDE doubler)
|
||||
*/
|
||||
|
||||
void __init gayle_init(void)
|
||||
{
|
||||
int a4000, i;
|
||||
|
||||
if (!MACH_IS_AMIGA)
|
||||
return;
|
||||
|
||||
if ((a4000 = AMIGAHW_PRESENT(A4000_IDE)) || AMIGAHW_PRESENT(A1200_IDE))
|
||||
goto found;
|
||||
|
||||
#ifdef CONFIG_ZORRO
|
||||
if (zorro_find_device(ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE,
|
||||
NULL))
|
||||
goto found;
|
||||
#endif
|
||||
return;
|
||||
|
||||
found:
|
||||
for (i = 0; i < GAYLE_NUM_PROBE_HWIFS; i++) {
|
||||
unsigned long base, ctrlport, irqport;
|
||||
ide_ack_intr_t *ack_intr;
|
||||
hw_regs_t hw;
|
||||
ide_hwif_t *hwif;
|
||||
int index;
|
||||
unsigned long phys_base, res_start, res_n;
|
||||
|
||||
if (a4000) {
|
||||
phys_base = GAYLE_BASE_4000;
|
||||
irqport = (unsigned long)ZTWO_VADDR(GAYLE_IRQ_4000);
|
||||
ack_intr = gayle_ack_intr_a4000;
|
||||
} else {
|
||||
phys_base = GAYLE_BASE_1200;
|
||||
irqport = (unsigned long)ZTWO_VADDR(GAYLE_IRQ_1200);
|
||||
ack_intr = gayle_ack_intr_a1200;
|
||||
}
|
||||
/*
|
||||
* FIXME: we now have selectable modes between mmio v/s iomio
|
||||
*/
|
||||
|
||||
phys_base += i*GAYLE_NEXT_PORT;
|
||||
|
||||
res_start = ((unsigned long)phys_base) & ~(GAYLE_NEXT_PORT-1);
|
||||
res_n = GAYLE_IDEREG_SIZE;
|
||||
|
||||
if (!request_mem_region(res_start, res_n, "IDE"))
|
||||
continue;
|
||||
|
||||
base = (unsigned long)ZTWO_VADDR(phys_base);
|
||||
ctrlport = GAYLE_HAS_CONTROL_REG ? (base + GAYLE_CONTROL) : 0;
|
||||
|
||||
ide_setup_ports(&hw, base, gayle_offsets,
|
||||
ctrlport, irqport, ack_intr,
|
||||
// &gayle_iops,
|
||||
IRQ_AMIGA_PORTS);
|
||||
|
||||
index = ide_register_hw(&hw, &hwif);
|
||||
if (index != -1) {
|
||||
hwif->mmio = 2;
|
||||
switch (i) {
|
||||
case 0:
|
||||
printk("ide%d: Gayle IDE interface (A%d style)\n", index,
|
||||
a4000 ? 4000 : 1200);
|
||||
break;
|
||||
#ifdef CONFIG_BLK_DEV_IDEDOUBLER
|
||||
case 1:
|
||||
printk("ide%d: IDE doubler\n", index);
|
||||
break;
|
||||
#endif /* CONFIG_BLK_DEV_IDEDOUBLER */
|
||||
}
|
||||
} else
|
||||
release_mem_region(res_start, res_n);
|
||||
}
|
||||
}
|
||||
864
extra/linux-2.6.10/drivers/ide/legacy/hd.c
Normal file
864
extra/linux-2.6.10/drivers/ide/legacy/hd.c
Normal file
@@ -0,0 +1,864 @@
|
||||
/*
|
||||
* Copyright (C) 1991, 1992 Linus Torvalds
|
||||
*
|
||||
* This is the low-level hd interrupt support. It traverses the
|
||||
* request-list, using interrupts to jump between functions. As
|
||||
* all the functions are called within interrupts, we may not
|
||||
* sleep. Special care is recommended.
|
||||
*
|
||||
* modified by Drew Eckhardt to check nr of hd's from the CMOS.
|
||||
*
|
||||
* Thanks to Branko Lankester, lankeste@fwi.uva.nl, who found a bug
|
||||
* in the early extended-partition checks and added DM partitions
|
||||
*
|
||||
* IRQ-unmask, drive-id, multiple-mode, support for ">16 heads",
|
||||
* and general streamlining by Mark Lord.
|
||||
*
|
||||
* Removed 99% of above. Use Mark's ide driver for those options.
|
||||
* This is now a lightweight ST-506 driver. (Paul Gortmaker)
|
||||
*
|
||||
* Modified 1995 Russell King for ARM processor.
|
||||
*
|
||||
* Bugfix: max_sectors must be <= 255 or the wheels tend to come
|
||||
* off in a hurry once you queue things up - Paul G. 02/2001
|
||||
*/
|
||||
|
||||
/* Uncomment the following if you want verbose error reports. */
|
||||
/* #define VERBOSE_ERRORS */
|
||||
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/mc146818rtc.h> /* CMOS defines */
|
||||
#include <linux/init.h>
|
||||
#include <linux/blkpg.h>
|
||||
#include <linux/hdreg.h>
|
||||
|
||||
#define REALLY_SLOW_IO
|
||||
#include <asm/system.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#ifdef __arm__
|
||||
#undef HD_IRQ
|
||||
#endif
|
||||
#include <asm/irq.h>
|
||||
#ifdef __arm__
|
||||
#define HD_IRQ IRQ_HARDDISK
|
||||
#endif
|
||||
|
||||
/* Hd controller regster ports */
|
||||
|
||||
#define HD_DATA 0x1f0 /* _CTL when writing */
|
||||
#define HD_ERROR 0x1f1 /* see err-bits */
|
||||
#define HD_NSECTOR 0x1f2 /* nr of sectors to read/write */
|
||||
#define HD_SECTOR 0x1f3 /* starting sector */
|
||||
#define HD_LCYL 0x1f4 /* starting cylinder */
|
||||
#define HD_HCYL 0x1f5 /* high byte of starting cyl */
|
||||
#define HD_CURRENT 0x1f6 /* 101dhhhh , d=drive, hhhh=head */
|
||||
#define HD_STATUS 0x1f7 /* see status-bits */
|
||||
#define HD_FEATURE HD_ERROR /* same io address, read=error, write=feature */
|
||||
#define HD_PRECOMP HD_FEATURE /* obsolete use of this port - predates IDE */
|
||||
#define HD_COMMAND HD_STATUS /* same io address, read=status, write=cmd */
|
||||
|
||||
#define HD_CMD 0x3f6 /* used for resets */
|
||||
#define HD_ALTSTATUS 0x3f6 /* same as HD_STATUS but doesn't clear irq */
|
||||
|
||||
/* Bits of HD_STATUS */
|
||||
#define ERR_STAT 0x01
|
||||
#define INDEX_STAT 0x02
|
||||
#define ECC_STAT 0x04 /* Corrected error */
|
||||
#define DRQ_STAT 0x08
|
||||
#define SEEK_STAT 0x10
|
||||
#define SERVICE_STAT SEEK_STAT
|
||||
#define WRERR_STAT 0x20
|
||||
#define READY_STAT 0x40
|
||||
#define BUSY_STAT 0x80
|
||||
|
||||
/* Bits for HD_ERROR */
|
||||
#define MARK_ERR 0x01 /* Bad address mark */
|
||||
#define TRK0_ERR 0x02 /* couldn't find track 0 */
|
||||
#define ABRT_ERR 0x04 /* Command aborted */
|
||||
#define MCR_ERR 0x08 /* media change request */
|
||||
#define ID_ERR 0x10 /* ID field not found */
|
||||
#define MC_ERR 0x20 /* media changed */
|
||||
#define ECC_ERR 0x40 /* Uncorrectable ECC error */
|
||||
#define BBD_ERR 0x80 /* pre-EIDE meaning: block marked bad */
|
||||
#define ICRC_ERR 0x80 /* new meaning: CRC error during transfer */
|
||||
|
||||
static spinlock_t hd_lock = SPIN_LOCK_UNLOCKED;
|
||||
static struct request_queue *hd_queue;
|
||||
|
||||
#define MAJOR_NR HD_MAJOR
|
||||
#define QUEUE (hd_queue)
|
||||
#define CURRENT elv_next_request(hd_queue)
|
||||
|
||||
#define TIMEOUT_VALUE (6*HZ)
|
||||
#define HD_DELAY 0
|
||||
|
||||
#define MAX_ERRORS 16 /* Max read/write errors/sector */
|
||||
#define RESET_FREQ 8 /* Reset controller every 8th retry */
|
||||
#define RECAL_FREQ 4 /* Recalibrate every 4th retry */
|
||||
#define MAX_HD 2
|
||||
|
||||
#define STAT_OK (READY_STAT|SEEK_STAT)
|
||||
#define OK_STATUS(s) (((s)&(STAT_OK|(BUSY_STAT|WRERR_STAT|ERR_STAT)))==STAT_OK)
|
||||
|
||||
static void recal_intr(void);
|
||||
static void bad_rw_intr(void);
|
||||
|
||||
static int reset;
|
||||
static int hd_error;
|
||||
|
||||
/*
|
||||
* This struct defines the HD's and their types.
|
||||
*/
|
||||
struct hd_i_struct {
|
||||
unsigned int head,sect,cyl,wpcom,lzone,ctl;
|
||||
int unit;
|
||||
int recalibrate;
|
||||
int special_op;
|
||||
};
|
||||
|
||||
#ifdef HD_TYPE
|
||||
static struct hd_i_struct hd_info[] = { HD_TYPE };
|
||||
static int NR_HD = ((sizeof (hd_info))/(sizeof (struct hd_i_struct)));
|
||||
#else
|
||||
static struct hd_i_struct hd_info[MAX_HD];
|
||||
static int NR_HD;
|
||||
#endif
|
||||
|
||||
static struct gendisk *hd_gendisk[MAX_HD];
|
||||
|
||||
static struct timer_list device_timer;
|
||||
|
||||
#define TIMEOUT_VALUE (6*HZ)
|
||||
|
||||
#define SET_TIMER \
|
||||
do { \
|
||||
mod_timer(&device_timer, jiffies + TIMEOUT_VALUE); \
|
||||
} while (0)
|
||||
|
||||
static void (*do_hd)(void) = NULL;
|
||||
#define SET_HANDLER(x) \
|
||||
if ((do_hd = (x)) != NULL) \
|
||||
SET_TIMER; \
|
||||
else \
|
||||
del_timer(&device_timer);
|
||||
|
||||
|
||||
#if (HD_DELAY > 0)
|
||||
unsigned long last_req;
|
||||
|
||||
unsigned long read_timer(void)
|
||||
{
|
||||
extern spinlock_t i8253_lock;
|
||||
unsigned long t, flags;
|
||||
int i;
|
||||
|
||||
spin_lock_irqsave(&i8253_lock, flags);
|
||||
t = jiffies * 11932;
|
||||
outb_p(0, 0x43);
|
||||
i = inb_p(0x40);
|
||||
i |= inb(0x40) << 8;
|
||||
spin_unlock_irqrestore(&i8253_lock, flags);
|
||||
return(t - i);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void __init hd_setup(char *str, int *ints)
|
||||
{
|
||||
int hdind = 0;
|
||||
|
||||
if (ints[0] != 3)
|
||||
return;
|
||||
if (hd_info[0].head != 0)
|
||||
hdind=1;
|
||||
hd_info[hdind].head = ints[2];
|
||||
hd_info[hdind].sect = ints[3];
|
||||
hd_info[hdind].cyl = ints[1];
|
||||
hd_info[hdind].wpcom = 0;
|
||||
hd_info[hdind].lzone = ints[1];
|
||||
hd_info[hdind].ctl = (ints[2] > 8 ? 8 : 0);
|
||||
NR_HD = hdind+1;
|
||||
}
|
||||
|
||||
static void dump_status (const char *msg, unsigned int stat)
|
||||
{
|
||||
char *name = "hd?";
|
||||
if (CURRENT)
|
||||
name = CURRENT->rq_disk->disk_name;
|
||||
|
||||
#ifdef VERBOSE_ERRORS
|
||||
printk("%s: %s: status=0x%02x { ", name, msg, stat & 0xff);
|
||||
if (stat & BUSY_STAT) printk("Busy ");
|
||||
if (stat & READY_STAT) printk("DriveReady ");
|
||||
if (stat & WRERR_STAT) printk("WriteFault ");
|
||||
if (stat & SEEK_STAT) printk("SeekComplete ");
|
||||
if (stat & DRQ_STAT) printk("DataRequest ");
|
||||
if (stat & ECC_STAT) printk("CorrectedError ");
|
||||
if (stat & INDEX_STAT) printk("Index ");
|
||||
if (stat & ERR_STAT) printk("Error ");
|
||||
printk("}\n");
|
||||
if ((stat & ERR_STAT) == 0) {
|
||||
hd_error = 0;
|
||||
} else {
|
||||
hd_error = inb(HD_ERROR);
|
||||
printk("%s: %s: error=0x%02x { ", name, msg, hd_error & 0xff);
|
||||
if (hd_error & BBD_ERR) printk("BadSector ");
|
||||
if (hd_error & ECC_ERR) printk("UncorrectableError ");
|
||||
if (hd_error & ID_ERR) printk("SectorIdNotFound ");
|
||||
if (hd_error & ABRT_ERR) printk("DriveStatusError ");
|
||||
if (hd_error & TRK0_ERR) printk("TrackZeroNotFound ");
|
||||
if (hd_error & MARK_ERR) printk("AddrMarkNotFound ");
|
||||
printk("}");
|
||||
if (hd_error & (BBD_ERR|ECC_ERR|ID_ERR|MARK_ERR)) {
|
||||
printk(", CHS=%d/%d/%d", (inb(HD_HCYL)<<8) + inb(HD_LCYL),
|
||||
inb(HD_CURRENT) & 0xf, inb(HD_SECTOR));
|
||||
if (CURRENT)
|
||||
printk(", sector=%ld", CURRENT->sector);
|
||||
}
|
||||
printk("\n");
|
||||
}
|
||||
#else
|
||||
printk("%s: %s: status=0x%02x.\n", name, msg, stat & 0xff);
|
||||
if ((stat & ERR_STAT) == 0) {
|
||||
hd_error = 0;
|
||||
} else {
|
||||
hd_error = inb(HD_ERROR);
|
||||
printk("%s: %s: error=0x%02x.\n", name, msg, hd_error & 0xff);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void check_status(void)
|
||||
{
|
||||
int i = inb_p(HD_STATUS);
|
||||
|
||||
if (!OK_STATUS(i)) {
|
||||
dump_status("check_status", i);
|
||||
bad_rw_intr();
|
||||
}
|
||||
}
|
||||
|
||||
static int controller_busy(void)
|
||||
{
|
||||
int retries = 100000;
|
||||
unsigned char status;
|
||||
|
||||
do {
|
||||
status = inb_p(HD_STATUS);
|
||||
} while ((status & BUSY_STAT) && --retries);
|
||||
return status;
|
||||
}
|
||||
|
||||
static int status_ok(void)
|
||||
{
|
||||
unsigned char status = inb_p(HD_STATUS);
|
||||
|
||||
if (status & BUSY_STAT)
|
||||
return 1; /* Ancient, but does it make sense??? */
|
||||
if (status & WRERR_STAT)
|
||||
return 0;
|
||||
if (!(status & READY_STAT))
|
||||
return 0;
|
||||
if (!(status & SEEK_STAT))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int controller_ready(unsigned int drive, unsigned int head)
|
||||
{
|
||||
int retry = 100;
|
||||
|
||||
do {
|
||||
if (controller_busy() & BUSY_STAT)
|
||||
return 0;
|
||||
outb_p(0xA0 | (drive<<4) | head, HD_CURRENT);
|
||||
if (status_ok())
|
||||
return 1;
|
||||
} while (--retry);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void hd_out(struct hd_i_struct *disk,
|
||||
unsigned int nsect,
|
||||
unsigned int sect,
|
||||
unsigned int head,
|
||||
unsigned int cyl,
|
||||
unsigned int cmd,
|
||||
void (*intr_addr)(void))
|
||||
{
|
||||
unsigned short port;
|
||||
|
||||
#if (HD_DELAY > 0)
|
||||
while (read_timer() - last_req < HD_DELAY)
|
||||
/* nothing */;
|
||||
#endif
|
||||
if (reset)
|
||||
return;
|
||||
if (!controller_ready(disk->unit, head)) {
|
||||
reset = 1;
|
||||
return;
|
||||
}
|
||||
SET_HANDLER(intr_addr);
|
||||
outb_p(disk->ctl,HD_CMD);
|
||||
port=HD_DATA;
|
||||
outb_p(disk->wpcom>>2,++port);
|
||||
outb_p(nsect,++port);
|
||||
outb_p(sect,++port);
|
||||
outb_p(cyl,++port);
|
||||
outb_p(cyl>>8,++port);
|
||||
outb_p(0xA0|(disk->unit<<4)|head,++port);
|
||||
outb_p(cmd,++port);
|
||||
}
|
||||
|
||||
static void hd_request (void);
|
||||
|
||||
static int drive_busy(void)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned char c;
|
||||
|
||||
for (i = 0; i < 500000 ; i++) {
|
||||
c = inb_p(HD_STATUS);
|
||||
if ((c & (BUSY_STAT | READY_STAT | SEEK_STAT)) == STAT_OK)
|
||||
return 0;
|
||||
}
|
||||
dump_status("reset timed out", c);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void reset_controller(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
outb_p(4,HD_CMD);
|
||||
for(i = 0; i < 1000; i++) barrier();
|
||||
outb_p(hd_info[0].ctl & 0x0f,HD_CMD);
|
||||
for(i = 0; i < 1000; i++) barrier();
|
||||
if (drive_busy())
|
||||
printk("hd: controller still busy\n");
|
||||
else if ((hd_error = inb(HD_ERROR)) != 1)
|
||||
printk("hd: controller reset failed: %02x\n",hd_error);
|
||||
}
|
||||
|
||||
static void reset_hd(void)
|
||||
{
|
||||
static int i;
|
||||
|
||||
repeat:
|
||||
if (reset) {
|
||||
reset = 0;
|
||||
i = -1;
|
||||
reset_controller();
|
||||
} else {
|
||||
check_status();
|
||||
if (reset)
|
||||
goto repeat;
|
||||
}
|
||||
if (++i < NR_HD) {
|
||||
struct hd_i_struct *disk = &hd_info[i];
|
||||
disk->special_op = disk->recalibrate = 1;
|
||||
hd_out(disk,disk->sect,disk->sect,disk->head-1,
|
||||
disk->cyl,WIN_SPECIFY,&reset_hd);
|
||||
if (reset)
|
||||
goto repeat;
|
||||
} else
|
||||
hd_request();
|
||||
}
|
||||
|
||||
/*
|
||||
* Ok, don't know what to do with the unexpected interrupts: on some machines
|
||||
* doing a reset and a retry seems to result in an eternal loop. Right now I
|
||||
* ignore it, and just set the timeout.
|
||||
*
|
||||
* On laptops (and "green" PCs), an unexpected interrupt occurs whenever the
|
||||
* drive enters "idle", "standby", or "sleep" mode, so if the status looks
|
||||
* "good", we just ignore the interrupt completely.
|
||||
*/
|
||||
static void unexpected_hd_interrupt(void)
|
||||
{
|
||||
unsigned int stat = inb_p(HD_STATUS);
|
||||
|
||||
if (stat & (BUSY_STAT|DRQ_STAT|ECC_STAT|ERR_STAT)) {
|
||||
dump_status ("unexpected interrupt", stat);
|
||||
SET_TIMER;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* bad_rw_intr() now tries to be a bit smarter and does things
|
||||
* according to the error returned by the controller.
|
||||
* -Mika Liljeberg (liljeber@cs.Helsinki.FI)
|
||||
*/
|
||||
static void bad_rw_intr(void)
|
||||
{
|
||||
struct request *req = CURRENT;
|
||||
if (req != NULL) {
|
||||
struct hd_i_struct *disk = req->rq_disk->private_data;
|
||||
if (++req->errors >= MAX_ERRORS || (hd_error & BBD_ERR)) {
|
||||
end_request(req, 0);
|
||||
disk->special_op = disk->recalibrate = 1;
|
||||
} else if (req->errors % RESET_FREQ == 0)
|
||||
reset = 1;
|
||||
else if ((hd_error & TRK0_ERR) || req->errors % RECAL_FREQ == 0)
|
||||
disk->special_op = disk->recalibrate = 1;
|
||||
/* Otherwise just retry */
|
||||
}
|
||||
}
|
||||
|
||||
static inline int wait_DRQ(void)
|
||||
{
|
||||
int retries = 100000, stat;
|
||||
|
||||
while (--retries > 0)
|
||||
if ((stat = inb_p(HD_STATUS)) & DRQ_STAT)
|
||||
return 0;
|
||||
dump_status("wait_DRQ", stat);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void read_intr(void)
|
||||
{
|
||||
struct request *req;
|
||||
int i, retries = 100000;
|
||||
|
||||
do {
|
||||
i = (unsigned) inb_p(HD_STATUS);
|
||||
if (i & BUSY_STAT)
|
||||
continue;
|
||||
if (!OK_STATUS(i))
|
||||
break;
|
||||
if (i & DRQ_STAT)
|
||||
goto ok_to_read;
|
||||
} while (--retries > 0);
|
||||
dump_status("read_intr", i);
|
||||
bad_rw_intr();
|
||||
hd_request();
|
||||
return;
|
||||
ok_to_read:
|
||||
req = CURRENT;
|
||||
insw(HD_DATA,req->buffer,256);
|
||||
req->sector++;
|
||||
req->buffer += 512;
|
||||
req->errors = 0;
|
||||
i = --req->nr_sectors;
|
||||
--req->current_nr_sectors;
|
||||
#ifdef DEBUG
|
||||
printk("%s: read: sector %ld, remaining = %ld, buffer=%p\n",
|
||||
req->rq_disk->disk_name, req->sector, req->nr_sectors,
|
||||
req->buffer+512));
|
||||
#endif
|
||||
if (req->current_nr_sectors <= 0)
|
||||
end_request(req, 1);
|
||||
if (i > 0) {
|
||||
SET_HANDLER(&read_intr);
|
||||
return;
|
||||
}
|
||||
(void) inb_p(HD_STATUS);
|
||||
#if (HD_DELAY > 0)
|
||||
last_req = read_timer();
|
||||
#endif
|
||||
if (elv_next_request(QUEUE))
|
||||
hd_request();
|
||||
return;
|
||||
}
|
||||
|
||||
static void write_intr(void)
|
||||
{
|
||||
struct request *req = CURRENT;
|
||||
int i;
|
||||
int retries = 100000;
|
||||
|
||||
do {
|
||||
i = (unsigned) inb_p(HD_STATUS);
|
||||
if (i & BUSY_STAT)
|
||||
continue;
|
||||
if (!OK_STATUS(i))
|
||||
break;
|
||||
if ((req->nr_sectors <= 1) || (i & DRQ_STAT))
|
||||
goto ok_to_write;
|
||||
} while (--retries > 0);
|
||||
dump_status("write_intr", i);
|
||||
bad_rw_intr();
|
||||
hd_request();
|
||||
return;
|
||||
ok_to_write:
|
||||
req->sector++;
|
||||
i = --req->nr_sectors;
|
||||
--req->current_nr_sectors;
|
||||
req->buffer += 512;
|
||||
if (!i || (req->bio && req->current_nr_sectors <= 0))
|
||||
end_request(req, 1);
|
||||
if (i > 0) {
|
||||
SET_HANDLER(&write_intr);
|
||||
outsw(HD_DATA,req->buffer,256);
|
||||
local_irq_enable();
|
||||
} else {
|
||||
#if (HD_DELAY > 0)
|
||||
last_req = read_timer();
|
||||
#endif
|
||||
hd_request();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static void recal_intr(void)
|
||||
{
|
||||
check_status();
|
||||
#if (HD_DELAY > 0)
|
||||
last_req = read_timer();
|
||||
#endif
|
||||
hd_request();
|
||||
}
|
||||
|
||||
/*
|
||||
* This is another of the error-routines I don't know what to do with. The
|
||||
* best idea seems to just set reset, and start all over again.
|
||||
*/
|
||||
static void hd_times_out(unsigned long dummy)
|
||||
{
|
||||
char *name;
|
||||
|
||||
do_hd = NULL;
|
||||
|
||||
if (!CURRENT)
|
||||
return;
|
||||
|
||||
disable_irq(HD_IRQ);
|
||||
local_irq_enable();
|
||||
reset = 1;
|
||||
name = CURRENT->rq_disk->disk_name;
|
||||
printk("%s: timeout\n", name);
|
||||
if (++CURRENT->errors >= MAX_ERRORS) {
|
||||
#ifdef DEBUG
|
||||
printk("%s: too many errors\n", name);
|
||||
#endif
|
||||
end_request(CURRENT, 0);
|
||||
}
|
||||
local_irq_disable();
|
||||
hd_request();
|
||||
enable_irq(HD_IRQ);
|
||||
}
|
||||
|
||||
static int do_special_op(struct hd_i_struct *disk, struct request *req)
|
||||
{
|
||||
if (disk->recalibrate) {
|
||||
disk->recalibrate = 0;
|
||||
hd_out(disk,disk->sect,0,0,0,WIN_RESTORE,&recal_intr);
|
||||
return reset;
|
||||
}
|
||||
if (disk->head > 16) {
|
||||
printk ("%s: cannot handle device with more than 16 heads - giving up\n", req->rq_disk->disk_name);
|
||||
end_request(req, 0);
|
||||
}
|
||||
disk->special_op = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* The driver enables interrupts as much as possible. In order to do this,
|
||||
* (a) the device-interrupt is disabled before entering hd_request(),
|
||||
* and (b) the timeout-interrupt is disabled before the sti().
|
||||
*
|
||||
* Interrupts are still masked (by default) whenever we are exchanging
|
||||
* data/cmds with a drive, because some drives seem to have very poor
|
||||
* tolerance for latency during I/O. The IDE driver has support to unmask
|
||||
* interrupts for non-broken hardware, so use that driver if required.
|
||||
*/
|
||||
static void hd_request(void)
|
||||
{
|
||||
unsigned int block, nsect, sec, track, head, cyl;
|
||||
struct hd_i_struct *disk;
|
||||
struct request *req;
|
||||
|
||||
if (do_hd)
|
||||
return;
|
||||
repeat:
|
||||
del_timer(&device_timer);
|
||||
local_irq_enable();
|
||||
|
||||
req = CURRENT;
|
||||
if (!req) {
|
||||
do_hd = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (reset) {
|
||||
local_irq_disable();
|
||||
reset_hd();
|
||||
return;
|
||||
}
|
||||
disk = req->rq_disk->private_data;
|
||||
block = req->sector;
|
||||
nsect = req->nr_sectors;
|
||||
if (block >= get_capacity(req->rq_disk) ||
|
||||
((block+nsect) > get_capacity(req->rq_disk))) {
|
||||
printk("%s: bad access: block=%d, count=%d\n",
|
||||
req->rq_disk->disk_name, block, nsect);
|
||||
end_request(req, 0);
|
||||
goto repeat;
|
||||
}
|
||||
|
||||
if (disk->special_op) {
|
||||
if (do_special_op(disk, req))
|
||||
goto repeat;
|
||||
return;
|
||||
}
|
||||
sec = block % disk->sect + 1;
|
||||
track = block / disk->sect;
|
||||
head = track % disk->head;
|
||||
cyl = track / disk->head;
|
||||
#ifdef DEBUG
|
||||
printk("%s: %sing: CHS=%d/%d/%d, sectors=%d, buffer=%p\n",
|
||||
req->rq_disk->disk_name, (req->cmd == READ)?"read":"writ",
|
||||
cyl, head, sec, nsect, req->buffer);
|
||||
#endif
|
||||
if (req->flags & REQ_CMD) {
|
||||
switch (rq_data_dir(req)) {
|
||||
case READ:
|
||||
hd_out(disk,nsect,sec,head,cyl,WIN_READ,&read_intr);
|
||||
if (reset)
|
||||
goto repeat;
|
||||
break;
|
||||
case WRITE:
|
||||
hd_out(disk,nsect,sec,head,cyl,WIN_WRITE,&write_intr);
|
||||
if (reset)
|
||||
goto repeat;
|
||||
if (wait_DRQ()) {
|
||||
bad_rw_intr();
|
||||
goto repeat;
|
||||
}
|
||||
outsw(HD_DATA,req->buffer,256);
|
||||
break;
|
||||
default:
|
||||
printk("unknown hd-command\n");
|
||||
end_request(req, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void do_hd_request (request_queue_t * q)
|
||||
{
|
||||
disable_irq(HD_IRQ);
|
||||
hd_request();
|
||||
enable_irq(HD_IRQ);
|
||||
}
|
||||
|
||||
static int hd_ioctl(struct inode * inode, struct file * file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct hd_i_struct *disk = inode->i_bdev->bd_disk->private_data;
|
||||
struct hd_geometry __user *loc = (struct hd_geometry __user *) arg;
|
||||
struct hd_geometry g;
|
||||
|
||||
if (cmd != HDIO_GETGEO)
|
||||
return -EINVAL;
|
||||
if (!loc)
|
||||
return -EINVAL;
|
||||
g.heads = disk->head;
|
||||
g.sectors = disk->sect;
|
||||
g.cylinders = disk->cyl;
|
||||
g.start = get_start_sect(inode->i_bdev);
|
||||
return copy_to_user(loc, &g, sizeof g) ? -EFAULT : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Releasing a block device means we sync() it, so that it can safely
|
||||
* be forgotten about...
|
||||
*/
|
||||
|
||||
static irqreturn_t hd_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
void (*handler)(void) = do_hd;
|
||||
|
||||
do_hd = NULL;
|
||||
del_timer(&device_timer);
|
||||
if (!handler)
|
||||
handler = unexpected_hd_interrupt;
|
||||
handler();
|
||||
local_irq_enable();
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static struct block_device_operations hd_fops = {
|
||||
.ioctl = hd_ioctl,
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the hard disk IRQ description. The SA_INTERRUPT in sa_flags
|
||||
* means we run the IRQ-handler with interrupts disabled: this is bad for
|
||||
* interrupt latency, but anything else has led to problems on some
|
||||
* machines.
|
||||
*
|
||||
* We enable interrupts in some of the routines after making sure it's
|
||||
* safe.
|
||||
*/
|
||||
|
||||
static int __init hd_init(void)
|
||||
{
|
||||
int drive;
|
||||
|
||||
if (register_blkdev(MAJOR_NR,"hd"))
|
||||
return -1;
|
||||
|
||||
hd_queue = blk_init_queue(do_hd_request, &hd_lock);
|
||||
if (!hd_queue) {
|
||||
unregister_blkdev(MAJOR_NR,"hd");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
blk_queue_max_sectors(hd_queue, 255);
|
||||
init_timer(&device_timer);
|
||||
device_timer.function = hd_times_out;
|
||||
blk_queue_hardsect_size(hd_queue, 512);
|
||||
|
||||
#ifdef __i386__
|
||||
if (!NR_HD) {
|
||||
extern struct drive_info drive_info;
|
||||
unsigned char *BIOS = (unsigned char *) &drive_info;
|
||||
unsigned long flags;
|
||||
int cmos_disks;
|
||||
|
||||
for (drive=0 ; drive<2 ; drive++) {
|
||||
hd_info[drive].cyl = *(unsigned short *) BIOS;
|
||||
hd_info[drive].head = *(2+BIOS);
|
||||
hd_info[drive].wpcom = *(unsigned short *) (5+BIOS);
|
||||
hd_info[drive].ctl = *(8+BIOS);
|
||||
hd_info[drive].lzone = *(unsigned short *) (12+BIOS);
|
||||
hd_info[drive].sect = *(14+BIOS);
|
||||
#ifdef does_not_work_for_everybody_with_scsi_but_helps_ibm_vp
|
||||
if (hd_info[drive].cyl && NR_HD == drive)
|
||||
NR_HD++;
|
||||
#endif
|
||||
BIOS += 16;
|
||||
}
|
||||
|
||||
/*
|
||||
We query CMOS about hard disks : it could be that
|
||||
we have a SCSI/ESDI/etc controller that is BIOS
|
||||
compatible with ST-506, and thus showing up in our
|
||||
BIOS table, but not register compatible, and therefore
|
||||
not present in CMOS.
|
||||
|
||||
Furthermore, we will assume that our ST-506 drives
|
||||
<if any> are the primary drives in the system, and
|
||||
the ones reflected as drive 1 or 2.
|
||||
|
||||
The first drive is stored in the high nibble of CMOS
|
||||
byte 0x12, the second in the low nibble. This will be
|
||||
either a 4 bit drive type or 0xf indicating use byte 0x19
|
||||
for an 8 bit type, drive 1, 0x1a for drive 2 in CMOS.
|
||||
|
||||
Needless to say, a non-zero value means we have
|
||||
an AT controller hard disk for that drive.
|
||||
|
||||
Currently the rtc_lock is a bit academic since this
|
||||
driver is non-modular, but someday... ? Paul G.
|
||||
*/
|
||||
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
cmos_disks = CMOS_READ(0x12);
|
||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||
|
||||
if (cmos_disks & 0xf0) {
|
||||
if (cmos_disks & 0x0f)
|
||||
NR_HD = 2;
|
||||
else
|
||||
NR_HD = 1;
|
||||
}
|
||||
}
|
||||
#endif /* __i386__ */
|
||||
#ifdef __arm__
|
||||
if (!NR_HD) {
|
||||
/* We don't know anything about the drive. This means
|
||||
* that you *MUST* specify the drive parameters to the
|
||||
* kernel yourself.
|
||||
*/
|
||||
printk("hd: no drives specified - use hd=cyl,head,sectors"
|
||||
" on kernel command line\n");
|
||||
}
|
||||
#endif
|
||||
if (!NR_HD)
|
||||
goto out;
|
||||
|
||||
for (drive=0 ; drive < NR_HD ; drive++) {
|
||||
struct gendisk *disk = alloc_disk(64);
|
||||
struct hd_i_struct *p = &hd_info[drive];
|
||||
if (!disk)
|
||||
goto Enomem;
|
||||
disk->major = MAJOR_NR;
|
||||
disk->first_minor = drive << 6;
|
||||
disk->fops = &hd_fops;
|
||||
sprintf(disk->disk_name, "hd%c", 'a'+drive);
|
||||
disk->private_data = p;
|
||||
set_capacity(disk, p->head * p->sect * p->cyl);
|
||||
disk->queue = hd_queue;
|
||||
p->unit = drive;
|
||||
hd_gendisk[drive] = disk;
|
||||
printk ("%s: %luMB, CHS=%d/%d/%d\n",
|
||||
disk->disk_name, (unsigned long)get_capacity(disk)/2048,
|
||||
p->cyl, p->head, p->sect);
|
||||
}
|
||||
|
||||
if (request_irq(HD_IRQ, hd_interrupt, SA_INTERRUPT, "hd", NULL)) {
|
||||
printk("hd: unable to get IRQ%d for the hard disk driver\n",
|
||||
HD_IRQ);
|
||||
goto out1;
|
||||
}
|
||||
if (!request_region(HD_DATA, 8, "hd")) {
|
||||
printk(KERN_WARNING "hd: port 0x%x busy\n", HD_DATA);
|
||||
goto out2;
|
||||
}
|
||||
if (!request_region(HD_CMD, 1, "hd(cmd)")) {
|
||||
printk(KERN_WARNING "hd: port 0x%x busy\n", HD_CMD);
|
||||
goto out3;
|
||||
}
|
||||
|
||||
/* Let them fly */
|
||||
for(drive=0; drive < NR_HD; drive++)
|
||||
add_disk(hd_gendisk[drive]);
|
||||
|
||||
return 0;
|
||||
|
||||
out3:
|
||||
release_region(HD_DATA, 8);
|
||||
out2:
|
||||
free_irq(HD_IRQ, NULL);
|
||||
out1:
|
||||
for (drive = 0; drive < NR_HD; drive++)
|
||||
put_disk(hd_gendisk[drive]);
|
||||
NR_HD = 0;
|
||||
out:
|
||||
del_timer(&device_timer);
|
||||
unregister_blkdev(MAJOR_NR,"hd");
|
||||
blk_cleanup_queue(hd_queue);
|
||||
return -1;
|
||||
Enomem:
|
||||
while (drive--)
|
||||
put_disk(hd_gendisk[drive]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
static int parse_hd_setup (char *line) {
|
||||
int ints[6];
|
||||
|
||||
(void) get_options(line, ARRAY_SIZE(ints), ints);
|
||||
hd_setup(NULL, ints);
|
||||
|
||||
return 1;
|
||||
}
|
||||
__setup("hd=", parse_hd_setup);
|
||||
|
||||
module_init(hd_init);
|
||||
370
extra/linux-2.6.10/drivers/ide/legacy/ht6560b.c
Normal file
370
extra/linux-2.6.10/drivers/ide/legacy/ht6560b.c
Normal file
@@ -0,0 +1,370 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/ht6560b.c Version 0.07 Feb 1, 2000
|
||||
*
|
||||
* Copyright (C) 1995-2000 Linus Torvalds & author (see below)
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Version 0.01 Initial version hacked out of ide.c
|
||||
*
|
||||
* Version 0.02 Added support for PIO modes, auto-tune
|
||||
*
|
||||
* Version 0.03 Some cleanups
|
||||
*
|
||||
* Version 0.05 PIO mode cycle timings auto-tune using bus-speed
|
||||
*
|
||||
* Version 0.06 Prefetch mode now defaults no OFF. To set
|
||||
* prefetch mode OFF/ON use "hdparm -p8/-p9".
|
||||
* Unmask irq is disabled when prefetch mode
|
||||
* is enabled.
|
||||
*
|
||||
* Version 0.07 Trying to fix CD-ROM detection problem.
|
||||
* "Prefetch" mode bit OFF for ide disks and
|
||||
* ON for anything else.
|
||||
*
|
||||
*
|
||||
* HT-6560B EIDE-controller support
|
||||
* To activate controller support use kernel parameter "ide0=ht6560b".
|
||||
* Use hdparm utility to enable PIO mode support.
|
||||
*
|
||||
* Author: Mikko Ala-Fossi <maf@iki.fi>
|
||||
* Jan Evert van Grootheest <janevert@iae.nl>
|
||||
*
|
||||
* Try: http://www.maf.iki.fi/~maf/ht6560b/
|
||||
*/
|
||||
|
||||
#define HT6560B_VERSION "v0.07"
|
||||
|
||||
#undef REALLY_SLOW_IO /* most systems can safely undef this */
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
/* #define DEBUG */ /* remove comments for DEBUG messages */
|
||||
|
||||
/*
|
||||
* The special i/o-port that HT-6560B uses to configuration:
|
||||
* bit0 (0x01): "1" selects secondary interface
|
||||
* bit2 (0x04): "1" enables FIFO function
|
||||
* bit5 (0x20): "1" enables prefetched data read function (???)
|
||||
*
|
||||
* The special i/o-port that HT-6560A uses to configuration:
|
||||
* bit0 (0x01): "1" selects secondary interface
|
||||
* bit1 (0x02): "1" enables prefetched data read function
|
||||
* bit2 (0x04): "0" enables multi-master system (?)
|
||||
* bit3 (0x08): "1" 3 cycle time, "0" 2 cycle time (?)
|
||||
*/
|
||||
#define HT_CONFIG_PORT 0x3e6
|
||||
#define HT_CONFIG(drivea) (u8)(((drivea)->drive_data & 0xff00) >> 8)
|
||||
/*
|
||||
* FIFO + PREFETCH (both a/b-model)
|
||||
*/
|
||||
#define HT_CONFIG_DEFAULT 0x1c /* no prefetch */
|
||||
/* #define HT_CONFIG_DEFAULT 0x3c */ /* with prefetch */
|
||||
#define HT_SECONDARY_IF 0x01
|
||||
#define HT_PREFETCH_MODE 0x20
|
||||
|
||||
/*
|
||||
* ht6560b Timing values:
|
||||
*
|
||||
* I reviewed some assembler source listings of htide drivers and found
|
||||
* out how they setup those cycle time interfacing values, as they at Holtek
|
||||
* call them. IDESETUP.COM that is supplied with the drivers figures out
|
||||
* optimal values and fetches those values to drivers. I found out that
|
||||
* they use IDE_SELECT_REG to fetch timings to the ide board right after
|
||||
* interface switching. After that it was quite easy to add code to
|
||||
* ht6560b.c.
|
||||
*
|
||||
* IDESETUP.COM gave me values 0x24, 0x45, 0xaa, 0xff that worked fine
|
||||
* for hda and hdc. But hdb needed higher values to work, so I guess
|
||||
* that sometimes it is necessary to give higher value than IDESETUP
|
||||
* gives. [see cmd640.c for an extreme example of this. -ml]
|
||||
*
|
||||
* Perhaps I should explain something about these timing values:
|
||||
* The higher nibble of value is the Recovery Time (rt) and the lower nibble
|
||||
* of the value is the Active Time (at). Minimum value 2 is the fastest and
|
||||
* the maximum value 15 is the slowest. Default values should be 15 for both.
|
||||
* So 0x24 means 2 for rt and 4 for at. Each of the drives should have
|
||||
* both values, and IDESETUP gives automatically rt=15 st=15 for CDROMs or
|
||||
* similar. If value is too small there will be all sorts of failures.
|
||||
*
|
||||
* Timing byte consists of
|
||||
* High nibble: Recovery Cycle Time (rt)
|
||||
* The valid values range from 2 to 15. The default is 15.
|
||||
*
|
||||
* Low nibble: Active Cycle Time (at)
|
||||
* The valid values range from 2 to 15. The default is 15.
|
||||
*
|
||||
* You can obtain optimized timing values by running Holtek IDESETUP.COM
|
||||
* for DOS. DOS drivers get their timing values from command line, where
|
||||
* the first value is the Recovery Time and the second value is the
|
||||
* Active Time for each drive. Smaller value gives higher speed.
|
||||
* In case of failures you should probably fall back to a higher value.
|
||||
*/
|
||||
#define HT_TIMING(drivea) (u8)((drivea)->drive_data & 0x00ff)
|
||||
#define HT_TIMING_DEFAULT 0xff
|
||||
|
||||
/*
|
||||
* This routine handles interface switching for the peculiar hardware design
|
||||
* on the F.G.I./Holtek HT-6560B VLB IDE interface.
|
||||
* The HT-6560B can only enable one IDE port at a time, and requires a
|
||||
* silly sequence (below) whenever we switch between primary and secondary.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This routine is invoked from ide.c to prepare for access to a given drive.
|
||||
*/
|
||||
static void ht6560b_selectproc (ide_drive_t *drive)
|
||||
{
|
||||
unsigned long flags;
|
||||
static u8 current_select = 0;
|
||||
static u8 current_timing = 0;
|
||||
u8 select, timing;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
select = HT_CONFIG(drive);
|
||||
timing = HT_TIMING(drive);
|
||||
|
||||
if (select != current_select || timing != current_timing) {
|
||||
current_select = select;
|
||||
current_timing = timing;
|
||||
if (drive->media != ide_disk || !drive->present)
|
||||
select |= HT_PREFETCH_MODE;
|
||||
(void) HWIF(drive)->INB(HT_CONFIG_PORT);
|
||||
(void) HWIF(drive)->INB(HT_CONFIG_PORT);
|
||||
(void) HWIF(drive)->INB(HT_CONFIG_PORT);
|
||||
(void) HWIF(drive)->INB(HT_CONFIG_PORT);
|
||||
HWIF(drive)->OUTB(select, HT_CONFIG_PORT);
|
||||
/*
|
||||
* Set timing for this drive:
|
||||
*/
|
||||
HWIF(drive)->OUTB(timing, IDE_SELECT_REG);
|
||||
(void) HWIF(drive)->INB(IDE_STATUS_REG);
|
||||
#ifdef DEBUG
|
||||
printk("ht6560b: %s: select=%#x timing=%#x\n",
|
||||
drive->name, select, timing);
|
||||
#endif
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Autodetection and initialization of ht6560b
|
||||
*/
|
||||
static int __init try_to_init_ht6560b(void)
|
||||
{
|
||||
u8 orig_value;
|
||||
int i;
|
||||
|
||||
/* Autodetect ht6560b */
|
||||
if ((orig_value = inb(HT_CONFIG_PORT)) == 0xff)
|
||||
return 0;
|
||||
|
||||
for (i=3;i>0;i--) {
|
||||
outb(0x00, HT_CONFIG_PORT);
|
||||
if (!( (~inb(HT_CONFIG_PORT)) & 0x3f )) {
|
||||
outb(orig_value, HT_CONFIG_PORT);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
outb(0x00, HT_CONFIG_PORT);
|
||||
if ((~inb(HT_CONFIG_PORT))& 0x3f) {
|
||||
outb(orig_value, HT_CONFIG_PORT);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* Ht6560b autodetected
|
||||
*/
|
||||
outb(HT_CONFIG_DEFAULT, HT_CONFIG_PORT);
|
||||
outb(HT_TIMING_DEFAULT, 0x1f6); /* IDE_SELECT_REG */
|
||||
(void) inb(0x1f7); /* IDE_STATUS_REG */
|
||||
|
||||
printk("\nht6560b " HT6560B_VERSION
|
||||
": chipset detected and initialized"
|
||||
#ifdef DEBUG
|
||||
" with debug enabled"
|
||||
#endif
|
||||
);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u8 ht_pio2timings(ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
int active_time, recovery_time;
|
||||
int active_cycles, recovery_cycles;
|
||||
ide_pio_data_t d;
|
||||
int bus_speed = system_bus_clock();
|
||||
|
||||
if (pio) {
|
||||
pio = ide_get_best_pio_mode(drive, pio, 5, &d);
|
||||
|
||||
/*
|
||||
* Just like opti621.c we try to calculate the
|
||||
* actual cycle time for recovery and activity
|
||||
* according system bus speed.
|
||||
*/
|
||||
active_time = ide_pio_timings[pio].active_time;
|
||||
recovery_time = d.cycle_time
|
||||
- active_time
|
||||
- ide_pio_timings[pio].setup_time;
|
||||
/*
|
||||
* Cycle times should be Vesa bus cycles
|
||||
*/
|
||||
active_cycles = (active_time * bus_speed + 999) / 1000;
|
||||
recovery_cycles = (recovery_time * bus_speed + 999) / 1000;
|
||||
/*
|
||||
* Upper and lower limits
|
||||
*/
|
||||
if (active_cycles < 2) active_cycles = 2;
|
||||
if (recovery_cycles < 2) recovery_cycles = 2;
|
||||
if (active_cycles > 15) active_cycles = 15;
|
||||
if (recovery_cycles > 15) recovery_cycles = 0; /* 0==16 */
|
||||
|
||||
#ifdef DEBUG
|
||||
printk("ht6560b: drive %s setting pio=%d recovery=%d (%dns) active=%d (%dns)\n", drive->name, pio, recovery_cycles, recovery_time, active_cycles, active_time);
|
||||
#endif
|
||||
|
||||
return (u8)((recovery_cycles << 4) | active_cycles);
|
||||
} else {
|
||||
|
||||
#ifdef DEBUG
|
||||
printk("ht6560b: drive %s setting pio=0\n", drive->name);
|
||||
#endif
|
||||
|
||||
return HT_TIMING_DEFAULT; /* default setting */
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable/Disable so called prefetch mode
|
||||
*/
|
||||
static void ht_set_prefetch(ide_drive_t *drive, u8 state)
|
||||
{
|
||||
unsigned long flags;
|
||||
int t = HT_PREFETCH_MODE << 8;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
|
||||
/*
|
||||
* Prefetch mode and unmask irq seems to conflict
|
||||
*/
|
||||
if (state) {
|
||||
drive->drive_data |= t; /* enable prefetch mode */
|
||||
drive->no_unmask = 1;
|
||||
drive->unmask = 0;
|
||||
} else {
|
||||
drive->drive_data &= ~t; /* disable prefetch mode */
|
||||
drive->no_unmask = 0;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
|
||||
#ifdef DEBUG
|
||||
printk("ht6560b: drive %s prefetch mode %sabled\n", drive->name, (state ? "en" : "dis"));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void tune_ht6560b (ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
unsigned long flags;
|
||||
u8 timing;
|
||||
|
||||
switch (pio) {
|
||||
case 8: /* set prefetch off */
|
||||
case 9: /* set prefetch on */
|
||||
ht_set_prefetch(drive, pio & 1);
|
||||
return;
|
||||
}
|
||||
|
||||
timing = ht_pio2timings(drive, pio);
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
|
||||
drive->drive_data &= 0xff00;
|
||||
drive->drive_data |= timing;
|
||||
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
|
||||
#ifdef DEBUG
|
||||
printk("ht6560b: drive %s tuned to pio mode %#x timing=%#x\n", drive->name, pio, timing);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Can be called directly from ide.c. */
|
||||
int __init ht6560b_init(void)
|
||||
{
|
||||
ide_hwif_t *hwif, *mate;
|
||||
int t;
|
||||
|
||||
hwif = &ide_hwifs[0];
|
||||
mate = &ide_hwifs[1];
|
||||
|
||||
if (!request_region(HT_CONFIG_PORT, 1, hwif->name)) {
|
||||
printk(KERN_NOTICE "%s: HT_CONFIG_PORT not found\n",
|
||||
__FUNCTION__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!try_to_init_ht6560b()) {
|
||||
printk(KERN_NOTICE "%s: HBA not found\n", __FUNCTION__);
|
||||
goto release_region;
|
||||
}
|
||||
|
||||
hwif->chipset = ide_ht6560b;
|
||||
hwif->selectproc = &ht6560b_selectproc;
|
||||
hwif->tuneproc = &tune_ht6560b;
|
||||
hwif->serialized = 1; /* is this needed? */
|
||||
hwif->mate = mate;
|
||||
|
||||
mate->chipset = ide_ht6560b;
|
||||
mate->selectproc = &ht6560b_selectproc;
|
||||
mate->tuneproc = &tune_ht6560b;
|
||||
mate->serialized = 1; /* is this needed? */
|
||||
mate->mate = hwif;
|
||||
mate->channel = 1;
|
||||
|
||||
/*
|
||||
* Setting default configurations for drives
|
||||
*/
|
||||
t = (HT_CONFIG_DEFAULT << 8);
|
||||
t |= HT_TIMING_DEFAULT;
|
||||
hwif->drives[0].drive_data = t;
|
||||
hwif->drives[1].drive_data = t;
|
||||
|
||||
t |= (HT_SECONDARY_IF << 8);
|
||||
mate->drives[0].drive_data = t;
|
||||
mate->drives[1].drive_data = t;
|
||||
|
||||
probe_hwif_init(hwif);
|
||||
probe_hwif_init(mate);
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 0;
|
||||
|
||||
release_region:
|
||||
release_region(HT_CONFIG_PORT, 1);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#ifdef MODULE
|
||||
module_init(ht6560b_init);
|
||||
#endif
|
||||
|
||||
MODULE_AUTHOR("See Local File");
|
||||
MODULE_DESCRIPTION("HT-6560B EIDE-controller support");
|
||||
MODULE_LICENSE("GPL");
|
||||
493
extra/linux-2.6.10/drivers/ide/legacy/ide-cs.c
Normal file
493
extra/linux-2.6.10/drivers/ide/legacy/ide-cs.c
Normal file
@@ -0,0 +1,493 @@
|
||||
/*======================================================================
|
||||
|
||||
A driver for PCMCIA IDE/ATA disk cards
|
||||
|
||||
ide-cs.c 1.3 2002/10/26 05:45:31
|
||||
|
||||
The contents of this file are subject to the Mozilla Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/MPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The initial developer of the original code is David A. Hinds
|
||||
<dahinds@users.sourceforge.net>. Portions created by David A. Hinds
|
||||
are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
|
||||
|
||||
Alternatively, the contents of this file may be used under the
|
||||
terms of the GNU General Public License version 2 (the "GPL"), in
|
||||
which case the provisions of the GPL are applicable instead of the
|
||||
above. If you wish to allow the use of your version of this file
|
||||
only under the terms of the GPL and not to allow others to use
|
||||
your version of this file under the MPL, indicate your decision
|
||||
by deleting the provisions above and replace them with the notice
|
||||
and other provisions required by the GPL. If you do not delete
|
||||
the provisions above, a recipient may use your version of this
|
||||
file under either the MPL or the GPL.
|
||||
|
||||
======================================================================*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/major.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include <pcmcia/version.h>
|
||||
#include <pcmcia/cs_types.h>
|
||||
#include <pcmcia/cs.h>
|
||||
#include <pcmcia/cistpl.h>
|
||||
#include <pcmcia/ds.h>
|
||||
#include <pcmcia/cisreg.h>
|
||||
#include <pcmcia/ciscode.h>
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
/* Module parameters */
|
||||
|
||||
MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
|
||||
MODULE_DESCRIPTION("PCMCIA ATA/IDE card driver");
|
||||
MODULE_LICENSE("Dual MPL/GPL");
|
||||
|
||||
#define INT_MODULE_PARM(n, v) static int n = v; MODULE_PARM(n, "i")
|
||||
|
||||
/* Bit map of interrupts to choose from */
|
||||
INT_MODULE_PARM(irq_mask, 0xdeb8);
|
||||
static int irq_list[4] = { -1 };
|
||||
MODULE_PARM(irq_list, "1-4i");
|
||||
|
||||
#ifdef PCMCIA_DEBUG
|
||||
INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
|
||||
#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
|
||||
static char *version =
|
||||
"ide-cs.c 1.3 2002/10/26 05:45:31 (David Hinds)";
|
||||
#else
|
||||
#define DEBUG(n, args...)
|
||||
#endif
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
static const char ide_major[] = {
|
||||
IDE0_MAJOR, IDE1_MAJOR, IDE2_MAJOR, IDE3_MAJOR,
|
||||
IDE4_MAJOR, IDE5_MAJOR
|
||||
};
|
||||
|
||||
typedef struct ide_info_t {
|
||||
dev_link_t link;
|
||||
int ndev;
|
||||
dev_node_t node;
|
||||
int hd;
|
||||
} ide_info_t;
|
||||
|
||||
static void ide_release(dev_link_t *);
|
||||
static int ide_event(event_t event, int priority,
|
||||
event_callback_args_t *args);
|
||||
|
||||
static dev_info_t dev_info = "ide-cs";
|
||||
|
||||
static dev_link_t *ide_attach(void);
|
||||
static void ide_detach(dev_link_t *);
|
||||
|
||||
static dev_link_t *dev_list = NULL;
|
||||
|
||||
/*======================================================================
|
||||
|
||||
ide_attach() creates an "instance" of the driver, allocating
|
||||
local data structures for one device. The device is registered
|
||||
with Card Services.
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static dev_link_t *ide_attach(void)
|
||||
{
|
||||
ide_info_t *info;
|
||||
dev_link_t *link;
|
||||
client_reg_t client_reg;
|
||||
int i, ret;
|
||||
|
||||
DEBUG(0, "ide_attach()\n");
|
||||
|
||||
/* Create new ide device */
|
||||
info = kmalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info) return NULL;
|
||||
memset(info, 0, sizeof(*info));
|
||||
link = &info->link; link->priv = info;
|
||||
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.IOAddrLines = 3;
|
||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||
link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
|
||||
if (irq_list[0] == -1)
|
||||
link->irq.IRQInfo2 = irq_mask;
|
||||
else
|
||||
for (i = 0; i < 4; i++)
|
||||
link->irq.IRQInfo2 |= 1 << irq_list[i];
|
||||
link->conf.Attributes = CONF_ENABLE_IRQ;
|
||||
link->conf.Vcc = 50;
|
||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||
|
||||
/* Register with Card Services */
|
||||
link->next = dev_list;
|
||||
dev_list = link;
|
||||
client_reg.dev_info = &dev_info;
|
||||
client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
|
||||
client_reg.EventMask =
|
||||
CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
|
||||
CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
|
||||
CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
|
||||
client_reg.event_handler = &ide_event;
|
||||
client_reg.Version = 0x0210;
|
||||
client_reg.event_callback_args.client_data = link;
|
||||
ret = pcmcia_register_client(&link->handle, &client_reg);
|
||||
if (ret != CS_SUCCESS) {
|
||||
cs_error(link->handle, RegisterClient, ret);
|
||||
ide_detach(link);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return link;
|
||||
} /* ide_attach */
|
||||
|
||||
/*======================================================================
|
||||
|
||||
This deletes a driver "instance". The device is de-registered
|
||||
with Card Services. If it has been released, all local data
|
||||
structures are freed. Otherwise, the structures will be freed
|
||||
when the device is released.
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void ide_detach(dev_link_t *link)
|
||||
{
|
||||
dev_link_t **linkp;
|
||||
int ret;
|
||||
|
||||
DEBUG(0, "ide_detach(0x%p)\n", link);
|
||||
|
||||
/* Locate device structure */
|
||||
for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
|
||||
if (*linkp == link) break;
|
||||
if (*linkp == NULL)
|
||||
return;
|
||||
|
||||
if (link->state & DEV_CONFIG)
|
||||
ide_release(link);
|
||||
|
||||
if (link->handle) {
|
||||
ret = pcmcia_deregister_client(link->handle);
|
||||
if (ret != CS_SUCCESS)
|
||||
cs_error(link->handle, DeregisterClient, ret);
|
||||
}
|
||||
|
||||
/* Unlink, free device structure */
|
||||
*linkp = link->next;
|
||||
kfree(link->priv);
|
||||
|
||||
} /* ide_detach */
|
||||
|
||||
static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq)
|
||||
{
|
||||
hw_regs_t hw;
|
||||
memset(&hw, 0, sizeof(hw));
|
||||
ide_init_hwif_ports(&hw, io, ctl, NULL);
|
||||
hw.irq = irq;
|
||||
hw.chipset = ide_pci;
|
||||
return ide_register_hw_with_fixup(&hw, NULL, ide_undecoded_slave);
|
||||
}
|
||||
|
||||
/*======================================================================
|
||||
|
||||
ide_config() is scheduled to run after a CARD_INSERTION event
|
||||
is received, to configure the PCMCIA socket, and to make the
|
||||
ide device available to the system.
|
||||
|
||||
======================================================================*/
|
||||
|
||||
#define CS_CHECK(fn, ret) \
|
||||
do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
||||
|
||||
void ide_config(dev_link_t *link)
|
||||
{
|
||||
client_handle_t handle = link->handle;
|
||||
ide_info_t *info = link->priv;
|
||||
tuple_t tuple;
|
||||
struct {
|
||||
u_short buf[128];
|
||||
cisparse_t parse;
|
||||
config_info_t conf;
|
||||
cistpl_cftable_entry_t dflt;
|
||||
} *stk = NULL;
|
||||
cistpl_cftable_entry_t *cfg;
|
||||
int i, pass, last_ret = 0, last_fn = 0, hd, is_kme = 0;
|
||||
unsigned long io_base, ctl_base;
|
||||
|
||||
DEBUG(0, "ide_config(0x%p)\n", link);
|
||||
|
||||
stk = kmalloc(sizeof(*stk), GFP_KERNEL);
|
||||
if (!stk) goto err_mem;
|
||||
memset(stk, 0, sizeof(*stk));
|
||||
cfg = &stk->parse.cftable_entry;
|
||||
|
||||
tuple.TupleData = (cisdata_t *)&stk->buf;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.TupleDataMax = 255;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &stk->parse));
|
||||
link->conf.ConfigBase = stk->parse.config.base;
|
||||
link->conf.Present = stk->parse.config.rmask[0];
|
||||
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if (!pcmcia_get_first_tuple(handle, &tuple) &&
|
||||
!pcmcia_get_tuple_data(handle, &tuple) &&
|
||||
!pcmcia_parse_tuple(handle, &tuple, &stk->parse))
|
||||
is_kme = ((stk->parse.manfid.manf == MANFID_KME) &&
|
||||
((stk->parse.manfid.card == PRODID_KME_KXLC005_A) ||
|
||||
(stk->parse.manfid.card == PRODID_KME_KXLC005_B)));
|
||||
|
||||
/* Configure card */
|
||||
link->state |= DEV_CONFIG;
|
||||
|
||||
/* Not sure if this is right... look up the current Vcc */
|
||||
CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(handle, &stk->conf));
|
||||
link->conf.Vcc = stk->conf.Vcc;
|
||||
|
||||
pass = io_base = ctl_base = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
tuple.Attributes = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
while (1) {
|
||||
if (pcmcia_get_tuple_data(handle, &tuple) != 0) goto next_entry;
|
||||
if (pcmcia_parse_tuple(handle, &tuple, &stk->parse) != 0) goto next_entry;
|
||||
|
||||
/* Check for matching Vcc, unless we're desperate */
|
||||
if (!pass) {
|
||||
if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
|
||||
if (stk->conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000)
|
||||
goto next_entry;
|
||||
} else if (stk->dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) {
|
||||
if (stk->conf.Vcc != stk->dflt.vcc.param[CISTPL_POWER_VNOM] / 10000)
|
||||
goto next_entry;
|
||||
}
|
||||
}
|
||||
|
||||
if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
|
||||
link->conf.Vpp1 = link->conf.Vpp2 =
|
||||
cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
|
||||
else if (stk->dflt.vpp1.present & (1 << CISTPL_POWER_VNOM))
|
||||
link->conf.Vpp1 = link->conf.Vpp2 =
|
||||
stk->dflt.vpp1.param[CISTPL_POWER_VNOM] / 10000;
|
||||
|
||||
if ((cfg->io.nwin > 0) || (stk->dflt.io.nwin > 0)) {
|
||||
cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &stk->dflt.io;
|
||||
link->conf.ConfigIndex = cfg->index;
|
||||
link->io.BasePort1 = io->win[0].base;
|
||||
link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
|
||||
if (!(io->flags & CISTPL_IO_16BIT))
|
||||
link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
|
||||
if (io->nwin == 2) {
|
||||
link->io.NumPorts1 = 8;
|
||||
link->io.BasePort2 = io->win[1].base;
|
||||
link->io.NumPorts2 = (is_kme) ? 2 : 1;
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
goto next_entry;
|
||||
io_base = link->io.BasePort1;
|
||||
ctl_base = link->io.BasePort2;
|
||||
} else if ((io->nwin == 1) && (io->win[0].len >= 16)) {
|
||||
link->io.NumPorts1 = io->win[0].len;
|
||||
link->io.NumPorts2 = 0;
|
||||
if (pcmcia_request_io(link->handle, &link->io) != 0)
|
||||
goto next_entry;
|
||||
io_base = link->io.BasePort1;
|
||||
ctl_base = link->io.BasePort1 + 0x0e;
|
||||
} else goto next_entry;
|
||||
/* If we've got this far, we're done */
|
||||
break;
|
||||
}
|
||||
|
||||
next_entry:
|
||||
if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
|
||||
memcpy(&stk->dflt, cfg, sizeof(stk->dflt));
|
||||
if (pass) {
|
||||
CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
|
||||
} else if (pcmcia_get_next_tuple(handle, &tuple) != 0) {
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
|
||||
memset(&stk->dflt, 0, sizeof(stk->dflt));
|
||||
pass++;
|
||||
}
|
||||
}
|
||||
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
|
||||
|
||||
/* disable drive interrupts during IDE probe */
|
||||
outb(0x02, ctl_base);
|
||||
|
||||
/* special setup for KXLC005 card */
|
||||
if (is_kme)
|
||||
outb(0x81, ctl_base+1);
|
||||
|
||||
/* retry registration in case device is still spinning up */
|
||||
for (hd = -1, i = 0; i < 10; i++) {
|
||||
hd = idecs_register(io_base, ctl_base, link->irq.AssignedIRQ);
|
||||
if (hd >= 0) break;
|
||||
if (link->io.NumPorts1 == 0x20) {
|
||||
outb(0x02, ctl_base + 0x10);
|
||||
hd = idecs_register(io_base + 0x10, ctl_base + 0x10,
|
||||
link->irq.AssignedIRQ);
|
||||
if (hd >= 0) {
|
||||
io_base += 0x10;
|
||||
ctl_base += 0x10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
__set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
schedule_timeout(HZ/10);
|
||||
}
|
||||
|
||||
if (hd < 0) {
|
||||
printk(KERN_NOTICE "ide-cs: ide_register() at 0x%3lx & 0x%3lx"
|
||||
", irq %u failed\n", io_base, ctl_base,
|
||||
link->irq.AssignedIRQ);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
info->ndev = 1;
|
||||
sprintf(info->node.dev_name, "hd%c", 'a' + (hd * 2));
|
||||
info->node.major = ide_major[hd];
|
||||
info->node.minor = 0;
|
||||
info->hd = hd;
|
||||
link->dev = &info->node;
|
||||
printk(KERN_INFO "ide-cs: %s: Vcc = %d.%d, Vpp = %d.%d\n",
|
||||
info->node.dev_name, link->conf.Vcc / 10, link->conf.Vcc % 10,
|
||||
link->conf.Vpp1 / 10, link->conf.Vpp1 % 10);
|
||||
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
kfree(stk);
|
||||
return;
|
||||
|
||||
err_mem:
|
||||
printk(KERN_NOTICE "ide-cs: ide_config failed memory allocation\n");
|
||||
goto failed;
|
||||
|
||||
cs_failed:
|
||||
cs_error(link->handle, last_fn, last_ret);
|
||||
failed:
|
||||
kfree(stk);
|
||||
ide_release(link);
|
||||
link->state &= ~DEV_CONFIG_PENDING;
|
||||
} /* ide_config */
|
||||
|
||||
/*======================================================================
|
||||
|
||||
After a card is removed, ide_release() will unregister the net
|
||||
device, and release the PCMCIA configuration. If the device is
|
||||
still open, this will be postponed until it is closed.
|
||||
|
||||
======================================================================*/
|
||||
|
||||
void ide_release(dev_link_t *link)
|
||||
{
|
||||
ide_info_t *info = link->priv;
|
||||
|
||||
DEBUG(0, "ide_release(0x%p)\n", link);
|
||||
|
||||
if (info->ndev) {
|
||||
/* FIXME: if this fails we need to queue the cleanup somehow
|
||||
-- need to investigate the required PCMCIA magic */
|
||||
ide_unregister(info->hd);
|
||||
}
|
||||
info->ndev = 0;
|
||||
link->dev = NULL;
|
||||
|
||||
pcmcia_release_configuration(link->handle);
|
||||
pcmcia_release_io(link->handle, &link->io);
|
||||
pcmcia_release_irq(link->handle, &link->irq);
|
||||
|
||||
link->state &= ~DEV_CONFIG;
|
||||
|
||||
} /* ide_release */
|
||||
|
||||
/*======================================================================
|
||||
|
||||
The card status event handler. Mostly, this schedules other
|
||||
stuff to run after an event is received. A CARD_REMOVAL event
|
||||
also sets some flags to discourage the ide drivers from
|
||||
talking to the ports.
|
||||
|
||||
======================================================================*/
|
||||
|
||||
int ide_event(event_t event, int priority,
|
||||
event_callback_args_t *args)
|
||||
{
|
||||
dev_link_t *link = args->client_data;
|
||||
|
||||
DEBUG(1, "ide_event(0x%06x)\n", event);
|
||||
|
||||
switch (event) {
|
||||
case CS_EVENT_CARD_REMOVAL:
|
||||
link->state &= ~DEV_PRESENT;
|
||||
if (link->state & DEV_CONFIG)
|
||||
ide_release(link);
|
||||
break;
|
||||
case CS_EVENT_CARD_INSERTION:
|
||||
link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
|
||||
ide_config(link);
|
||||
break;
|
||||
case CS_EVENT_PM_SUSPEND:
|
||||
link->state |= DEV_SUSPEND;
|
||||
/* Fall through... */
|
||||
case CS_EVENT_RESET_PHYSICAL:
|
||||
if (link->state & DEV_CONFIG)
|
||||
pcmcia_release_configuration(link->handle);
|
||||
break;
|
||||
case CS_EVENT_PM_RESUME:
|
||||
link->state &= ~DEV_SUSPEND;
|
||||
/* Fall through... */
|
||||
case CS_EVENT_CARD_RESET:
|
||||
if (DEV_OK(link))
|
||||
pcmcia_request_configuration(link->handle, &link->conf);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
} /* ide_event */
|
||||
|
||||
static struct pcmcia_driver ide_cs_driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.drv = {
|
||||
.name = "ide-cs",
|
||||
},
|
||||
.attach = ide_attach,
|
||||
.detach = ide_detach,
|
||||
};
|
||||
|
||||
static int __init init_ide_cs(void)
|
||||
{
|
||||
return pcmcia_register_driver(&ide_cs_driver);
|
||||
}
|
||||
|
||||
static void __exit exit_ide_cs(void)
|
||||
{
|
||||
pcmcia_unregister_driver(&ide_cs_driver);
|
||||
while (dev_list != NULL)
|
||||
ide_detach(dev_list);
|
||||
}
|
||||
|
||||
module_init(init_ide_cs);
|
||||
module_exit(exit_ide_cs);
|
||||
155
extra/linux-2.6.10/drivers/ide/legacy/macide.c
Normal file
155
extra/linux-2.6.10/drivers/ide/legacy/macide.c
Normal file
@@ -0,0 +1,155 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/macide.c -- Macintosh IDE Driver
|
||||
*
|
||||
* Copyright (C) 1998 by Michael Schmitz
|
||||
*
|
||||
* This driver was written based on information obtained from the MacOS IDE
|
||||
* driver binary by Mikael Forselius
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/ide.h>
|
||||
|
||||
#include <asm/machw.h>
|
||||
#include <asm/macintosh.h>
|
||||
#include <asm/macints.h>
|
||||
#include <asm/mac_baboon.h>
|
||||
|
||||
#define IDE_BASE 0x50F1A000 /* Base address of IDE controller */
|
||||
|
||||
/*
|
||||
* Generic IDE registers as offsets from the base
|
||||
* These match MkLinux so they should be correct.
|
||||
*/
|
||||
|
||||
#define IDE_DATA 0x00
|
||||
#define IDE_ERROR 0x04 /* see err-bits */
|
||||
#define IDE_NSECTOR 0x08 /* nr of sectors to read/write */
|
||||
#define IDE_SECTOR 0x0c /* starting sector */
|
||||
#define IDE_LCYL 0x10 /* starting cylinder */
|
||||
#define IDE_HCYL 0x14 /* high byte of starting cyl */
|
||||
#define IDE_SELECT 0x18 /* 101dhhhh , d=drive, hhhh=head */
|
||||
#define IDE_STATUS 0x1c /* see status-bits */
|
||||
#define IDE_CONTROL 0x38 /* control/altstatus */
|
||||
|
||||
/*
|
||||
* Mac-specific registers
|
||||
*/
|
||||
|
||||
/*
|
||||
* this register is odd; it doesn't seem to do much and it's
|
||||
* not word-aligned like virtually every other hardware register
|
||||
* on the Mac...
|
||||
*/
|
||||
|
||||
#define IDE_IFR 0x101 /* (0x101) IDE interrupt flags on Quadra:
|
||||
*
|
||||
* Bit 0+1: some interrupt flags
|
||||
* Bit 2+3: some interrupt enable
|
||||
* Bit 4: ??
|
||||
* Bit 5: IDE interrupt flag (any hwif)
|
||||
* Bit 6: maybe IDE interrupt enable (any hwif) ??
|
||||
* Bit 7: Any interrupt condition
|
||||
*/
|
||||
|
||||
volatile unsigned char *ide_ifr = (unsigned char *) (IDE_BASE + IDE_IFR);
|
||||
|
||||
static int macide_offsets[IDE_NR_PORTS] = {
|
||||
IDE_DATA, IDE_ERROR, IDE_NSECTOR, IDE_SECTOR, IDE_LCYL,
|
||||
IDE_HCYL, IDE_SELECT, IDE_STATUS, IDE_CONTROL
|
||||
};
|
||||
|
||||
int macide_ack_intr(ide_hwif_t* hwif)
|
||||
{
|
||||
if (*ide_ifr & 0x20) {
|
||||
*ide_ifr &= ~0x20;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_MAC_MEDIABAY
|
||||
static void macide_mediabay_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
int state = baboon->mb_status & 0x04;
|
||||
|
||||
printk(KERN_INFO "macide: media bay %s detected\n", state? "removal":"insertion");
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Probe for a Macintosh IDE interface
|
||||
*/
|
||||
|
||||
void macide_init(void)
|
||||
{
|
||||
hw_regs_t hw;
|
||||
ide_hwif_t *hwif;
|
||||
int index = -1;
|
||||
|
||||
switch (macintosh_config->ide_type) {
|
||||
case MAC_IDE_QUADRA:
|
||||
ide_setup_ports(&hw, IDE_BASE, macide_offsets,
|
||||
0, 0, macide_ack_intr,
|
||||
// quadra_ide_iops,
|
||||
IRQ_NUBUS_F);
|
||||
index = ide_register_hw(&hw, &hwif);
|
||||
break;
|
||||
case MAC_IDE_PB:
|
||||
ide_setup_ports(&hw, IDE_BASE, macide_offsets,
|
||||
0, 0, macide_ack_intr,
|
||||
// macide_pb_iops,
|
||||
IRQ_NUBUS_C);
|
||||
index = ide_register_hw(&hw, &hwif);
|
||||
break;
|
||||
case MAC_IDE_BABOON:
|
||||
ide_setup_ports(&hw, BABOON_BASE, macide_offsets,
|
||||
0, 0, NULL,
|
||||
// macide_baboon_iops,
|
||||
IRQ_BABOON_1);
|
||||
index = ide_register_hw(&hw, &hwif);
|
||||
if (index == -1) break;
|
||||
if (macintosh_config->ident == MAC_MODEL_PB190) {
|
||||
|
||||
/* Fix breakage in ide-disk.c: drive capacity */
|
||||
/* is not initialized for drives without a */
|
||||
/* hardware ID, and we can't get that without */
|
||||
/* probing the drive which freezes a 190. */
|
||||
|
||||
ide_drive_t *drive = &ide_hwifs[index].drives[0];
|
||||
drive->capacity64 = drive->cyl*drive->head*drive->sect;
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_MAC_MEDIABAY
|
||||
request_irq(IRQ_BABOON_2, macide_mediabay_interrupt,
|
||||
IRQ_FLG_FAST, "mediabay",
|
||||
macide_mediabay_interrupt);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
if (index != -1) {
|
||||
hwif->mmio = 2;
|
||||
if (macintosh_config->ide_type == MAC_IDE_QUADRA)
|
||||
printk(KERN_INFO "ide%d: Macintosh Quadra IDE interface\n", index);
|
||||
else if (macintosh_config->ide_type == MAC_IDE_PB)
|
||||
printk(KERN_INFO "ide%d: Macintosh Powerbook IDE interface\n", index);
|
||||
else if (macintosh_config->ide_type == MAC_IDE_BABOON)
|
||||
printk(KERN_INFO "ide%d: Macintosh Powerbook Baboon IDE interface\n", index);
|
||||
else
|
||||
printk(KERN_INFO "ide%d: Unknown Macintosh IDE interface\n", index);
|
||||
}
|
||||
}
|
||||
150
extra/linux-2.6.10/drivers/ide/legacy/q40ide.c
Normal file
150
extra/linux-2.6.10/drivers/ide/legacy/q40ide.c
Normal file
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/q40ide.c -- Q40 I/O port IDE Driver
|
||||
*
|
||||
* (c) Richard Zidlicky
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive for
|
||||
* more details.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
|
||||
#include <linux/ide.h>
|
||||
|
||||
/*
|
||||
* Bases of the IDE interfaces
|
||||
*/
|
||||
|
||||
#define Q40IDE_NUM_HWIFS 2
|
||||
|
||||
#define PCIDE_BASE1 0x1f0
|
||||
#define PCIDE_BASE2 0x170
|
||||
#define PCIDE_BASE3 0x1e8
|
||||
#define PCIDE_BASE4 0x168
|
||||
#define PCIDE_BASE5 0x1e0
|
||||
#define PCIDE_BASE6 0x160
|
||||
|
||||
static const unsigned long pcide_bases[Q40IDE_NUM_HWIFS] = {
|
||||
PCIDE_BASE1, PCIDE_BASE2, /* PCIDE_BASE3, PCIDE_BASE4 , PCIDE_BASE5,
|
||||
PCIDE_BASE6 */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Offsets from one of the above bases
|
||||
*/
|
||||
|
||||
/* used to do addr translation here but it is easier to do in setup ports */
|
||||
/*#define IDE_OFF_B(x) ((unsigned long)Q40_ISA_IO_B((IDE_##x##_OFFSET)))*/
|
||||
|
||||
#define IDE_OFF_B(x) ((unsigned long)((IDE_##x##_OFFSET)))
|
||||
#define IDE_OFF_W(x) ((unsigned long)((IDE_##x##_OFFSET)))
|
||||
|
||||
static const int pcide_offsets[IDE_NR_PORTS] = {
|
||||
IDE_OFF_W(DATA), IDE_OFF_B(ERROR), IDE_OFF_B(NSECTOR), IDE_OFF_B(SECTOR),
|
||||
IDE_OFF_B(LCYL), IDE_OFF_B(HCYL), 6 /*IDE_OFF_B(CURRENT)*/, IDE_OFF_B(STATUS),
|
||||
518/*IDE_OFF(CMD)*/
|
||||
};
|
||||
|
||||
static int q40ide_default_irq(unsigned long base)
|
||||
{
|
||||
switch (base) {
|
||||
case 0x1f0: return 14;
|
||||
case 0x170: return 15;
|
||||
case 0x1e8: return 11;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This is very similar to ide_setup_ports except that addresses
|
||||
* are pretranslated for q40 ISA access
|
||||
*/
|
||||
void q40_ide_setup_ports ( hw_regs_t *hw,
|
||||
unsigned long base, int *offsets,
|
||||
unsigned long ctrl, unsigned long intr,
|
||||
ide_ack_intr_t *ack_intr,
|
||||
/*
|
||||
* ide_io_ops_t *iops,
|
||||
*/
|
||||
int irq)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < IDE_NR_PORTS; i++) {
|
||||
/* BIG FAT WARNING:
|
||||
assumption: only DATA port is ever used in 16 bit mode */
|
||||
if ( i==0 )
|
||||
hw->io_ports[i] = Q40_ISA_IO_W(base + offsets[i]);
|
||||
else
|
||||
hw->io_ports[i] = Q40_ISA_IO_B(base + offsets[i]);
|
||||
}
|
||||
|
||||
hw->irq = irq;
|
||||
hw->dma = NO_DMA;
|
||||
hw->ack_intr = ack_intr;
|
||||
/*
|
||||
* hw->iops = iops;
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* the static array is needed to have the name reported in /proc/ioports,
|
||||
* hwif->name unfortunately isn´t available yet
|
||||
*/
|
||||
static const char *q40_ide_names[Q40IDE_NUM_HWIFS]={
|
||||
"ide0", "ide1"
|
||||
};
|
||||
|
||||
/*
|
||||
* Probe for Q40 IDE interfaces
|
||||
*/
|
||||
|
||||
void q40ide_init(void)
|
||||
{
|
||||
int i;
|
||||
ide_hwif_t *hwif;
|
||||
int index;
|
||||
const char *name;
|
||||
|
||||
if (!MACH_IS_Q40)
|
||||
return ;
|
||||
|
||||
for (i = 0; i < Q40IDE_NUM_HWIFS; i++) {
|
||||
hw_regs_t hw;
|
||||
|
||||
name = q40_ide_names[i];
|
||||
if (!request_region(pcide_bases[i], 8, name)) {
|
||||
printk("could not reserve ports %lx-%lx for %s\n",
|
||||
pcide_bases[i],pcide_bases[i]+8,name);
|
||||
continue;
|
||||
}
|
||||
if (!request_region(pcide_bases[i]+0x206, 1, name)) {
|
||||
printk("could not reserve port %lx for %s\n",
|
||||
pcide_bases[i]+0x206,name);
|
||||
release_region(pcide_bases[i], 8);
|
||||
continue;
|
||||
}
|
||||
q40_ide_setup_ports(&hw,(unsigned long) pcide_bases[i], (int *)pcide_offsets,
|
||||
pcide_bases[i]+0x206,
|
||||
0, NULL,
|
||||
// m68kide_iops,
|
||||
q40ide_default_irq(pcide_bases[i]));
|
||||
index = ide_register_hw(&hw, &hwif);
|
||||
// **FIXME**
|
||||
if (index != -1)
|
||||
hwif->mmio = 2;
|
||||
}
|
||||
}
|
||||
|
||||
511
extra/linux-2.6.10/drivers/ide/legacy/qd65xx.c
Normal file
511
extra/linux-2.6.10/drivers/ide/legacy/qd65xx.c
Normal file
@@ -0,0 +1,511 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/qd65xx.c Version 0.07 Sep 30, 2001
|
||||
*
|
||||
* Copyright (C) 1996-2001 Linus Torvalds & author (see below)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Version 0.03 Cleaned auto-tune, added probe
|
||||
* Version 0.04 Added second channel tuning
|
||||
* Version 0.05 Enhanced tuning ; added qd6500 support
|
||||
* Version 0.06 Added dos driver's list
|
||||
* Version 0.07 Second channel bug fix
|
||||
*
|
||||
* QDI QD6500/QD6580 EIDE controller fast support
|
||||
*
|
||||
* Please set local bus speed using kernel parameter idebus
|
||||
* for example, "idebus=33" stands for 33Mhz VLbus
|
||||
* To activate controller support, use "ide0=qd65xx"
|
||||
* To enable tuning, use "ide0=autotune"
|
||||
* To enable second channel tuning (qd6580 only), use "ide1=autotune"
|
||||
*/
|
||||
|
||||
/*
|
||||
* Rewritten from the work of Colten Edwards <pje120@cs.usask.ca> by
|
||||
* Samuel Thibault <samuel.thibault@fnac.net>
|
||||
*/
|
||||
|
||||
#undef REALLY_SLOW_IO /* most systems can safely undef this */
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#include "qd65xx.h"
|
||||
|
||||
/*
|
||||
* I/O ports are 0x30-0x31 (and 0x32-0x33 for qd6580)
|
||||
* or 0xb0-0xb1 (and 0xb2-0xb3 for qd6580)
|
||||
* -- qd6500 is a single IDE interface
|
||||
* -- qd6580 is a dual IDE interface
|
||||
*
|
||||
* More research on qd6580 being done by willmore@cig.mot.com (David)
|
||||
* More Information given by Petr Soucek (petr@ryston.cz)
|
||||
* http://www.ryston.cz/petr/vlb
|
||||
*/
|
||||
|
||||
/*
|
||||
* base: Timer1
|
||||
*
|
||||
*
|
||||
* base+0x01: Config (R/O)
|
||||
*
|
||||
* bit 0: ide baseport: 1 = 0x1f0 ; 0 = 0x170 (only useful for qd6500)
|
||||
* bit 1: qd65xx baseport: 1 = 0xb0 ; 0 = 0x30
|
||||
* bit 2: ID3: bus speed: 1 = <=33MHz ; 0 = >33MHz
|
||||
* bit 3: qd6500: 1 = disabled, 0 = enabled
|
||||
* qd6580: 1
|
||||
* upper nibble:
|
||||
* qd6500: 1100
|
||||
* qd6580: either 1010 or 0101
|
||||
*
|
||||
*
|
||||
* base+0x02: Timer2 (qd6580 only)
|
||||
*
|
||||
*
|
||||
* base+0x03: Control (qd6580 only)
|
||||
*
|
||||
* bits 0-3 must always be set 1
|
||||
* bit 4 must be set 1, but is set 0 by dos driver while measuring vlb clock
|
||||
* bit 0 : 1 = Only primary port enabled : channel 0 for hda, channel 1 for hdb
|
||||
* 0 = Primary and Secondary ports enabled : channel 0 for hda & hdb
|
||||
* channel 1 for hdc & hdd
|
||||
* bit 1 : 1 = only disks on primary port
|
||||
* 0 = disks & ATAPI devices on primary port
|
||||
* bit 2-4 : always 0
|
||||
* bit 5 : status, but of what ?
|
||||
* bit 6 : always set 1 by dos driver
|
||||
* bit 7 : set 1 for non-ATAPI devices on primary port
|
||||
* (maybe read-ahead and post-write buffer ?)
|
||||
*/
|
||||
|
||||
static int timings[4]={-1,-1,-1,-1}; /* stores current timing for each timer */
|
||||
|
||||
static void qd_write_reg (u8 content, unsigned long reg)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
outb(content,reg);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
}
|
||||
|
||||
static u8 __init qd_read_reg (unsigned long reg)
|
||||
{
|
||||
unsigned long flags;
|
||||
u8 read;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
read = inb(reg);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
return read;
|
||||
}
|
||||
|
||||
/*
|
||||
* qd_select:
|
||||
*
|
||||
* This routine is invoked from ide.c to prepare for access to a given drive.
|
||||
*/
|
||||
|
||||
static void qd_select (ide_drive_t *drive)
|
||||
{
|
||||
u8 index = (( (QD_TIMREG(drive)) & 0x80 ) >> 7) |
|
||||
(QD_TIMREG(drive) & 0x02);
|
||||
|
||||
if (timings[index] != QD_TIMING(drive))
|
||||
qd_write_reg(timings[index] = QD_TIMING(drive), QD_TIMREG(drive));
|
||||
}
|
||||
|
||||
/*
|
||||
* qd6500_compute_timing
|
||||
*
|
||||
* computes the timing value where
|
||||
* lower nibble represents active time, in count of VLB clocks
|
||||
* upper nibble represents recovery time, in count of VLB clocks
|
||||
*/
|
||||
|
||||
static u8 qd6500_compute_timing (ide_hwif_t *hwif, int active_time, int recovery_time)
|
||||
{
|
||||
u8 active_cycle,recovery_cycle;
|
||||
|
||||
if (system_bus_clock()<=33) {
|
||||
active_cycle = 9 - IDE_IN(active_time * system_bus_clock() / 1000 + 1, 2, 9);
|
||||
recovery_cycle = 15 - IDE_IN(recovery_time * system_bus_clock() / 1000 + 1, 0, 15);
|
||||
} else {
|
||||
active_cycle = 8 - IDE_IN(active_time * system_bus_clock() / 1000 + 1, 1, 8);
|
||||
recovery_cycle = 18 - IDE_IN(recovery_time * system_bus_clock() / 1000 + 1, 3, 18);
|
||||
}
|
||||
|
||||
return((recovery_cycle<<4) | 0x08 | active_cycle);
|
||||
}
|
||||
|
||||
/*
|
||||
* qd6580_compute_timing
|
||||
*
|
||||
* idem for qd6580
|
||||
*/
|
||||
|
||||
static u8 qd6580_compute_timing (int active_time, int recovery_time)
|
||||
{
|
||||
u8 active_cycle = 17 - IDE_IN(active_time * system_bus_clock() / 1000 + 1, 2, 17);
|
||||
u8 recovery_cycle = 15 - IDE_IN(recovery_time * system_bus_clock() / 1000 + 1, 2, 15);
|
||||
|
||||
return((recovery_cycle<<4) | active_cycle);
|
||||
}
|
||||
|
||||
/*
|
||||
* qd_find_disk_type
|
||||
*
|
||||
* tries to find timing from dos driver's table
|
||||
*/
|
||||
|
||||
static int qd_find_disk_type (ide_drive_t *drive,
|
||||
int *active_time, int *recovery_time)
|
||||
{
|
||||
struct qd65xx_timing_s *p;
|
||||
char model[40];
|
||||
|
||||
if (!*drive->id->model) return 0;
|
||||
|
||||
strncpy(model,drive->id->model,40);
|
||||
ide_fixstring(model,40,1); /* byte-swap */
|
||||
|
||||
for (p = qd65xx_timing ; p->offset != -1 ; p++) {
|
||||
if (!strncmp(p->model, model+p->offset, 4)) {
|
||||
printk(KERN_DEBUG "%s: listed !\n", drive->name);
|
||||
*active_time = p->active;
|
||||
*recovery_time = p->recovery;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* qd_timing_ok:
|
||||
*
|
||||
* check whether timings don't conflict
|
||||
*/
|
||||
|
||||
static int qd_timing_ok (ide_drive_t drives[])
|
||||
{
|
||||
return (IDE_IMPLY(drives[0].present && drives[1].present,
|
||||
IDE_IMPLY(QD_TIMREG(drives) == QD_TIMREG(drives+1),
|
||||
QD_TIMING(drives) == QD_TIMING(drives+1))));
|
||||
/* if same timing register, must be same timing */
|
||||
}
|
||||
|
||||
/*
|
||||
* qd_set_timing:
|
||||
*
|
||||
* records the timing, and enables selectproc as needed
|
||||
*/
|
||||
|
||||
static void qd_set_timing (ide_drive_t *drive, u8 timing)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
|
||||
drive->drive_data &= 0xff00;
|
||||
drive->drive_data |= timing;
|
||||
if (qd_timing_ok(hwif->drives)) {
|
||||
qd_select(drive); /* selects once */
|
||||
hwif->selectproc = NULL;
|
||||
} else
|
||||
hwif->selectproc = &qd_select;
|
||||
|
||||
printk(KERN_DEBUG "%s: %#x\n", drive->name, timing);
|
||||
}
|
||||
|
||||
/*
|
||||
* qd6500_tune_drive
|
||||
*/
|
||||
|
||||
static void qd6500_tune_drive (ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
int active_time = 175;
|
||||
int recovery_time = 415; /* worst case values from the dos driver */
|
||||
|
||||
if (drive->id && !qd_find_disk_type(drive, &active_time, &recovery_time)
|
||||
&& drive->id->tPIO && (drive->id->field_valid & 0x02)
|
||||
&& drive->id->eide_pio >= 240) {
|
||||
|
||||
printk(KERN_INFO "%s: PIO mode%d\n", drive->name,
|
||||
drive->id->tPIO);
|
||||
active_time = 110;
|
||||
recovery_time = drive->id->eide_pio - 120;
|
||||
}
|
||||
|
||||
qd_set_timing(drive, qd6500_compute_timing(HWIF(drive), active_time, recovery_time));
|
||||
}
|
||||
|
||||
/*
|
||||
* qd6580_tune_drive
|
||||
*/
|
||||
|
||||
static void qd6580_tune_drive (ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
ide_pio_data_t d;
|
||||
int base = HWIF(drive)->select_data;
|
||||
int active_time = 175;
|
||||
int recovery_time = 415; /* worst case values from the dos driver */
|
||||
|
||||
if (drive->id && !qd_find_disk_type(drive, &active_time, &recovery_time)) {
|
||||
pio = ide_get_best_pio_mode(drive, pio, 255, &d);
|
||||
pio = min_t(u8, pio, 4);
|
||||
|
||||
switch (pio) {
|
||||
case 0: break;
|
||||
case 3:
|
||||
if (d.cycle_time >= 110) {
|
||||
active_time = 86;
|
||||
recovery_time = d.cycle_time - 102;
|
||||
} else
|
||||
printk(KERN_WARNING "%s: Strange recovery time !\n",drive->name);
|
||||
break;
|
||||
case 4:
|
||||
if (d.cycle_time >= 69) {
|
||||
active_time = 70;
|
||||
recovery_time = d.cycle_time - 61;
|
||||
} else
|
||||
printk(KERN_WARNING "%s: Strange recovery time !\n",drive->name);
|
||||
break;
|
||||
default:
|
||||
if (d.cycle_time >= 180) {
|
||||
active_time = 110;
|
||||
recovery_time = d.cycle_time - 120;
|
||||
} else {
|
||||
active_time = ide_pio_timings[pio].active_time;
|
||||
recovery_time = d.cycle_time
|
||||
-active_time;
|
||||
}
|
||||
}
|
||||
printk(KERN_INFO "%s: PIO mode%d\n", drive->name,pio);
|
||||
}
|
||||
|
||||
if (!HWIF(drive)->channel && drive->media != ide_disk) {
|
||||
qd_write_reg(0x5f, QD_CONTROL_PORT);
|
||||
printk(KERN_WARNING "%s: ATAPI: disabled read-ahead FIFO "
|
||||
"and post-write buffer on %s.\n",
|
||||
drive->name, HWIF(drive)->name);
|
||||
}
|
||||
|
||||
qd_set_timing(drive, qd6580_compute_timing(active_time, recovery_time));
|
||||
}
|
||||
|
||||
/*
|
||||
* qd_testreg
|
||||
*
|
||||
* tests if the given port is a register
|
||||
*/
|
||||
|
||||
static int __init qd_testreg(int port)
|
||||
{
|
||||
u8 savereg;
|
||||
u8 readreg;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
savereg = inb_p(port);
|
||||
outb_p(QD_TESTVAL, port); /* safe value */
|
||||
readreg = inb_p(port);
|
||||
outb(savereg, port);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
|
||||
if (savereg == QD_TESTVAL) {
|
||||
printk(KERN_ERR "Outch ! the probe for qd65xx isn't reliable !\n");
|
||||
printk(KERN_ERR "Please contact maintainers to tell about your hardware\n");
|
||||
printk(KERN_ERR "Assuming qd65xx is not present.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return (readreg != QD_TESTVAL);
|
||||
}
|
||||
|
||||
/*
|
||||
* qd_setup:
|
||||
*
|
||||
* called to setup an ata channel : adjusts attributes & links for tuning
|
||||
*/
|
||||
|
||||
static void __init qd_setup(ide_hwif_t *hwif, int base, int config,
|
||||
unsigned int data0, unsigned int data1,
|
||||
void (*tuneproc) (ide_drive_t *, u8 pio))
|
||||
{
|
||||
hwif->chipset = ide_qd65xx;
|
||||
hwif->channel = hwif->index;
|
||||
hwif->select_data = base;
|
||||
hwif->config_data = config;
|
||||
hwif->drives[0].drive_data = data0;
|
||||
hwif->drives[1].drive_data = data1;
|
||||
hwif->drives[0].io_32bit =
|
||||
hwif->drives[1].io_32bit = 1;
|
||||
hwif->tuneproc = tuneproc;
|
||||
probe_hwif_init(hwif);
|
||||
}
|
||||
|
||||
/*
|
||||
* qd_unsetup:
|
||||
*
|
||||
* called to unsetup an ata channel : back to default values, unlinks tuning
|
||||
*/
|
||||
/*
|
||||
static void __exit qd_unsetup(ide_hwif_t *hwif)
|
||||
{
|
||||
u8 config = hwif->config_data;
|
||||
int base = hwif->select_data;
|
||||
void *tuneproc = (void *) hwif->tuneproc;
|
||||
|
||||
if (hwif->chipset != ide_qd65xx)
|
||||
return;
|
||||
|
||||
printk(KERN_NOTICE "%s: back to defaults\n", hwif->name);
|
||||
|
||||
hwif->selectproc = NULL;
|
||||
hwif->tuneproc = NULL;
|
||||
|
||||
if (tuneproc == (void *) qd6500_tune_drive) {
|
||||
// will do it for both
|
||||
qd_write_reg(QD6500_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
|
||||
} else if (tuneproc == (void *) qd6580_tune_drive) {
|
||||
if (QD_CONTROL(hwif) & QD_CONTR_SEC_DISABLED) {
|
||||
qd_write_reg(QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
|
||||
qd_write_reg(QD6580_DEF_DATA2, QD_TIMREG(&hwif->drives[1]));
|
||||
} else {
|
||||
qd_write_reg(hwif->channel ? QD6580_DEF_DATA2 : QD6580_DEF_DATA, QD_TIMREG(&hwif->drives[0]));
|
||||
}
|
||||
} else {
|
||||
printk(KERN_WARNING "Unknown qd65xx tuning fonction !\n");
|
||||
printk(KERN_WARNING "keeping settings !\n");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
* qd_probe:
|
||||
*
|
||||
* looks at the specified baseport, and if qd found, registers & initialises it
|
||||
* return 1 if another qd may be probed
|
||||
*/
|
||||
|
||||
static int __init qd_probe(int base)
|
||||
{
|
||||
ide_hwif_t *hwif;
|
||||
u8 config;
|
||||
u8 unit;
|
||||
|
||||
config = qd_read_reg(QD_CONFIG_PORT);
|
||||
|
||||
if (! ((config & QD_CONFIG_BASEPORT) >> 1 == (base == 0xb0)) )
|
||||
return 1;
|
||||
|
||||
unit = ! (config & QD_CONFIG_IDE_BASEPORT);
|
||||
|
||||
if ((config & 0xf0) == QD_CONFIG_QD6500) {
|
||||
|
||||
if (qd_testreg(base)) return 1; /* bad register */
|
||||
|
||||
/* qd6500 found */
|
||||
|
||||
hwif = &ide_hwifs[unit];
|
||||
printk(KERN_NOTICE "%s: qd6500 at %#x\n", hwif->name, base);
|
||||
printk(KERN_DEBUG "qd6500: config=%#x, ID3=%u\n",
|
||||
config, QD_ID3);
|
||||
|
||||
if (config & QD_CONFIG_DISABLED) {
|
||||
printk(KERN_WARNING "qd6500 is disabled !\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
qd_setup(hwif, base, config, QD6500_DEF_DATA, QD6500_DEF_DATA,
|
||||
&qd6500_tune_drive);
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (((config & 0xf0) == QD_CONFIG_QD6580_A) ||
|
||||
((config & 0xf0) == QD_CONFIG_QD6580_B)) {
|
||||
|
||||
u8 control;
|
||||
|
||||
if (qd_testreg(base) || qd_testreg(base+0x02)) return 1;
|
||||
/* bad registers */
|
||||
|
||||
/* qd6580 found */
|
||||
|
||||
control = qd_read_reg(QD_CONTROL_PORT);
|
||||
|
||||
printk(KERN_NOTICE "qd6580 at %#x\n", base);
|
||||
printk(KERN_DEBUG "qd6580: config=%#x, control=%#x, ID3=%u\n",
|
||||
config, control, QD_ID3);
|
||||
|
||||
if (control & QD_CONTR_SEC_DISABLED) {
|
||||
/* secondary disabled */
|
||||
|
||||
hwif = &ide_hwifs[unit];
|
||||
printk(KERN_INFO "%s: qd6580: single IDE board\n",
|
||||
hwif->name);
|
||||
qd_setup(hwif, base, config | (control << 8),
|
||||
QD6580_DEF_DATA, QD6580_DEF_DATA2,
|
||||
&qd6580_tune_drive);
|
||||
qd_write_reg(QD_DEF_CONTR,QD_CONTROL_PORT);
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 1;
|
||||
} else {
|
||||
ide_hwif_t *mate;
|
||||
|
||||
hwif = &ide_hwifs[0];
|
||||
mate = &ide_hwifs[1];
|
||||
/* secondary enabled */
|
||||
printk(KERN_INFO "%s&%s: qd6580: dual IDE board\n",
|
||||
hwif->name, mate->name);
|
||||
|
||||
qd_setup(hwif, base, config | (control << 8),
|
||||
QD6580_DEF_DATA, QD6580_DEF_DATA,
|
||||
&qd6580_tune_drive);
|
||||
qd_setup(mate, base, config | (control << 8),
|
||||
QD6580_DEF_DATA2, QD6580_DEF_DATA2,
|
||||
&qd6580_tune_drive);
|
||||
qd_write_reg(QD_DEF_CONTR,QD_CONTROL_PORT);
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 0; /* no other qd65xx possible */
|
||||
}
|
||||
}
|
||||
/* no qd65xx found */
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Can be called directly from ide.c. */
|
||||
int __init qd65xx_init(void)
|
||||
{
|
||||
if (qd_probe(0x30))
|
||||
qd_probe(0xb0);
|
||||
if (ide_hwifs[0].chipset != ide_qd65xx &&
|
||||
ide_hwifs[1].chipset != ide_qd65xx)
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef MODULE
|
||||
module_init(qd65xx_init);
|
||||
#endif
|
||||
|
||||
MODULE_AUTHOR("Samuel Thibault");
|
||||
MODULE_DESCRIPTION("support of qd65xx vlb ide chipset");
|
||||
MODULE_LICENSE("GPL");
|
||||
140
extra/linux-2.6.10/drivers/ide/legacy/qd65xx.h
Normal file
140
extra/linux-2.6.10/drivers/ide/legacy/qd65xx.h
Normal file
@@ -0,0 +1,140 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/qd65xx.h
|
||||
*
|
||||
* Copyright (c) 2000 Linus Torvalds & authors
|
||||
*/
|
||||
|
||||
/*
|
||||
* Authors: Petr Soucek <petr@ryston.cz>
|
||||
* Samuel Thibault <samuel.thibault@fnac.net>
|
||||
*/
|
||||
|
||||
/* truncates a in [b,c] */
|
||||
#define IDE_IN(a,b,c) ( ((a)<(b)) ? (b) : ( (a)>(c) ? (c) : (a)) )
|
||||
|
||||
#define IDE_IMPLY(a,b) ((!(a)) || (b))
|
||||
|
||||
#define QD_TIM1_PORT (base)
|
||||
#define QD_CONFIG_PORT (base+0x01)
|
||||
#define QD_TIM2_PORT (base+0x02)
|
||||
#define QD_CONTROL_PORT (base+0x03)
|
||||
|
||||
#define QD_CONFIG_IDE_BASEPORT 0x01
|
||||
#define QD_CONFIG_BASEPORT 0x02
|
||||
#define QD_CONFIG_ID3 0x04
|
||||
#define QD_CONFIG_DISABLED 0x08
|
||||
#define QD_CONFIG_QD6500 0xc0
|
||||
#define QD_CONFIG_QD6580_A 0xa0
|
||||
#define QD_CONFIG_QD6580_B 0x50
|
||||
|
||||
#define QD_CONTR_SEC_DISABLED 0x01
|
||||
|
||||
#define QD_ID3 ((config & QD_CONFIG_ID3)!=0)
|
||||
|
||||
#define QD_CONFIG(hwif) ((hwif)->config_data & 0x00ff)
|
||||
#define QD_CONTROL(hwif) (((hwif)->config_data & 0xff00) >> 8)
|
||||
|
||||
#define QD_TIMING(drive) (byte)(((drive)->drive_data) & 0x00ff)
|
||||
#define QD_TIMREG(drive) (byte)((((drive)->drive_data) & 0xff00) >> 8)
|
||||
|
||||
#define QD6500_DEF_DATA ((QD_TIM1_PORT<<8) | (QD_ID3 ? 0x0c : 0x08))
|
||||
#define QD6580_DEF_DATA ((QD_TIM1_PORT<<8) | (QD_ID3 ? 0x0a : 0x00))
|
||||
#define QD6580_DEF_DATA2 ((QD_TIM2_PORT<<8) | (QD_ID3 ? 0x0a : 0x00))
|
||||
#define QD_DEF_CONTR (0x40 | ((control & 0x02) ? 0x9f : 0x1f))
|
||||
|
||||
#define QD_TESTVAL 0x19 /* safe value */
|
||||
|
||||
/* Drive specific timing taken from DOS driver v3.7 */
|
||||
|
||||
static struct qd65xx_timing_s {
|
||||
s8 offset; /* ofset from the beginning of Model Number" */
|
||||
char model[4]; /* 4 chars from Model number, no conversion */
|
||||
s16 active; /* active time */
|
||||
s16 recovery; /* recovery time */
|
||||
} qd65xx_timing [] = {
|
||||
{ 30, "2040", 110, 225 }, /* Conner CP30204 */
|
||||
{ 30, "2045", 135, 225 }, /* Conner CP30254 */
|
||||
{ 30, "1040", 155, 325 }, /* Conner CP30104 */
|
||||
{ 30, "1047", 135, 265 }, /* Conner CP30174 */
|
||||
{ 30, "5344", 135, 225 }, /* Conner CP3544 */
|
||||
{ 30, "01 4", 175, 405 }, /* Conner CP-3104 */
|
||||
{ 27, "C030", 175, 375 }, /* Conner CP3000 */
|
||||
{ 8, "PL42", 110, 295 }, /* Quantum LP240 */
|
||||
{ 8, "PL21", 110, 315 }, /* Quantum LP120 */
|
||||
{ 8, "PL25", 175, 385 }, /* Quantum LP52 */
|
||||
{ 4, "PA24", 110, 285 }, /* WD Piranha SP4200 */
|
||||
{ 6, "2200", 110, 260 }, /* WD Caviar AC2200 */
|
||||
{ 6, "3204", 110, 235 }, /* WD Caviar AC2340 */
|
||||
{ 6, "1202", 110, 265 }, /* WD Caviar AC2120 */
|
||||
{ 0, "DS3-", 135, 315 }, /* Teac SD340 */
|
||||
{ 8, "KM32", 175, 355 }, /* Toshiba MK234 */
|
||||
{ 2, "53A1", 175, 355 }, /* Seagate ST351A */
|
||||
{ 2, "4108", 175, 295 }, /* Seagate ST1480A */
|
||||
{ 2, "1344", 175, 335 }, /* Seagate ST3144A */
|
||||
{ 6, "7 12", 110, 225 }, /* Maxtor 7213A */
|
||||
{ 30, "02F4", 145, 295 }, /* Conner 3204F */
|
||||
{ 2, "1302", 175, 335 }, /* Seagate ST3120A */
|
||||
{ 2, "2334", 145, 265 }, /* Seagate ST3243A */
|
||||
{ 2, "2338", 145, 275 }, /* Seagate ST3283A */
|
||||
{ 2, "3309", 145, 275 }, /* Seagate ST3390A */
|
||||
{ 2, "5305", 145, 275 }, /* Seagate ST3550A */
|
||||
{ 2, "4100", 175, 295 }, /* Seagate ST1400A */
|
||||
{ 2, "4110", 175, 295 }, /* Seagate ST1401A */
|
||||
{ 2, "6300", 135, 265 }, /* Seagate ST3600A */
|
||||
{ 2, "5300", 135, 265 }, /* Seagate ST3500A */
|
||||
{ 6, "7 31", 135, 225 }, /* Maxtor 7131 AT */
|
||||
{ 6, "7 43", 115, 265 }, /* Maxtor 7345 AT */
|
||||
{ 6, "7 42", 110, 255 }, /* Maxtor 7245 AT */
|
||||
{ 6, "3 04", 135, 265 }, /* Maxtor 340 AT */
|
||||
{ 6, "61 0", 135, 285 }, /* WD AC160 */
|
||||
{ 6, "1107", 135, 235 }, /* WD AC1170 */
|
||||
{ 6, "2101", 110, 220 }, /* WD AC1210 */
|
||||
{ 6, "4202", 135, 245 }, /* WD AC2420 */
|
||||
{ 6, "41 0", 175, 355 }, /* WD Caviar 140 */
|
||||
{ 6, "82 0", 175, 355 }, /* WD Caviar 280 */
|
||||
{ 8, "PL01", 175, 375 }, /* Quantum LP105 */
|
||||
{ 8, "PL25", 110, 295 }, /* Quantum LP525 */
|
||||
{ 10, "4S 2", 175, 385 }, /* Quantum ELS42 */
|
||||
{ 10, "8S 5", 175, 385 }, /* Quantum ELS85 */
|
||||
{ 10, "1S72", 175, 385 }, /* Quantum ELS127 */
|
||||
{ 10, "1S07", 175, 385 }, /* Quantum ELS170 */
|
||||
{ 8, "ZE42", 135, 295 }, /* Quantum EZ240 */
|
||||
{ 8, "ZE21", 175, 385 }, /* Quantum EZ127 */
|
||||
{ 8, "ZE58", 175, 385 }, /* Quantum EZ85 */
|
||||
{ 8, "ZE24", 175, 385 }, /* Quantum EZ42 */
|
||||
{ 27, "C036", 155, 325 }, /* Conner CP30064 */
|
||||
{ 27, "C038", 155, 325 }, /* Conner CP30084 */
|
||||
{ 6, "2205", 110, 255 }, /* WDC AC2250 */
|
||||
{ 2, " CHA", 140, 415 }, /* WDC AH series; WDC AH260, WDC */
|
||||
{ 2, " CLA", 140, 415 }, /* WDC AL series: WDC AL2120, 2170, */
|
||||
{ 4, "UC41", 140, 415 }, /* WDC CU140 */
|
||||
{ 6, "1207", 130, 275 }, /* WDC AC2170 */
|
||||
{ 6, "2107", 130, 275 }, /* WDC AC1270 */
|
||||
{ 6, "5204", 130, 275 }, /* WDC AC2540 */
|
||||
{ 30, "3004", 110, 235 }, /* Conner CP30340 */
|
||||
{ 30, "0345", 135, 255 }, /* Conner CP30544 */
|
||||
{ 12, "12A3", 175, 320 }, /* MAXTOR LXT-213A */
|
||||
{ 12, "43A0", 145, 240 }, /* MAXTOR LXT-340A */
|
||||
{ 6, "7 21", 180, 290 }, /* Maxtor 7120 AT */
|
||||
{ 6, "7 71", 135, 240 }, /* Maxtor 7170 AT */
|
||||
{ 12, "45\0000", 110, 205 }, /* MAXTOR MXT-540 */
|
||||
{ 8, "PL11", 180, 290 }, /* QUANTUM LP110A */
|
||||
{ 8, "OG21", 150, 275 }, /* QUANTUM GO120 */
|
||||
{ 12, "42A5", 175, 320 }, /* MAXTOR LXT-245A */
|
||||
{ 2, "2309", 175, 295 }, /* ST3290A */
|
||||
{ 2, "3358", 180, 310 }, /* ST3385A */
|
||||
{ 2, "6355", 180, 310 }, /* ST3655A */
|
||||
{ 2, "1900", 175, 270 }, /* ST9100A */
|
||||
{ 2, "1954", 175, 270 }, /* ST9145A */
|
||||
{ 2, "1909", 175, 270 }, /* ST9190AG */
|
||||
{ 2, "2953", 175, 270 }, /* ST9235A */
|
||||
{ 2, "1359", 175, 270 }, /* ST3195A */
|
||||
{ 24, "3R11", 175, 290 }, /* ALPS ELECTRIC Co.,LTD, DR311C */
|
||||
{ 0, "2M26", 175, 215 }, /* M262XT-0Ah */
|
||||
{ 4, "2253", 175, 300 }, /* HP C2235A */
|
||||
{ 4, "-32A", 145, 245 }, /* H3133-A2 */
|
||||
{ 30, "0326", 150, 270 }, /* Samsung Electronics 120MB */
|
||||
{ 30, "3044", 110, 195 }, /* Conner CFA340A */
|
||||
{ 30, "43A0", 110, 195 }, /* Conner CFA340A */
|
||||
{ -1, " ", 175, 415 } /* unknown disk name */
|
||||
};
|
||||
183
extra/linux-2.6.10/drivers/ide/legacy/umc8672.c
Normal file
183
extra/linux-2.6.10/drivers/ide/legacy/umc8672.c
Normal file
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
* linux/drivers/ide/legacy/umc8672.c Version 0.05 Jul 31, 1996
|
||||
*
|
||||
* Copyright (C) 1995-1996 Linus Torvalds & author (see below)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Principal Author/Maintainer: PODIEN@hml2.atlas.de (Wolfram Podien)
|
||||
*
|
||||
* This file provides support for the advanced features
|
||||
* of the UMC 8672 IDE interface.
|
||||
*
|
||||
* Version 0.01 Initial version, hacked out of ide.c,
|
||||
* and #include'd rather than compiled separately.
|
||||
* This will get cleaned up in a subsequent release.
|
||||
*
|
||||
* Version 0.02 now configs/compiles separate from ide.c -ml
|
||||
* Version 0.03 enhanced auto-tune, fix display bug
|
||||
* Version 0.05 replace sti() with restore_flags() -ml
|
||||
* add detection of possible race condition -ml
|
||||
*/
|
||||
|
||||
/*
|
||||
* VLB Controller Support from
|
||||
* Wolfram Podien
|
||||
* Rohoefe 3
|
||||
* D28832 Achim
|
||||
* Germany
|
||||
*
|
||||
* To enable UMC8672 support there must a lilo line like
|
||||
* append="ide0=umc8672"...
|
||||
* To set the speed according to the abilities of the hardware there must be a
|
||||
* line like
|
||||
* #define UMC_DRIVE0 11
|
||||
* in the beginning of the driver, which sets the speed of drive 0 to 11 (there
|
||||
* are some lines present). 0 - 11 are allowed speed values. These values are
|
||||
* the results from the DOS speed test program supplied from UMC. 11 is the
|
||||
* highest speed (about PIO mode 3)
|
||||
*/
|
||||
#define REALLY_SLOW_IO /* some systems can safely undef this */
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
/*
|
||||
* Default speeds. These can be changed with "auto-tune" and/or hdparm.
|
||||
*/
|
||||
#define UMC_DRIVE0 1 /* DOS measured drive speeds */
|
||||
#define UMC_DRIVE1 1 /* 0 to 11 allowed */
|
||||
#define UMC_DRIVE2 1 /* 11 = Fastest Speed */
|
||||
#define UMC_DRIVE3 1 /* In case of crash reduce speed */
|
||||
|
||||
static u8 current_speeds[4] = {UMC_DRIVE0, UMC_DRIVE1, UMC_DRIVE2, UMC_DRIVE3};
|
||||
static const u8 pio_to_umc [5] = {0,3,7,10,11}; /* rough guesses */
|
||||
|
||||
/* 0 1 2 3 4 5 6 7 8 9 10 11 */
|
||||
static const u8 speedtab [3][12] = {
|
||||
{0xf, 0xb, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1 },
|
||||
{0x3, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1 },
|
||||
{0xff,0xcb,0xc0,0x58,0x36,0x33,0x23,0x22,0x21,0x11,0x10,0x0}};
|
||||
|
||||
static void out_umc (char port,char wert)
|
||||
{
|
||||
outb_p(port,0x108);
|
||||
outb_p(wert,0x109);
|
||||
}
|
||||
|
||||
static inline u8 in_umc (char port)
|
||||
{
|
||||
outb_p(port,0x108);
|
||||
return inb_p(0x109);
|
||||
}
|
||||
|
||||
static void umc_set_speeds (u8 speeds[])
|
||||
{
|
||||
int i, tmp;
|
||||
|
||||
outb_p(0x5A,0x108); /* enable umc */
|
||||
|
||||
out_umc (0xd7,(speedtab[0][speeds[2]] | (speedtab[0][speeds[3]]<<4)));
|
||||
out_umc (0xd6,(speedtab[0][speeds[0]] | (speedtab[0][speeds[1]]<<4)));
|
||||
tmp = 0;
|
||||
for (i = 3; i >= 0; i--) {
|
||||
tmp = (tmp << 2) | speedtab[1][speeds[i]];
|
||||
}
|
||||
out_umc (0xdc,tmp);
|
||||
for (i = 0;i < 4; i++) {
|
||||
out_umc (0xd0+i,speedtab[2][speeds[i]]);
|
||||
out_umc (0xd8+i,speedtab[2][speeds[i]]);
|
||||
}
|
||||
outb_p(0xa5,0x108); /* disable umc */
|
||||
|
||||
printk ("umc8672: drive speeds [0 to 11]: %d %d %d %d\n",
|
||||
speeds[0], speeds[1], speeds[2], speeds[3]);
|
||||
}
|
||||
|
||||
static void tune_umc (ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
unsigned long flags;
|
||||
ide_hwgroup_t *hwgroup = ide_hwifs[HWIF(drive)->index^1].hwgroup;
|
||||
|
||||
pio = ide_get_best_pio_mode(drive, pio, 4, NULL);
|
||||
printk("%s: setting umc8672 to PIO mode%d (speed %d)\n",
|
||||
drive->name, pio, pio_to_umc[pio]);
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
if (hwgroup && hwgroup->handler != NULL) {
|
||||
printk(KERN_ERR "umc8672: other interface is busy: exiting tune_umc()\n");
|
||||
} else {
|
||||
current_speeds[drive->name[2] - 'a'] = pio_to_umc[pio];
|
||||
umc_set_speeds (current_speeds);
|
||||
}
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
}
|
||||
|
||||
static int __init umc8672_probe(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
ide_hwif_t *hwif, *mate;
|
||||
|
||||
if (!request_region(0x108, 2, "umc8672")) {
|
||||
printk(KERN_ERR "umc8672: ports 0x108-0x109 already in use.\n");
|
||||
return 1;
|
||||
}
|
||||
local_irq_save(flags);
|
||||
outb_p(0x5A,0x108); /* enable umc */
|
||||
if (in_umc (0xd5) != 0xa0) {
|
||||
local_irq_restore(flags);
|
||||
printk(KERN_ERR "umc8672: not found\n");
|
||||
release_region(0x108, 2);
|
||||
return 1;
|
||||
}
|
||||
outb_p(0xa5,0x108); /* disable umc */
|
||||
|
||||
umc_set_speeds (current_speeds);
|
||||
local_irq_restore(flags);
|
||||
|
||||
hwif = &ide_hwifs[0];
|
||||
mate = &ide_hwifs[1];
|
||||
|
||||
hwif->chipset = ide_umc8672;
|
||||
hwif->tuneproc = &tune_umc;
|
||||
hwif->mate = mate;
|
||||
|
||||
mate->chipset = ide_umc8672;
|
||||
mate->tuneproc = &tune_umc;
|
||||
mate->mate = hwif;
|
||||
mate->channel = 1;
|
||||
|
||||
probe_hwif_init(hwif);
|
||||
probe_hwif_init(mate);
|
||||
|
||||
create_proc_ide_interfaces();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Can be called directly from ide.c. */
|
||||
int __init umc8672_init(void)
|
||||
{
|
||||
if (umc8672_probe())
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef MODULE
|
||||
module_init(umc8672_init);
|
||||
#endif
|
||||
|
||||
MODULE_AUTHOR("Wolfram Podien");
|
||||
MODULE_DESCRIPTION("Support for UMC 8672 IDE chipset");
|
||||
MODULE_LICENSE("GPL");
|
||||
323
extra/linux-2.6.10/drivers/ide/pci/.alim15x3.o.cmd
Normal file
323
extra/linux-2.6.10/drivers/ide/pci/.alim15x3.o.cmd
Normal file
@@ -0,0 +1,323 @@
|
||||
cmd_drivers/ide/pci/alim15x3.o := gcc -Wp,-MD,drivers/ide/pci/.alim15x3.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=alim15x3 -DKBUILD_MODNAME=alim15x3 -c -o drivers/ide/pci/alim15x3.o drivers/ide/pci/alim15x3.c
|
||||
|
||||
deps_drivers/ide/pci/alim15x3.o := \
|
||||
drivers/ide/pci/alim15x3.c \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/wdc/ali15x3.h) \
|
||||
$(wildcard include/config/sparc64.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/ioport.h \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/pci/alim15x3.o: $(deps_drivers/ide/pci/alim15x3.o)
|
||||
|
||||
$(deps_drivers/ide/pci/alim15x3.o):
|
||||
321
extra/linux-2.6.10/drivers/ide/pci/.amd74xx.o.cmd
Normal file
321
extra/linux-2.6.10/drivers/ide/pci/.amd74xx.o.cmd
Normal file
@@ -0,0 +1,321 @@
|
||||
cmd_drivers/ide/pci/amd74xx.o := gcc -Wp,-MD,drivers/ide/pci/.amd74xx.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=amd74xx -DKBUILD_MODNAME=amd74xx -c -o drivers/ide/pci/amd74xx.o drivers/ide/pci/amd74xx.c
|
||||
|
||||
deps_drivers/ide/pci/amd74xx.o := \
|
||||
drivers/ide/pci/amd74xx.c \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/blk/dev/ide/sata.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
drivers/ide/ide-timing.h \
|
||||
|
||||
drivers/ide/pci/amd74xx.o: $(deps_drivers/ide/pci/amd74xx.o)
|
||||
|
||||
$(deps_drivers/ide/pci/amd74xx.o):
|
||||
321
extra/linux-2.6.10/drivers/ide/pci/.atiixp.o.cmd
Normal file
321
extra/linux-2.6.10/drivers/ide/pci/.atiixp.o.cmd
Normal file
@@ -0,0 +1,321 @@
|
||||
cmd_drivers/ide/pci/atiixp.o := gcc -Wp,-MD,drivers/ide/pci/.atiixp.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=atiixp -DKBUILD_MODNAME=atiixp -c -o drivers/ide/pci/atiixp.o drivers/ide/pci/atiixp.c
|
||||
|
||||
deps_drivers/ide/pci/atiixp.o := \
|
||||
drivers/ide/pci/atiixp.c \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
|
||||
drivers/ide/pci/atiixp.o: $(deps_drivers/ide/pci/atiixp.o)
|
||||
|
||||
$(deps_drivers/ide/pci/atiixp.o):
|
||||
1
extra/linux-2.6.10/drivers/ide/pci/.built-in.o.cmd
Normal file
1
extra/linux-2.6.10/drivers/ide/pci/.built-in.o.cmd
Normal file
@@ -0,0 +1 @@
|
||||
cmd_drivers/ide/pci/built-in.o := ld -m elf_i386 -r -o drivers/ide/pci/built-in.o drivers/ide/pci/alim15x3.o drivers/ide/pci/amd74xx.o drivers/ide/pci/atiixp.o drivers/ide/pci/piix.o drivers/ide/pci/rz1000.o drivers/ide/pci/sis5513.o drivers/ide/pci/triflex.o drivers/ide/pci/via82cxxx.o drivers/ide/pci/generic.o
|
||||
322
extra/linux-2.6.10/drivers/ide/pci/.cmd640.o.cmd
Normal file
322
extra/linux-2.6.10/drivers/ide/pci/.cmd640.o.cmd
Normal file
@@ -0,0 +1,322 @@
|
||||
cmd_drivers/ide/pci/cmd640.o := gcc -Wp,-MD,drivers/ide/pci/.cmd640.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=cmd640 -DKBUILD_MODNAME=ide_core -c -o drivers/ide/pci/cmd640.o drivers/ide/pci/cmd640.c
|
||||
|
||||
deps_drivers/ide/pci/cmd640.o := \
|
||||
drivers/ide/pci/cmd640.c \
|
||||
$(wildcard include/config/blk/dev/cmd640/enhanced.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
$(wildcard include/config/smp.h) \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/thread_info.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/linux/stringify.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/pci/cmd640.o: $(deps_drivers/ide/pci/cmd640.o)
|
||||
|
||||
$(deps_drivers/ide/pci/cmd640.o):
|
||||
323
extra/linux-2.6.10/drivers/ide/pci/.generic.o.cmd
Normal file
323
extra/linux-2.6.10/drivers/ide/pci/.generic.o.cmd
Normal file
@@ -0,0 +1,323 @@
|
||||
cmd_drivers/ide/pci/generic.o := gcc -Wp,-MD,drivers/ide/pci/.generic.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=generic -DKBUILD_MODNAME=generic -c -o drivers/ide/pci/generic.o drivers/ide/pci/generic.c
|
||||
|
||||
deps_drivers/ide/pci/generic.o := \
|
||||
drivers/ide/pci/generic.c \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/ide/sata.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
drivers/ide/pci/generic.h \
|
||||
|
||||
drivers/ide/pci/generic.o: $(deps_drivers/ide/pci/generic.o)
|
||||
|
||||
$(deps_drivers/ide/pci/generic.o):
|
||||
324
extra/linux-2.6.10/drivers/ide/pci/.piix.o.cmd
Normal file
324
extra/linux-2.6.10/drivers/ide/pci/.piix.o.cmd
Normal file
@@ -0,0 +1,324 @@
|
||||
cmd_drivers/ide/pci/piix.o := gcc -Wp,-MD,drivers/ide/pci/.piix.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=piix -DKBUILD_MODNAME=piix -c -o drivers/ide/pci/piix.o drivers/ide/pci/piix.c
|
||||
|
||||
deps_drivers/ide/pci/piix.o := \
|
||||
drivers/ide/pci/piix.c \
|
||||
$(wildcard include/config/ia64.h) \
|
||||
$(wildcard include/config/blk/dev/ide/sata.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/asm/pci.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
drivers/ide/pci/piix.h \
|
||||
|
||||
drivers/ide/pci/piix.o: $(deps_drivers/ide/pci/piix.o)
|
||||
|
||||
$(deps_drivers/ide/pci/piix.o):
|
||||
321
extra/linux-2.6.10/drivers/ide/pci/.rz1000.o.cmd
Normal file
321
extra/linux-2.6.10/drivers/ide/pci/.rz1000.o.cmd
Normal file
@@ -0,0 +1,321 @@
|
||||
cmd_drivers/ide/pci/rz1000.o := gcc -Wp,-MD,drivers/ide/pci/.rz1000.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=rz1000 -DKBUILD_MODNAME=rz1000 -c -o drivers/ide/pci/rz1000.o drivers/ide/pci/rz1000.c
|
||||
|
||||
deps_drivers/ide/pci/rz1000.o := \
|
||||
drivers/ide/pci/rz1000.c \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/pci/rz1000.o: $(deps_drivers/ide/pci/rz1000.o)
|
||||
|
||||
$(deps_drivers/ide/pci/rz1000.o):
|
||||
322
extra/linux-2.6.10/drivers/ide/pci/.sis5513.o.cmd
Normal file
322
extra/linux-2.6.10/drivers/ide/pci/.sis5513.o.cmd
Normal file
@@ -0,0 +1,322 @@
|
||||
cmd_drivers/ide/pci/sis5513.o := gcc -Wp,-MD,drivers/ide/pci/.sis5513.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=sis5513 -DKBUILD_MODNAME=sis5513 -c -o drivers/ide/pci/sis5513.o drivers/ide/pci/sis5513.c
|
||||
|
||||
deps_drivers/ide/pci/sis5513.o := \
|
||||
drivers/ide/pci/sis5513.c \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
drivers/ide/ide-timing.h \
|
||||
|
||||
drivers/ide/pci/sis5513.o: $(deps_drivers/ide/pci/sis5513.o)
|
||||
|
||||
$(deps_drivers/ide/pci/sis5513.o):
|
||||
321
extra/linux-2.6.10/drivers/ide/pci/.triflex.o.cmd
Normal file
321
extra/linux-2.6.10/drivers/ide/pci/.triflex.o.cmd
Normal file
@@ -0,0 +1,321 @@
|
||||
cmd_drivers/ide/pci/triflex.o := gcc -Wp,-MD,drivers/ide/pci/.triflex.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=triflex -DKBUILD_MODNAME=triflex -c -o drivers/ide/pci/triflex.o drivers/ide/pci/triflex.c
|
||||
|
||||
deps_drivers/ide/pci/triflex.o := \
|
||||
drivers/ide/pci/triflex.c \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/delay.h \
|
||||
include/asm/delay.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
|
||||
drivers/ide/pci/triflex.o: $(deps_drivers/ide/pci/triflex.o)
|
||||
|
||||
$(deps_drivers/ide/pci/triflex.o):
|
||||
320
extra/linux-2.6.10/drivers/ide/pci/.via82cxxx.o.cmd
Normal file
320
extra/linux-2.6.10/drivers/ide/pci/.via82cxxx.o.cmd
Normal file
@@ -0,0 +1,320 @@
|
||||
cmd_drivers/ide/pci/via82cxxx.o := gcc -Wp,-MD,drivers/ide/pci/.via82cxxx.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium-mmx -Iinclude/asm-i386/mach-default -Wdeclaration-after-statement -Idrivers/ide -DKBUILD_BASENAME=via82cxxx -DKBUILD_MODNAME=via82cxxx -c -o drivers/ide/pci/via82cxxx.o drivers/ide/pci/via82cxxx.c
|
||||
|
||||
deps_drivers/ide/pci/via82cxxx.o := \
|
||||
drivers/ide/pci/via82cxxx.c \
|
||||
$(wildcard include/config/proc/fs.h) \
|
||||
include/linux/config.h \
|
||||
$(wildcard include/config/h.h) \
|
||||
include/linux/module.h \
|
||||
$(wildcard include/config/modules.h) \
|
||||
$(wildcard include/config/modversions.h) \
|
||||
$(wildcard include/config/module/unload.h) \
|
||||
$(wildcard include/config/kallsyms.h) \
|
||||
include/linux/sched.h \
|
||||
$(wildcard include/config/keys.h) \
|
||||
$(wildcard include/config/schedstats.h) \
|
||||
$(wildcard include/config/smp.h) \
|
||||
$(wildcard include/config/numa.h) \
|
||||
$(wildcard include/config/security.h) \
|
||||
$(wildcard include/config/preempt.h) \
|
||||
$(wildcard include/config/magic/sysrq.h) \
|
||||
include/asm/param.h \
|
||||
include/linux/capability.h \
|
||||
include/linux/types.h \
|
||||
$(wildcard include/config/uid16.h) \
|
||||
include/linux/posix_types.h \
|
||||
include/linux/stddef.h \
|
||||
include/linux/compiler.h \
|
||||
include/linux/compiler-gcc3.h \
|
||||
include/linux/compiler-gcc.h \
|
||||
include/asm/posix_types.h \
|
||||
include/asm/types.h \
|
||||
$(wildcard include/config/highmem64g.h) \
|
||||
$(wildcard include/config/lbd.h) \
|
||||
include/linux/spinlock.h \
|
||||
$(wildcard include/config/debug/spinlock.h) \
|
||||
$(wildcard include/config/lockmeter.h) \
|
||||
include/linux/preempt.h \
|
||||
include/linux/linkage.h \
|
||||
include/asm/linkage.h \
|
||||
$(wildcard include/config/regparm.h) \
|
||||
$(wildcard include/config/x86/alignment/16.h) \
|
||||
include/linux/thread_info.h \
|
||||
include/linux/bitops.h \
|
||||
include/asm/bitops.h \
|
||||
include/asm/thread_info.h \
|
||||
$(wildcard include/config/4kstacks.h) \
|
||||
$(wildcard include/config/debug/stack/usage.h) \
|
||||
include/asm/page.h \
|
||||
$(wildcard include/config/x86/use/3dnow.h) \
|
||||
$(wildcard include/config/x86/pae.h) \
|
||||
$(wildcard include/config/hugetlb/page.h) \
|
||||
$(wildcard include/config/highmem4g.h) \
|
||||
$(wildcard include/config/discontigmem.h) \
|
||||
include/asm/processor.h \
|
||||
$(wildcard include/config/mk8.h) \
|
||||
$(wildcard include/config/mk7.h) \
|
||||
include/asm/vm86.h \
|
||||
include/asm/math_emu.h \
|
||||
include/asm/sigcontext.h \
|
||||
include/asm/segment.h \
|
||||
include/asm/cpufeature.h \
|
||||
include/asm/msr.h \
|
||||
include/asm/system.h \
|
||||
$(wildcard include/config/x86/cmpxchg.h) \
|
||||
$(wildcard include/config/x86/oostore.h) \
|
||||
include/linux/kernel.h \
|
||||
$(wildcard include/config/debug/spinlock/sleep.h) \
|
||||
/usr/lib/gcc/i686-pc-linux-gnu/3.4.1/include/stdarg.h \
|
||||
include/asm/byteorder.h \
|
||||
$(wildcard include/config/x86/bswap.h) \
|
||||
include/linux/byteorder/little_endian.h \
|
||||
include/linux/byteorder/swab.h \
|
||||
include/linux/byteorder/generic.h \
|
||||
include/asm/bug.h \
|
||||
include/asm-generic/bug.h \
|
||||
include/linux/cache.h \
|
||||
include/asm/cache.h \
|
||||
$(wildcard include/config/x86/l1/cache/shift.h) \
|
||||
include/linux/threads.h \
|
||||
$(wildcard include/config/nr/cpus.h) \
|
||||
include/asm/percpu.h \
|
||||
include/asm-generic/percpu.h \
|
||||
include/linux/stringify.h \
|
||||
include/linux/timex.h \
|
||||
$(wildcard include/config/time/interpolation.h) \
|
||||
include/linux/time.h \
|
||||
include/linux/seqlock.h \
|
||||
include/asm/timex.h \
|
||||
$(wildcard include/config/x86/elan.h) \
|
||||
$(wildcard include/config/x86/tsc.h) \
|
||||
$(wildcard include/config/x86/generic.h) \
|
||||
include/linux/jiffies.h \
|
||||
include/asm/div64.h \
|
||||
include/linux/rbtree.h \
|
||||
include/linux/cpumask.h \
|
||||
$(wildcard include/config/hotplug/cpu.h) \
|
||||
include/linux/bitmap.h \
|
||||
include/linux/string.h \
|
||||
include/asm/string.h \
|
||||
include/asm/semaphore.h \
|
||||
include/asm/atomic.h \
|
||||
$(wildcard include/config/m386.h) \
|
||||
include/linux/wait.h \
|
||||
include/linux/list.h \
|
||||
include/linux/prefetch.h \
|
||||
include/asm/current.h \
|
||||
include/linux/rwsem.h \
|
||||
$(wildcard include/config/rwsem/generic/spinlock.h) \
|
||||
include/asm/rwsem.h \
|
||||
include/asm/ptrace.h \
|
||||
$(wildcard include/config/frame/pointer.h) \
|
||||
include/asm/mmu.h \
|
||||
include/linux/smp.h \
|
||||
include/linux/sem.h \
|
||||
$(wildcard include/config/sysvipc.h) \
|
||||
include/linux/ipc.h \
|
||||
include/asm/ipcbuf.h \
|
||||
include/asm/sembuf.h \
|
||||
include/linux/signal.h \
|
||||
include/asm/signal.h \
|
||||
include/asm/siginfo.h \
|
||||
include/asm-generic/siginfo.h \
|
||||
include/linux/resource.h \
|
||||
include/asm/resource.h \
|
||||
include/linux/securebits.h \
|
||||
include/linux/fs_struct.h \
|
||||
include/linux/completion.h \
|
||||
include/linux/pid.h \
|
||||
include/linux/percpu.h \
|
||||
include/linux/slab.h \
|
||||
$(wildcard include/config/.h) \
|
||||
include/linux/gfp.h \
|
||||
include/linux/mmzone.h \
|
||||
$(wildcard include/config/force/max/zoneorder.h) \
|
||||
include/linux/numa.h \
|
||||
include/linux/topology.h \
|
||||
$(wildcard include/config/sched/smt.h) \
|
||||
include/asm/topology.h \
|
||||
include/asm-generic/topology.h \
|
||||
include/linux/init.h \
|
||||
$(wildcard include/config/hotplug.h) \
|
||||
include/linux/kmalloc_sizes.h \
|
||||
$(wildcard include/config/mmu.h) \
|
||||
$(wildcard include/config/large/allocs.h) \
|
||||
include/linux/param.h \
|
||||
include/linux/timer.h \
|
||||
include/linux/aio.h \
|
||||
include/linux/workqueue.h \
|
||||
include/linux/aio_abi.h \
|
||||
include/linux/stat.h \
|
||||
include/asm/stat.h \
|
||||
include/linux/kmod.h \
|
||||
$(wildcard include/config/kmod.h) \
|
||||
include/linux/errno.h \
|
||||
include/asm/errno.h \
|
||||
include/asm-generic/errno.h \
|
||||
include/asm-generic/errno-base.h \
|
||||
include/linux/elf.h \
|
||||
include/asm/elf.h \
|
||||
include/asm/user.h \
|
||||
include/linux/utsname.h \
|
||||
include/linux/kobject.h \
|
||||
include/linux/sysfs.h \
|
||||
$(wildcard include/config/sysfs.h) \
|
||||
include/linux/kref.h \
|
||||
include/linux/kobject_uevent.h \
|
||||
$(wildcard include/config/kobject/uevent.h) \
|
||||
include/linux/moduleparam.h \
|
||||
include/asm/local.h \
|
||||
include/asm/module.h \
|
||||
$(wildcard include/config/m486.h) \
|
||||
$(wildcard include/config/m586.h) \
|
||||
$(wildcard include/config/m586tsc.h) \
|
||||
$(wildcard include/config/m586mmx.h) \
|
||||
$(wildcard include/config/m686.h) \
|
||||
$(wildcard include/config/mpentiumii.h) \
|
||||
$(wildcard include/config/mpentiumiii.h) \
|
||||
$(wildcard include/config/mpentiumm.h) \
|
||||
$(wildcard include/config/mpentium4.h) \
|
||||
$(wildcard include/config/mk6.h) \
|
||||
$(wildcard include/config/mcrusoe.h) \
|
||||
$(wildcard include/config/mefficeon.h) \
|
||||
$(wildcard include/config/mwinchipc6.h) \
|
||||
$(wildcard include/config/mwinchip2.h) \
|
||||
$(wildcard include/config/mwinchip3d.h) \
|
||||
$(wildcard include/config/mcyrixiii.h) \
|
||||
$(wildcard include/config/mviac3/2.h) \
|
||||
include/linux/ioport.h \
|
||||
include/linux/blkdev.h \
|
||||
include/linux/major.h \
|
||||
include/linux/genhd.h \
|
||||
$(wildcard include/config/solaris/x86/partition.h) \
|
||||
$(wildcard include/config/bsd/disklabel.h) \
|
||||
$(wildcard include/config/unixware/disklabel.h) \
|
||||
$(wildcard include/config/minix/subpartition.h) \
|
||||
include/linux/device.h \
|
||||
include/linux/pm.h \
|
||||
$(wildcard include/config/pm.h) \
|
||||
include/linux/fs.h \
|
||||
$(wildcard include/config/dnotify.h) \
|
||||
$(wildcard include/config/quota.h) \
|
||||
$(wildcard include/config/epoll.h) \
|
||||
$(wildcard include/config/auditsyscall.h) \
|
||||
include/linux/limits.h \
|
||||
include/linux/kdev_t.h \
|
||||
include/linux/ioctl.h \
|
||||
include/asm/ioctl.h \
|
||||
include/linux/dcache.h \
|
||||
include/linux/rcupdate.h \
|
||||
include/linux/prio_tree.h \
|
||||
include/linux/radix-tree.h \
|
||||
include/linux/audit.h \
|
||||
$(wildcard include/config/audit.h) \
|
||||
include/linux/quota.h \
|
||||
include/linux/dqblk_xfs.h \
|
||||
include/linux/dqblk_v1.h \
|
||||
include/linux/dqblk_v2.h \
|
||||
include/linux/nfs_fs_i.h \
|
||||
include/linux/nfs.h \
|
||||
include/linux/sunrpc/msg_prot.h \
|
||||
include/linux/fcntl.h \
|
||||
include/asm/fcntl.h \
|
||||
include/linux/err.h \
|
||||
include/linux/pagemap.h \
|
||||
include/linux/mm.h \
|
||||
$(wildcard include/config/sysctl.h) \
|
||||
$(wildcard include/config/stack/growsup.h) \
|
||||
$(wildcard include/config/highmem.h) \
|
||||
$(wildcard include/config/shmem.h) \
|
||||
$(wildcard include/config/debug/pagealloc.h) \
|
||||
$(wildcard include/config/arch/gate/area.h) \
|
||||
include/asm/pgtable.h \
|
||||
$(wildcard include/config/highpte.h) \
|
||||
include/asm/fixmap.h \
|
||||
$(wildcard include/config/x86/local/apic.h) \
|
||||
$(wildcard include/config/x86/io/apic.h) \
|
||||
$(wildcard include/config/x86/visws/apic.h) \
|
||||
$(wildcard include/config/x86/f00f/bug.h) \
|
||||
$(wildcard include/config/x86/cyclone/timer.h) \
|
||||
$(wildcard include/config/acpi/boot.h) \
|
||||
$(wildcard include/config/pci/mmconfig.h) \
|
||||
include/asm/acpi.h \
|
||||
$(wildcard include/config/acpi/pci.h) \
|
||||
$(wildcard include/config/acpi/sleep.h) \
|
||||
include/asm/apicdef.h \
|
||||
include/asm/pgtable-2level-defs.h \
|
||||
include/asm/pgtable-2level.h \
|
||||
include/asm-generic/pgtable.h \
|
||||
include/linux/page-flags.h \
|
||||
$(wildcard include/config/swap.h) \
|
||||
include/linux/highmem.h \
|
||||
include/asm/cacheflush.h \
|
||||
include/asm/uaccess.h \
|
||||
$(wildcard include/config/x86/intel/usercopy.h) \
|
||||
$(wildcard include/config/x86/wp/works/ok.h) \
|
||||
include/linux/backing-dev.h \
|
||||
include/linux/mempool.h \
|
||||
include/linux/bio.h \
|
||||
include/asm/io.h \
|
||||
$(wildcard include/config/x86/ppro/fence.h) \
|
||||
$(wildcard include/config/x86/numaq.h) \
|
||||
include/asm-generic/iomap.h \
|
||||
include/linux/vmalloc.h \
|
||||
include/asm/scatterlist.h \
|
||||
include/linux/elevator.h \
|
||||
include/linux/pci.h \
|
||||
$(wildcard include/config/pci/names.h) \
|
||||
$(wildcard include/config/pci.h) \
|
||||
$(wildcard include/config/isa.h) \
|
||||
$(wildcard include/config/eisa.h) \
|
||||
$(wildcard include/config/pci/msi.h) \
|
||||
$(wildcard include/config/pci/domains.h) \
|
||||
include/linux/mod_devicetable.h \
|
||||
include/linux/pci_ids.h \
|
||||
include/linux/dmapool.h \
|
||||
include/asm/pci.h \
|
||||
include/asm-generic/pci-dma-compat.h \
|
||||
include/linux/dma-mapping.h \
|
||||
include/asm/dma-mapping.h \
|
||||
include/asm-generic/pci.h \
|
||||
include/linux/ide.h \
|
||||
$(wildcard include/config/apm.h) \
|
||||
$(wildcard include/config/apm/module.h) \
|
||||
$(wildcard include/config/ppc32.h) \
|
||||
$(wildcard include/config/blk/dev/idepci.h) \
|
||||
$(wildcard include/config/blk/dev/offboard.h) \
|
||||
$(wildcard include/config/blk/dev/idedma.h) \
|
||||
$(wildcard include/config/blk/dev/idedma/pci.h) \
|
||||
include/linux/hdreg.h \
|
||||
include/linux/ata.h \
|
||||
include/linux/hdsmart.h \
|
||||
include/linux/proc_fs.h \
|
||||
$(wildcard include/config/proc/devicetree.h) \
|
||||
$(wildcard include/config/proc/kcore.h) \
|
||||
include/linux/interrupt.h \
|
||||
$(wildcard include/config/generic/hardirqs.h) \
|
||||
$(wildcard include/config/generic/irq/probe.h) \
|
||||
include/linux/hardirq.h \
|
||||
include/linux/smp_lock.h \
|
||||
$(wildcard include/config/lock/kernel.h) \
|
||||
include/asm/hardirq.h \
|
||||
include/linux/irq.h \
|
||||
$(wildcard include/config/arch/s390.h) \
|
||||
include/asm/irq.h \
|
||||
$(wildcard include/config/irqbalance.h) \
|
||||
include/asm-i386/mach-default/irq_vectors.h \
|
||||
include/asm-i386/mach-default/irq_vectors_limits.h \
|
||||
include/asm/hw_irq.h \
|
||||
include/linux/profile.h \
|
||||
$(wildcard include/config/profiling.h) \
|
||||
include/asm/sections.h \
|
||||
include/asm-generic/sections.h \
|
||||
include/linux/irq_cpustat.h \
|
||||
include/asm/ide.h \
|
||||
include/asm-generic/ide_iops.h \
|
||||
drivers/ide/ide-timing.h \
|
||||
|
||||
drivers/ide/pci/via82cxxx.o: $(deps_drivers/ide/pci/via82cxxx.o)
|
||||
|
||||
$(deps_drivers/ide/pci/via82cxxx.o):
|
||||
35
extra/linux-2.6.10/drivers/ide/pci/Makefile
Normal file
35
extra/linux-2.6.10/drivers/ide/pci/Makefile
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_ADMA100) += adma100.o
|
||||
obj-$(CONFIG_BLK_DEV_AEC62XX) += aec62xx.o
|
||||
obj-$(CONFIG_BLK_DEV_ALI15X3) += alim15x3.o
|
||||
obj-$(CONFIG_BLK_DEV_AMD74XX) += amd74xx.o
|
||||
obj-$(CONFIG_BLK_DEV_ATIIXP) += atiixp.o
|
||||
obj-$(CONFIG_BLK_DEV_CMD64X) += cmd64x.o
|
||||
obj-$(CONFIG_BLK_DEV_CS5520) += cs5520.o
|
||||
obj-$(CONFIG_BLK_DEV_CS5530) += cs5530.o
|
||||
obj-$(CONFIG_BLK_DEV_SC1200) += sc1200.o
|
||||
obj-$(CONFIG_BLK_DEV_CY82C693) += cy82c693.o
|
||||
obj-$(CONFIG_BLK_DEV_HPT34X) += hpt34x.o
|
||||
obj-$(CONFIG_BLK_DEV_HPT366) += hpt366.o
|
||||
#obj-$(CONFIG_BLK_DEV_HPT37X) += hpt37x.o
|
||||
obj-$(CONFIG_BLK_DEV_IT8172) += it8172.o
|
||||
obj-$(CONFIG_BLK_DEV_NS87415) += ns87415.o
|
||||
obj-$(CONFIG_BLK_DEV_OPTI621) += opti621.o
|
||||
obj-$(CONFIG_BLK_DEV_PDC202XX_OLD) += pdc202xx_old.o
|
||||
obj-$(CONFIG_BLK_DEV_PDC202XX_NEW) += pdc202xx_new.o
|
||||
obj-$(CONFIG_BLK_DEV_PIIX) += piix.o
|
||||
obj-$(CONFIG_BLK_DEV_RZ1000) += rz1000.o
|
||||
obj-$(CONFIG_BLK_DEV_SVWKS) += serverworks.o
|
||||
obj-$(CONFIG_BLK_DEV_SGIIOC4) += sgiioc4.o
|
||||
obj-$(CONFIG_BLK_DEV_SIIMAGE) += siimage.o
|
||||
obj-$(CONFIG_BLK_DEV_SIS5513) += sis5513.o
|
||||
obj-$(CONFIG_BLK_DEV_SL82C105) += sl82c105.o
|
||||
obj-$(CONFIG_BLK_DEV_SLC90E66) += slc90e66.o
|
||||
obj-$(CONFIG_BLK_DEV_TRIFLEX) += triflex.o
|
||||
obj-$(CONFIG_BLK_DEV_TRM290) += trm290.o
|
||||
obj-$(CONFIG_BLK_DEV_VIA82CXXX) += via82cxxx.o
|
||||
|
||||
# Must appear at the end of the block
|
||||
obj-$(CONFIG_BLK_DEV_GENERIC) += generic.o
|
||||
|
||||
EXTRA_CFLAGS := -Idrivers/ide
|
||||
30
extra/linux-2.6.10/drivers/ide/pci/adma100.c
Normal file
30
extra/linux-2.6.10/drivers/ide/pci/adma100.c
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* linux/drivers/ide/pci/adma100.c -- basic support for Pacific Digital ADMA-100 boards
|
||||
*
|
||||
* Created 09 Apr 2002 by Mark Lord
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#include <linux/mm.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
void __init ide_init_adma100 (ide_hwif_t *hwif)
|
||||
{
|
||||
unsigned long phy_admctl = pci_resource_start(hwif->pci_dev, 4) + 0x80 + (hwif->channel * 0x20);
|
||||
void *v_admctl;
|
||||
|
||||
hwif->autodma = 0; // not compatible with normal IDE DMA transfers
|
||||
hwif->dma_base = 0; // disable DMA completely
|
||||
hwif->io_ports[IDE_CONTROL_OFFSET] += 4; // chip needs offset of 6 instead of 2
|
||||
v_admctl = ioremap_nocache(phy_admctl, 1024); // map config regs, so we can turn on drive IRQs
|
||||
*((unsigned short *)v_admctl) &= 3; // enable aIEN; preserve PIO mode
|
||||
iounmap(v_admctl); // all done; unmap config regs
|
||||
}
|
||||
28
extra/linux-2.6.10/drivers/ide/pci/adma100.h
Normal file
28
extra/linux-2.6.10/drivers/ide/pci/adma100.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#ifndef ADMA_100_H
|
||||
#define ADMA_100_H
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/ide.h>
|
||||
|
||||
extern void init_setup_pdcadma(struct pci_dev *, ide_pci_device_t *);
|
||||
extern unsigned int init_chipset_pdcadma(struct pci_dev *, const char *);
|
||||
extern void init_hwif_pdcadma(ide_hwif_t *);
|
||||
extern void init_dma_pdcadma(ide_hwif_t *, unsigned long);
|
||||
|
||||
static ide_pci_device_t pdcadma_chipsets[] __devinitdata = {
|
||||
{
|
||||
.vendor = PCI_VENDOR_ID_PDC,
|
||||
.device = PCI_DEVICE_ID_PDC_1841,
|
||||
.name = "ADMA100",
|
||||
.init_setup = init_setup_pdcadma,
|
||||
.init_chipset = init_chipset_pdcadma,
|
||||
.init_hwif = init_hwif_pdcadma,
|
||||
.init_dma = init_dma_pdcadma,
|
||||
.channels = 2,
|
||||
.autodma = NODMA,
|
||||
.bootable = OFF_BOARD,
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* ADMA_100_H */
|
||||
388
extra/linux-2.6.10/drivers/ide/pci/aec62xx.c
Normal file
388
extra/linux-2.6.10/drivers/ide/pci/aec62xx.c
Normal file
@@ -0,0 +1,388 @@
|
||||
/*
|
||||
* linux/drivers/ide/pci/aec62xx.c Version 0.11 March 27, 2002
|
||||
*
|
||||
* Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#include "aec62xx.h"
|
||||
|
||||
#if 0
|
||||
if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) {
|
||||
(void) pci_read_config_byte(dev, 0x54, &art);
|
||||
p += sprintf(p, "DMA Mode: %s(%s)",
|
||||
(c0&0x20)?((art&0x03)?"UDMA":" DMA"):" PIO",
|
||||
(art&0x02)?"2":(art&0x01)?"1":"0");
|
||||
p += sprintf(p, " %s(%s)",
|
||||
(c0&0x40)?((art&0x0c)?"UDMA":" DMA"):" PIO",
|
||||
(art&0x08)?"2":(art&0x04)?"1":"0");
|
||||
p += sprintf(p, " %s(%s)",
|
||||
(c1&0x20)?((art&0x30)?"UDMA":" DMA"):" PIO",
|
||||
(art&0x20)?"2":(art&0x10)?"1":"0");
|
||||
p += sprintf(p, " %s(%s)\n",
|
||||
(c1&0x40)?((art&0xc0)?"UDMA":" DMA"):" PIO",
|
||||
(art&0x80)?"2":(art&0x40)?"1":"0");
|
||||
} else {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* TO DO: active tuning and correction of cards without a bios.
|
||||
*/
|
||||
static u8 pci_bus_clock_list (u8 speed, struct chipset_bus_clock_list_entry * chipset_table)
|
||||
{
|
||||
for ( ; chipset_table->xfer_speed ; chipset_table++)
|
||||
if (chipset_table->xfer_speed == speed) {
|
||||
return chipset_table->chipset_settings;
|
||||
}
|
||||
return chipset_table->chipset_settings;
|
||||
}
|
||||
|
||||
static u8 pci_bus_clock_list_ultra (u8 speed, struct chipset_bus_clock_list_entry * chipset_table)
|
||||
{
|
||||
for ( ; chipset_table->xfer_speed ; chipset_table++)
|
||||
if (chipset_table->xfer_speed == speed) {
|
||||
return chipset_table->ultra_settings;
|
||||
}
|
||||
return chipset_table->ultra_settings;
|
||||
}
|
||||
|
||||
static u8 aec62xx_ratemask (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 mode;
|
||||
|
||||
switch(hwif->pci_dev->device) {
|
||||
case PCI_DEVICE_ID_ARTOP_ATP865:
|
||||
case PCI_DEVICE_ID_ARTOP_ATP865R:
|
||||
#if 0
|
||||
mode = (hwif->INB(hwif->dma_master) & 0x10) ? 4 : 3;
|
||||
#else
|
||||
mode = (hwif->INB(((hwif->channel) ?
|
||||
hwif->mate->dma_status :
|
||||
hwif->dma_status)) & 0x10) ? 4 : 3;
|
||||
#endif
|
||||
break;
|
||||
case PCI_DEVICE_ID_ARTOP_ATP860:
|
||||
case PCI_DEVICE_ID_ARTOP_ATP860R:
|
||||
mode = 2;
|
||||
break;
|
||||
case PCI_DEVICE_ID_ARTOP_ATP850UF:
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!eighty_ninty_three(drive))
|
||||
mode = min(mode, (u8)1);
|
||||
return mode;
|
||||
}
|
||||
|
||||
static int aec6210_tune_chipset (ide_drive_t *drive, u8 xferspeed)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
u16 d_conf = 0;
|
||||
u8 speed = ide_rate_filter(aec62xx_ratemask(drive), xferspeed);
|
||||
u8 ultra = 0, ultra_conf = 0;
|
||||
u8 tmp0 = 0, tmp1 = 0, tmp2 = 0;
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
/* 0x40|(2*drive->dn): Active, 0x41|(2*drive->dn): Recovery */
|
||||
pci_read_config_word(dev, 0x40|(2*drive->dn), &d_conf);
|
||||
tmp0 = pci_bus_clock_list(speed, BUSCLOCK(dev));
|
||||
SPLIT_BYTE(tmp0,tmp1,tmp2);
|
||||
MAKE_WORD(d_conf,tmp1,tmp2);
|
||||
pci_write_config_word(dev, 0x40|(2*drive->dn), d_conf);
|
||||
|
||||
tmp1 = 0x00;
|
||||
tmp2 = 0x00;
|
||||
pci_read_config_byte(dev, 0x54, &ultra);
|
||||
tmp1 = ((0x00 << (2*drive->dn)) | (ultra & ~(3 << (2*drive->dn))));
|
||||
ultra_conf = pci_bus_clock_list_ultra(speed, BUSCLOCK(dev));
|
||||
tmp2 = ((ultra_conf << (2*drive->dn)) | (tmp1 & ~(3 << (2*drive->dn))));
|
||||
pci_write_config_byte(dev, 0x54, tmp2);
|
||||
local_irq_restore(flags);
|
||||
return(ide_config_drive_speed(drive, speed));
|
||||
}
|
||||
|
||||
static int aec6260_tune_chipset (ide_drive_t *drive, u8 xferspeed)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
u8 speed = ide_rate_filter(aec62xx_ratemask(drive), xferspeed);
|
||||
u8 unit = (drive->select.b.unit & 0x01);
|
||||
u8 tmp1 = 0, tmp2 = 0;
|
||||
u8 ultra = 0, drive_conf = 0, ultra_conf = 0;
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
/* high 4-bits: Active, low 4-bits: Recovery */
|
||||
pci_read_config_byte(dev, 0x40|drive->dn, &drive_conf);
|
||||
drive_conf = pci_bus_clock_list(speed, BUSCLOCK(dev));
|
||||
pci_write_config_byte(dev, 0x40|drive->dn, drive_conf);
|
||||
|
||||
pci_read_config_byte(dev, (0x44|hwif->channel), &ultra);
|
||||
tmp1 = ((0x00 << (4*unit)) | (ultra & ~(7 << (4*unit))));
|
||||
ultra_conf = pci_bus_clock_list_ultra(speed, BUSCLOCK(dev));
|
||||
tmp2 = ((ultra_conf << (4*unit)) | (tmp1 & ~(7 << (4*unit))));
|
||||
pci_write_config_byte(dev, (0x44|hwif->channel), tmp2);
|
||||
local_irq_restore(flags);
|
||||
return(ide_config_drive_speed(drive, speed));
|
||||
}
|
||||
|
||||
static int aec62xx_tune_chipset (ide_drive_t *drive, u8 speed)
|
||||
{
|
||||
switch (HWIF(drive)->pci_dev->device) {
|
||||
case PCI_DEVICE_ID_ARTOP_ATP865:
|
||||
case PCI_DEVICE_ID_ARTOP_ATP865R:
|
||||
case PCI_DEVICE_ID_ARTOP_ATP860:
|
||||
case PCI_DEVICE_ID_ARTOP_ATP860R:
|
||||
return ((int) aec6260_tune_chipset(drive, speed));
|
||||
case PCI_DEVICE_ID_ARTOP_ATP850UF:
|
||||
return ((int) aec6210_tune_chipset(drive, speed));
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static int config_chipset_for_dma (ide_drive_t *drive)
|
||||
{
|
||||
u8 speed = ide_dma_speed(drive, aec62xx_ratemask(drive));
|
||||
|
||||
if (!(speed))
|
||||
return 0;
|
||||
|
||||
(void) aec62xx_tune_chipset(drive, speed);
|
||||
return ide_dma_enable(drive);
|
||||
}
|
||||
|
||||
static void aec62xx_tune_drive (ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
u8 speed = 0;
|
||||
u8 new_pio = XFER_PIO_0 + ide_get_best_pio_mode(drive, 255, 5, NULL);
|
||||
|
||||
switch(pio) {
|
||||
case 5: speed = new_pio; break;
|
||||
case 4: speed = XFER_PIO_4; break;
|
||||
case 3: speed = XFER_PIO_3; break;
|
||||
case 2: speed = XFER_PIO_2; break;
|
||||
case 1: speed = XFER_PIO_1; break;
|
||||
default: speed = XFER_PIO_0; break;
|
||||
}
|
||||
(void) aec62xx_tune_chipset(drive, speed);
|
||||
}
|
||||
|
||||
static int aec62xx_config_drive_xfer_rate (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct hd_driveid *id = drive->id;
|
||||
|
||||
if ((id->capability & 1) && drive->autodma) {
|
||||
|
||||
if (ide_use_dma(drive)) {
|
||||
if (config_chipset_for_dma(drive))
|
||||
return hwif->ide_dma_on(drive);
|
||||
}
|
||||
|
||||
goto fast_ata_pio;
|
||||
|
||||
} else if ((id->capability & 8) || (id->field_valid & 2)) {
|
||||
fast_ata_pio:
|
||||
aec62xx_tune_drive(drive, 5);
|
||||
return hwif->ide_dma_off_quietly(drive);
|
||||
}
|
||||
/* IORDY not supported */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int aec62xx_irq_timeout (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
|
||||
switch(dev->device) {
|
||||
case PCI_DEVICE_ID_ARTOP_ATP860:
|
||||
case PCI_DEVICE_ID_ARTOP_ATP860R:
|
||||
case PCI_DEVICE_ID_ARTOP_ATP865:
|
||||
case PCI_DEVICE_ID_ARTOP_ATP865R:
|
||||
printk(" AEC62XX time out ");
|
||||
#if 0
|
||||
{
|
||||
int i = 0;
|
||||
u8 reg49h = 0;
|
||||
pci_read_config_byte(HWIF(drive)->pci_dev, 0x49, ®49h);
|
||||
for (i=0;i<256;i++)
|
||||
pci_write_config_byte(HWIF(drive)->pci_dev, 0x49, reg49h|0x10);
|
||||
pci_write_config_byte(HWIF(drive)->pci_dev, 0x49, reg49h & ~0x10);
|
||||
}
|
||||
return 0;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#if 0
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
u8 tmp1 = 0, tmp2 = 0, mode6 = 0;
|
||||
|
||||
pci_read_config_byte(dev, 0x44, &tmp1);
|
||||
pci_read_config_byte(dev, 0x45, &tmp2);
|
||||
printk(" AEC6280 r44=%x r45=%x ",tmp1,tmp2);
|
||||
mode6 = HWIF(drive)->INB(((hwif->channel) ?
|
||||
hwif->mate->dma_status :
|
||||
hwif->dma_status));
|
||||
printk(" AEC6280 133=%x ", (mode6 & 0x10));
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const char *name)
|
||||
{
|
||||
int bus_speed = system_bus_clock();
|
||||
|
||||
if (dev->resource[PCI_ROM_RESOURCE].start) {
|
||||
pci_write_config_dword(dev, PCI_ROM_ADDRESS, dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
|
||||
printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name, dev->resource[PCI_ROM_RESOURCE].start);
|
||||
}
|
||||
|
||||
if (bus_speed <= 33)
|
||||
pci_set_drvdata(dev, (void *) aec6xxx_33_base);
|
||||
else
|
||||
pci_set_drvdata(dev, (void *) aec6xxx_34_base);
|
||||
|
||||
return dev->irq;
|
||||
}
|
||||
|
||||
static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
|
||||
{
|
||||
hwif->autodma = 0;
|
||||
hwif->tuneproc = &aec62xx_tune_drive;
|
||||
hwif->speedproc = &aec62xx_tune_chipset;
|
||||
|
||||
if (hwif->pci_dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) {
|
||||
hwif->serialized = hwif->channel;
|
||||
hwif->no_dsc = 1;
|
||||
}
|
||||
|
||||
if (hwif->mate)
|
||||
hwif->mate->serialized = hwif->serialized;
|
||||
|
||||
if (!hwif->dma_base) {
|
||||
hwif->drives[0].autotune = 1;
|
||||
hwif->drives[1].autotune = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
hwif->ultra_mask = 0x7f;
|
||||
hwif->mwdma_mask = 0x07;
|
||||
hwif->swdma_mask = 0x07;
|
||||
|
||||
hwif->ide_dma_check = &aec62xx_config_drive_xfer_rate;
|
||||
hwif->ide_dma_lostirq = &aec62xx_irq_timeout;
|
||||
hwif->ide_dma_timeout = &aec62xx_irq_timeout;
|
||||
if (!noautodma)
|
||||
hwif->autodma = 1;
|
||||
hwif->drives[0].autodma = hwif->autodma;
|
||||
hwif->drives[1].autodma = hwif->autodma;
|
||||
}
|
||||
|
||||
static void __devinit init_dma_aec62xx(ide_hwif_t *hwif, unsigned long dmabase)
|
||||
{
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
|
||||
if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) {
|
||||
u8 reg54h = 0;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
pci_read_config_byte(dev, 0x54, ®54h);
|
||||
pci_write_config_byte(dev, 0x54, reg54h & ~(hwif->channel ? 0xF0 : 0x0F));
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
} else {
|
||||
u8 ata66 = 0;
|
||||
pci_read_config_byte(hwif->pci_dev, 0x49, &ata66);
|
||||
if (!(hwif->udma_four))
|
||||
hwif->udma_four = (ata66&(hwif->channel?0x02:0x01))?0:1;
|
||||
}
|
||||
|
||||
ide_setup_dma(hwif, dmabase, 8);
|
||||
}
|
||||
|
||||
static void __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d)
|
||||
{
|
||||
ide_setup_pci_device(dev, d);
|
||||
}
|
||||
|
||||
static void __devinit init_setup_aec6x80(struct pci_dev *dev, ide_pci_device_t *d)
|
||||
{
|
||||
unsigned long bar4reg = pci_resource_start(dev, 4);
|
||||
|
||||
if (inb(bar4reg+2) & 0x10) {
|
||||
strcpy(d->name, "AEC6880");
|
||||
if (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R)
|
||||
strcpy(d->name, "AEC6880R");
|
||||
} else {
|
||||
strcpy(d->name, "AEC6280");
|
||||
if (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R)
|
||||
strcpy(d->name, "AEC6280R");
|
||||
}
|
||||
|
||||
ide_setup_pci_device(dev, d);
|
||||
}
|
||||
|
||||
/**
|
||||
* aec62xx_init_one - called when a AEC is found
|
||||
* @dev: the aec62xx device
|
||||
* @id: the matching pci id
|
||||
*
|
||||
* Called when the PCI registration layer (or the IDE initialization)
|
||||
* finds a device matching our IDE device tables.
|
||||
*/
|
||||
|
||||
static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
{
|
||||
ide_pci_device_t *d = &aec62xx_chipsets[id->driver_data];
|
||||
|
||||
d->init_setup(dev, d);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct pci_device_id aec62xx_pci_tbl[] = {
|
||||
{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP850UF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
||||
{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
|
||||
{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860R, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
|
||||
{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
|
||||
{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865R, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
|
||||
{ 0, },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, aec62xx_pci_tbl);
|
||||
|
||||
static struct pci_driver driver = {
|
||||
.name = "AEC62xx_IDE",
|
||||
.id_table = aec62xx_pci_tbl,
|
||||
.probe = aec62xx_init_one,
|
||||
};
|
||||
|
||||
static int aec62xx_ide_init(void)
|
||||
{
|
||||
return ide_pci_register_driver(&driver);
|
||||
}
|
||||
|
||||
module_init(aec62xx_ide_init);
|
||||
|
||||
MODULE_AUTHOR("Andre Hedrick");
|
||||
MODULE_DESCRIPTION("PCI driver module for ARTOP AEC62xx IDE");
|
||||
MODULE_LICENSE("GPL");
|
||||
122
extra/linux-2.6.10/drivers/ide/pci/aec62xx.h
Normal file
122
extra/linux-2.6.10/drivers/ide/pci/aec62xx.h
Normal file
@@ -0,0 +1,122 @@
|
||||
#ifndef AEC62XX_H
|
||||
#define AEC62XX_H
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/ide.h>
|
||||
|
||||
struct chipset_bus_clock_list_entry {
|
||||
byte xfer_speed;
|
||||
byte chipset_settings;
|
||||
byte ultra_settings;
|
||||
};
|
||||
|
||||
static struct chipset_bus_clock_list_entry aec6xxx_33_base [] = {
|
||||
{ XFER_UDMA_6, 0x31, 0x07 },
|
||||
{ XFER_UDMA_5, 0x31, 0x06 },
|
||||
{ XFER_UDMA_4, 0x31, 0x05 },
|
||||
{ XFER_UDMA_3, 0x31, 0x04 },
|
||||
{ XFER_UDMA_2, 0x31, 0x03 },
|
||||
{ XFER_UDMA_1, 0x31, 0x02 },
|
||||
{ XFER_UDMA_0, 0x31, 0x01 },
|
||||
|
||||
{ XFER_MW_DMA_2, 0x31, 0x00 },
|
||||
{ XFER_MW_DMA_1, 0x31, 0x00 },
|
||||
{ XFER_MW_DMA_0, 0x0a, 0x00 },
|
||||
{ XFER_PIO_4, 0x31, 0x00 },
|
||||
{ XFER_PIO_3, 0x33, 0x00 },
|
||||
{ XFER_PIO_2, 0x08, 0x00 },
|
||||
{ XFER_PIO_1, 0x0a, 0x00 },
|
||||
{ XFER_PIO_0, 0x00, 0x00 },
|
||||
{ 0, 0x00, 0x00 }
|
||||
};
|
||||
|
||||
static struct chipset_bus_clock_list_entry aec6xxx_34_base [] = {
|
||||
{ XFER_UDMA_6, 0x41, 0x06 },
|
||||
{ XFER_UDMA_5, 0x41, 0x05 },
|
||||
{ XFER_UDMA_4, 0x41, 0x04 },
|
||||
{ XFER_UDMA_3, 0x41, 0x03 },
|
||||
{ XFER_UDMA_2, 0x41, 0x02 },
|
||||
{ XFER_UDMA_1, 0x41, 0x01 },
|
||||
{ XFER_UDMA_0, 0x41, 0x01 },
|
||||
|
||||
{ XFER_MW_DMA_2, 0x41, 0x00 },
|
||||
{ XFER_MW_DMA_1, 0x42, 0x00 },
|
||||
{ XFER_MW_DMA_0, 0x7a, 0x00 },
|
||||
{ XFER_PIO_4, 0x41, 0x00 },
|
||||
{ XFER_PIO_3, 0x43, 0x00 },
|
||||
{ XFER_PIO_2, 0x78, 0x00 },
|
||||
{ XFER_PIO_1, 0x7a, 0x00 },
|
||||
{ XFER_PIO_0, 0x70, 0x00 },
|
||||
{ 0, 0x00, 0x00 }
|
||||
};
|
||||
|
||||
#ifndef SPLIT_BYTE
|
||||
#define SPLIT_BYTE(B,H,L) ((H)=(B>>4), (L)=(B-((B>>4)<<4)))
|
||||
#endif
|
||||
#ifndef MAKE_WORD
|
||||
#define MAKE_WORD(W,HB,LB) ((W)=((HB<<8)+LB))
|
||||
#endif
|
||||
|
||||
#define BUSCLOCK(D) \
|
||||
((struct chipset_bus_clock_list_entry *) pci_get_drvdata((D)))
|
||||
|
||||
static void init_setup_aec6x80(struct pci_dev *, ide_pci_device_t *);
|
||||
static void init_setup_aec62xx(struct pci_dev *, ide_pci_device_t *);
|
||||
static unsigned int init_chipset_aec62xx(struct pci_dev *, const char *);
|
||||
static void init_hwif_aec62xx(ide_hwif_t *);
|
||||
static void init_dma_aec62xx(ide_hwif_t *, unsigned long);
|
||||
|
||||
static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
|
||||
{ /* 0 */
|
||||
.name = "AEC6210",
|
||||
.init_setup = init_setup_aec62xx,
|
||||
.init_chipset = init_chipset_aec62xx,
|
||||
.init_hwif = init_hwif_aec62xx,
|
||||
.init_dma = init_dma_aec62xx,
|
||||
.channels = 2,
|
||||
.autodma = AUTODMA,
|
||||
.enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
|
||||
.bootable = OFF_BOARD,
|
||||
},{ /* 1 */
|
||||
.name = "AEC6260",
|
||||
.init_setup = init_setup_aec62xx,
|
||||
.init_chipset = init_chipset_aec62xx,
|
||||
.init_hwif = init_hwif_aec62xx,
|
||||
.init_dma = init_dma_aec62xx,
|
||||
.channels = 2,
|
||||
.autodma = NOAUTODMA,
|
||||
.bootable = OFF_BOARD,
|
||||
},{ /* 2 */
|
||||
.name = "AEC6260R",
|
||||
.init_setup = init_setup_aec62xx,
|
||||
.init_chipset = init_chipset_aec62xx,
|
||||
.init_hwif = init_hwif_aec62xx,
|
||||
.init_dma = init_dma_aec62xx,
|
||||
.channels = 2,
|
||||
.autodma = AUTODMA,
|
||||
.enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
|
||||
.bootable = NEVER_BOARD,
|
||||
},{ /* 3 */
|
||||
.name = "AEC6X80",
|
||||
.init_setup = init_setup_aec6x80,
|
||||
.init_chipset = init_chipset_aec62xx,
|
||||
.init_hwif = init_hwif_aec62xx,
|
||||
.init_dma = init_dma_aec62xx,
|
||||
.channels = 2,
|
||||
.autodma = AUTODMA,
|
||||
.bootable = OFF_BOARD,
|
||||
},{ /* 4 */
|
||||
.name = "AEC6X80R",
|
||||
.init_setup = init_setup_aec6x80,
|
||||
.init_chipset = init_chipset_aec62xx,
|
||||
.init_hwif = init_hwif_aec62xx,
|
||||
.init_dma = init_dma_aec62xx,
|
||||
.channels = 2,
|
||||
.autodma = AUTODMA,
|
||||
.enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
|
||||
.bootable = OFF_BOARD,
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* AEC62XX_H */
|
||||
914
extra/linux-2.6.10/drivers/ide/pci/alim15x3.c
Normal file
914
extra/linux-2.6.10/drivers/ide/pci/alim15x3.c
Normal file
@@ -0,0 +1,914 @@
|
||||
/*
|
||||
* linux/drivers/ide/pci/alim15x3.c Version 0.17 2003/01/02
|
||||
*
|
||||
* Copyright (C) 1998-2000 Michel Aubry, Maintainer
|
||||
* Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer
|
||||
* Copyright (C) 1999-2000 CJ, cjtsai@ali.com.tw, Maintainer
|
||||
*
|
||||
* Copyright (C) 1998-2000 Andre Hedrick (andre@linux-ide.org)
|
||||
* May be copied or modified under the terms of the GNU General Public License
|
||||
* Copyright (C) 2002 Alan Cox <alan@redhat.com>
|
||||
* ALi (now ULi M5228) support by Clear Zhang <Clear.Zhang@ali.com.tw>
|
||||
*
|
||||
* (U)DMA capable version of ali 1533/1543(C), 1535(D)
|
||||
*
|
||||
**********************************************************************
|
||||
* 9/7/99 --Parts from the above author are included and need to be
|
||||
* converted into standard interface, once I finish the thought.
|
||||
*
|
||||
* Recent changes
|
||||
* Don't use LBA48 mode on ALi <= 0xC4
|
||||
* Don't poke 0x79 with a non ALi northbridge
|
||||
* Don't flip undefined bits on newer chipsets (fix Fujitsu laptop hang)
|
||||
* Allow UDMA6 on revisions > 0xC4
|
||||
*
|
||||
* Documentation
|
||||
* Chipset documentation available under NDA only
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#define DISPLAY_ALI_TIMINGS
|
||||
|
||||
/*
|
||||
* ALi devices are not plug in. Otherwise these static values would
|
||||
* need to go. They ought to go away anyway
|
||||
*/
|
||||
|
||||
static u8 m5229_revision;
|
||||
static u8 chip_is_1543c_e;
|
||||
static struct pci_dev *isa_dev;
|
||||
|
||||
#if defined(DISPLAY_ALI_TIMINGS) && defined(CONFIG_PROC_FS)
|
||||
#include <linux/stat.h>
|
||||
#include <linux/proc_fs.h>
|
||||
|
||||
static u8 ali_proc = 0;
|
||||
|
||||
static struct pci_dev *bmide_dev;
|
||||
|
||||
static char *fifo[4] = {
|
||||
"FIFO Off",
|
||||
"FIFO On ",
|
||||
"DMA mode",
|
||||
"PIO mode" };
|
||||
|
||||
static char *udmaT[8] = {
|
||||
"1.5T",
|
||||
" 2T",
|
||||
"2.5T",
|
||||
" 3T",
|
||||
"3.5T",
|
||||
" 4T",
|
||||
" 6T",
|
||||
" 8T"
|
||||
};
|
||||
|
||||
static char *channel_status[8] = {
|
||||
"OK ",
|
||||
"busy ",
|
||||
"DRQ ",
|
||||
"DRQ busy ",
|
||||
"error ",
|
||||
"error busy ",
|
||||
"error DRQ ",
|
||||
"error DRQ busy"
|
||||
};
|
||||
|
||||
/**
|
||||
* ali_get_info - generate proc file for ALi IDE
|
||||
* @buffer: buffer to fill
|
||||
* @addr: address of user start in buffer
|
||||
* @offset: offset into 'file'
|
||||
* @count: buffer count
|
||||
*
|
||||
* Walks the Ali devices and outputs summary data on the tuning and
|
||||
* anything else that will help with debugging
|
||||
*/
|
||||
|
||||
static int ali_get_info (char *buffer, char **addr, off_t offset, int count)
|
||||
{
|
||||
unsigned long bibma;
|
||||
u8 reg53h, reg5xh, reg5yh, reg5xh1, reg5yh1, c0, c1, rev, tmp;
|
||||
char *q, *p = buffer;
|
||||
|
||||
/* fetch rev. */
|
||||
pci_read_config_byte(bmide_dev, 0x08, &rev);
|
||||
if (rev >= 0xc1) /* M1543C or newer */
|
||||
udmaT[7] = " ???";
|
||||
else
|
||||
fifo[3] = " ??? ";
|
||||
|
||||
/* first fetch bibma: */
|
||||
|
||||
bibma = pci_resource_start(bmide_dev, 4);
|
||||
|
||||
/*
|
||||
* at that point bibma+0x2 et bibma+0xa are byte
|
||||
* registers to investigate:
|
||||
*/
|
||||
c0 = inb(bibma + 0x02);
|
||||
c1 = inb(bibma + 0x0a);
|
||||
|
||||
p += sprintf(p,
|
||||
"\n Ali M15x3 Chipset.\n");
|
||||
p += sprintf(p,
|
||||
" ------------------\n");
|
||||
pci_read_config_byte(bmide_dev, 0x78, ®53h);
|
||||
p += sprintf(p, "PCI Clock: %d.\n", reg53h);
|
||||
|
||||
pci_read_config_byte(bmide_dev, 0x53, ®53h);
|
||||
p += sprintf(p,
|
||||
"CD_ROM FIFO:%s, CD_ROM DMA:%s\n",
|
||||
(reg53h & 0x02) ? "Yes" : "No ",
|
||||
(reg53h & 0x01) ? "Yes" : "No " );
|
||||
pci_read_config_byte(bmide_dev, 0x74, ®53h);
|
||||
p += sprintf(p,
|
||||
"FIFO Status: contains %d Words, runs%s%s\n\n",
|
||||
(reg53h & 0x3f),
|
||||
(reg53h & 0x40) ? " OVERWR" : "",
|
||||
(reg53h & 0x80) ? " OVERRD." : "." );
|
||||
|
||||
p += sprintf(p,
|
||||
"-------------------primary channel"
|
||||
"-------------------secondary channel"
|
||||
"---------\n\n");
|
||||
|
||||
pci_read_config_byte(bmide_dev, 0x09, ®53h);
|
||||
p += sprintf(p,
|
||||
"channel status: %s"
|
||||
" %s\n",
|
||||
(reg53h & 0x20) ? "On " : "Off",
|
||||
(reg53h & 0x10) ? "On " : "Off" );
|
||||
|
||||
p += sprintf(p,
|
||||
"both channels togth: %s"
|
||||
" %s\n",
|
||||
(c0&0x80) ? "No " : "Yes",
|
||||
(c1&0x80) ? "No " : "Yes" );
|
||||
|
||||
pci_read_config_byte(bmide_dev, 0x76, ®53h);
|
||||
p += sprintf(p,
|
||||
"Channel state: %s %s\n",
|
||||
channel_status[reg53h & 0x07],
|
||||
channel_status[(reg53h & 0x70) >> 4] );
|
||||
|
||||
pci_read_config_byte(bmide_dev, 0x58, ®5xh);
|
||||
pci_read_config_byte(bmide_dev, 0x5c, ®5yh);
|
||||
p += sprintf(p,
|
||||
"Add. Setup Timing: %dT"
|
||||
" %dT\n",
|
||||
(reg5xh & 0x07) ? (reg5xh & 0x07) : 8,
|
||||
(reg5yh & 0x07) ? (reg5yh & 0x07) : 8 );
|
||||
|
||||
pci_read_config_byte(bmide_dev, 0x59, ®5xh);
|
||||
pci_read_config_byte(bmide_dev, 0x5d, ®5yh);
|
||||
p += sprintf(p,
|
||||
"Command Act. Count: %dT"
|
||||
" %dT\n"
|
||||
"Command Rec. Count: %dT"
|
||||
" %dT\n\n",
|
||||
(reg5xh & 0x70) ? ((reg5xh & 0x70) >> 4) : 8,
|
||||
(reg5yh & 0x70) ? ((reg5yh & 0x70) >> 4) : 8,
|
||||
(reg5xh & 0x0f) ? (reg5xh & 0x0f) : 16,
|
||||
(reg5yh & 0x0f) ? (reg5yh & 0x0f) : 16 );
|
||||
|
||||
p += sprintf(p,
|
||||
"----------------drive0-----------drive1"
|
||||
"------------drive0-----------drive1------\n\n");
|
||||
p += sprintf(p,
|
||||
"DMA enabled: %s %s"
|
||||
" %s %s\n",
|
||||
(c0&0x20) ? "Yes" : "No ",
|
||||
(c0&0x40) ? "Yes" : "No ",
|
||||
(c1&0x20) ? "Yes" : "No ",
|
||||
(c1&0x40) ? "Yes" : "No " );
|
||||
|
||||
pci_read_config_byte(bmide_dev, 0x54, ®5xh);
|
||||
pci_read_config_byte(bmide_dev, 0x55, ®5yh);
|
||||
q = "FIFO threshold: %2d Words %2d Words"
|
||||
" %2d Words %2d Words\n";
|
||||
if (rev < 0xc1) {
|
||||
if ((rev == 0x20) &&
|
||||
(pci_read_config_byte(bmide_dev, 0x4f, &tmp), (tmp &= 0x20))) {
|
||||
p += sprintf(p, q, 8, 8, 8, 8);
|
||||
} else {
|
||||
p += sprintf(p, q,
|
||||
(reg5xh & 0x03) + 12,
|
||||
((reg5xh & 0x30)>>4) + 12,
|
||||
(reg5yh & 0x03) + 12,
|
||||
((reg5yh & 0x30)>>4) + 12 );
|
||||
}
|
||||
} else {
|
||||
int t1 = (tmp = (reg5xh & 0x03)) ? (tmp << 3) : 4;
|
||||
int t2 = (tmp = ((reg5xh & 0x30)>>4)) ? (tmp << 3) : 4;
|
||||
int t3 = (tmp = (reg5yh & 0x03)) ? (tmp << 3) : 4;
|
||||
int t4 = (tmp = ((reg5yh & 0x30)>>4)) ? (tmp << 3) : 4;
|
||||
p += sprintf(p, q, t1, t2, t3, t4);
|
||||
}
|
||||
|
||||
#if 0
|
||||
p += sprintf(p,
|
||||
"FIFO threshold: %2d Words %2d Words"
|
||||
" %2d Words %2d Words\n",
|
||||
(reg5xh & 0x03) + 12,
|
||||
((reg5xh & 0x30)>>4) + 12,
|
||||
(reg5yh & 0x03) + 12,
|
||||
((reg5yh & 0x30)>>4) + 12 );
|
||||
#endif
|
||||
|
||||
p += sprintf(p,
|
||||
"FIFO mode: %s %s %s %s\n",
|
||||
fifo[((reg5xh & 0x0c) >> 2)],
|
||||
fifo[((reg5xh & 0xc0) >> 6)],
|
||||
fifo[((reg5yh & 0x0c) >> 2)],
|
||||
fifo[((reg5yh & 0xc0) >> 6)] );
|
||||
|
||||
pci_read_config_byte(bmide_dev, 0x5a, ®5xh);
|
||||
pci_read_config_byte(bmide_dev, 0x5b, ®5xh1);
|
||||
pci_read_config_byte(bmide_dev, 0x5e, ®5yh);
|
||||
pci_read_config_byte(bmide_dev, 0x5f, ®5yh1);
|
||||
|
||||
p += sprintf(p,/*
|
||||
"------------------drive0-----------drive1"
|
||||
"------------drive0-----------drive1------\n")*/
|
||||
"Dt RW act. Cnt %2dT %2dT"
|
||||
" %2dT %2dT\n"
|
||||
"Dt RW rec. Cnt %2dT %2dT"
|
||||
" %2dT %2dT\n\n",
|
||||
(reg5xh & 0x70) ? ((reg5xh & 0x70) >> 4) : 8,
|
||||
(reg5xh1 & 0x70) ? ((reg5xh1 & 0x70) >> 4) : 8,
|
||||
(reg5yh & 0x70) ? ((reg5yh & 0x70) >> 4) : 8,
|
||||
(reg5yh1 & 0x70) ? ((reg5yh1 & 0x70) >> 4) : 8,
|
||||
(reg5xh & 0x0f) ? (reg5xh & 0x0f) : 16,
|
||||
(reg5xh1 & 0x0f) ? (reg5xh1 & 0x0f) : 16,
|
||||
(reg5yh & 0x0f) ? (reg5yh & 0x0f) : 16,
|
||||
(reg5yh1 & 0x0f) ? (reg5yh1 & 0x0f) : 16 );
|
||||
|
||||
p += sprintf(p,
|
||||
"-----------------------------------UDMA Timings"
|
||||
"--------------------------------\n\n");
|
||||
|
||||
pci_read_config_byte(bmide_dev, 0x56, ®5xh);
|
||||
pci_read_config_byte(bmide_dev, 0x57, ®5yh);
|
||||
p += sprintf(p,
|
||||
"UDMA: %s %s"
|
||||
" %s %s\n"
|
||||
"UDMA timings: %s %s"
|
||||
" %s %s\n\n",
|
||||
(reg5xh & 0x08) ? "OK" : "No",
|
||||
(reg5xh & 0x80) ? "OK" : "No",
|
||||
(reg5yh & 0x08) ? "OK" : "No",
|
||||
(reg5yh & 0x80) ? "OK" : "No",
|
||||
udmaT[(reg5xh & 0x07)],
|
||||
udmaT[(reg5xh & 0x70) >> 4],
|
||||
udmaT[reg5yh & 0x07],
|
||||
udmaT[(reg5yh & 0x70) >> 4] );
|
||||
|
||||
return p-buffer; /* => must be less than 4k! */
|
||||
}
|
||||
#endif /* defined(DISPLAY_ALI_TIMINGS) && defined(CONFIG_PROC_FS) */
|
||||
|
||||
/**
|
||||
* ali15x3_tune_drive - set up a drive
|
||||
* @drive: drive to tune
|
||||
* @pio: unused
|
||||
*
|
||||
* Select the best PIO timing for the drive in question. Then
|
||||
* program the controller for this drive set up
|
||||
*/
|
||||
|
||||
static void ali15x3_tune_drive (ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
ide_pio_data_t d;
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
int s_time, a_time, c_time;
|
||||
u8 s_clc, a_clc, r_clc;
|
||||
unsigned long flags;
|
||||
int bus_speed = system_bus_clock();
|
||||
int port = hwif->channel ? 0x5c : 0x58;
|
||||
int portFIFO = hwif->channel ? 0x55 : 0x54;
|
||||
u8 cd_dma_fifo = 0;
|
||||
int unit = drive->select.b.unit & 1;
|
||||
|
||||
pio = ide_get_best_pio_mode(drive, pio, 5, &d);
|
||||
s_time = ide_pio_timings[pio].setup_time;
|
||||
a_time = ide_pio_timings[pio].active_time;
|
||||
if ((s_clc = (s_time * bus_speed + 999) / 1000) >= 8)
|
||||
s_clc = 0;
|
||||
if ((a_clc = (a_time * bus_speed + 999) / 1000) >= 8)
|
||||
a_clc = 0;
|
||||
c_time = ide_pio_timings[pio].cycle_time;
|
||||
|
||||
#if 0
|
||||
if ((r_clc = ((c_time - s_time - a_time) * bus_speed + 999) / 1000) >= 16)
|
||||
r_clc = 0;
|
||||
#endif
|
||||
|
||||
if (!(r_clc = (c_time * bus_speed + 999) / 1000 - a_clc - s_clc)) {
|
||||
r_clc = 1;
|
||||
} else {
|
||||
if (r_clc >= 16)
|
||||
r_clc = 0;
|
||||
}
|
||||
local_irq_save(flags);
|
||||
|
||||
/*
|
||||
* PIO mode => ATA FIFO on, ATAPI FIFO off
|
||||
*/
|
||||
pci_read_config_byte(dev, portFIFO, &cd_dma_fifo);
|
||||
if (drive->media==ide_disk) {
|
||||
if (unit) {
|
||||
pci_write_config_byte(dev, portFIFO, (cd_dma_fifo & 0x0F) | 0x50);
|
||||
} else {
|
||||
pci_write_config_byte(dev, portFIFO, (cd_dma_fifo & 0xF0) | 0x05);
|
||||
}
|
||||
} else {
|
||||
if (unit) {
|
||||
pci_write_config_byte(dev, portFIFO, cd_dma_fifo & 0x0F);
|
||||
} else {
|
||||
pci_write_config_byte(dev, portFIFO, cd_dma_fifo & 0xF0);
|
||||
}
|
||||
}
|
||||
|
||||
pci_write_config_byte(dev, port, s_clc);
|
||||
pci_write_config_byte(dev, port+drive->select.b.unit+2, (a_clc << 4) | r_clc);
|
||||
local_irq_restore(flags);
|
||||
|
||||
/*
|
||||
* setup active rec
|
||||
* { 70, 165, 365 }, PIO Mode 0
|
||||
* { 50, 125, 208 }, PIO Mode 1
|
||||
* { 30, 100, 110 }, PIO Mode 2
|
||||
* { 30, 80, 70 }, PIO Mode 3 with IORDY
|
||||
* { 25, 70, 25 }, PIO Mode 4 with IORDY ns
|
||||
* { 20, 50, 30 } PIO Mode 5 with IORDY (nonstandard)
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* ali15x3_can_ultra - check for ultra DMA support
|
||||
* @drive: drive to do the check
|
||||
*
|
||||
* Check the drive and controller revisions. Return 0 if UDMA is
|
||||
* not available, or 1 if UDMA can be used. The actual rules for
|
||||
* the ALi are
|
||||
* No UDMA on revisions <= 0x20
|
||||
* Disk only for revisions < 0xC2
|
||||
* Not WDC drives for revisions < 0xC2
|
||||
*
|
||||
* FIXME: WDC ifdef needs to die
|
||||
*/
|
||||
|
||||
static u8 ali15x3_can_ultra (ide_drive_t *drive)
|
||||
{
|
||||
#ifndef CONFIG_WDC_ALI15X3
|
||||
struct hd_driveid *id = drive->id;
|
||||
#endif /* CONFIG_WDC_ALI15X3 */
|
||||
|
||||
if (m5229_revision <= 0x20) {
|
||||
return 0;
|
||||
} else if ((m5229_revision < 0xC2) &&
|
||||
#ifndef CONFIG_WDC_ALI15X3
|
||||
((chip_is_1543c_e && strstr(id->model, "WDC ")) ||
|
||||
(drive->media!=ide_disk))) {
|
||||
#else /* CONFIG_WDC_ALI15X3 */
|
||||
(drive->media!=ide_disk)) {
|
||||
#endif /* CONFIG_WDC_ALI15X3 */
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ali15x3_ratemask - generate DMA mode list
|
||||
* @drive: drive to compute against
|
||||
*
|
||||
* Generate a list of the available DMA modes for the drive.
|
||||
* FIXME: this function contains lots of bogus masking we can dump
|
||||
*
|
||||
* Return the highest available mode (UDMA33, UDMA66, UDMA100,..)
|
||||
*/
|
||||
|
||||
static u8 ali15x3_ratemask (ide_drive_t *drive)
|
||||
{
|
||||
u8 mode = 0, can_ultra = ali15x3_can_ultra(drive);
|
||||
|
||||
if (m5229_revision > 0xC4 && can_ultra) {
|
||||
mode = 4;
|
||||
} else if (m5229_revision == 0xC4 && can_ultra) {
|
||||
mode = 3;
|
||||
} else if (m5229_revision >= 0xC2 && can_ultra) {
|
||||
mode = 2;
|
||||
} else if (can_ultra) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the drive sees no suitable cable then UDMA 33
|
||||
* is the highest permitted mode
|
||||
*/
|
||||
|
||||
if (!eighty_ninty_three(drive))
|
||||
mode = min(mode, (u8)1);
|
||||
return mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* ali15x3_tune_chipset - set up chiset for new speed
|
||||
* @drive: drive to configure for
|
||||
* @xferspeed: desired speed
|
||||
*
|
||||
* Configure the hardware for the desired IDE transfer mode.
|
||||
* We also do the needed drive configuration through helpers
|
||||
*/
|
||||
|
||||
static int ali15x3_tune_chipset (ide_drive_t *drive, u8 xferspeed)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
u8 speed = ide_rate_filter(ali15x3_ratemask(drive), xferspeed);
|
||||
u8 speed1 = speed;
|
||||
u8 unit = (drive->select.b.unit & 0x01);
|
||||
u8 tmpbyte = 0x00;
|
||||
int m5229_udma = (hwif->channel) ? 0x57 : 0x56;
|
||||
|
||||
if (speed == XFER_UDMA_6)
|
||||
speed1 = 0x47;
|
||||
|
||||
if (speed < XFER_UDMA_0) {
|
||||
u8 ultra_enable = (unit) ? 0x7f : 0xf7;
|
||||
/*
|
||||
* clear "ultra enable" bit
|
||||
*/
|
||||
pci_read_config_byte(dev, m5229_udma, &tmpbyte);
|
||||
tmpbyte &= ultra_enable;
|
||||
pci_write_config_byte(dev, m5229_udma, tmpbyte);
|
||||
|
||||
if (speed < XFER_SW_DMA_0)
|
||||
ali15x3_tune_drive(drive, speed);
|
||||
} else {
|
||||
pci_read_config_byte(dev, m5229_udma, &tmpbyte);
|
||||
tmpbyte &= (0x0f << ((1-unit) << 2));
|
||||
/*
|
||||
* enable ultra dma and set timing
|
||||
*/
|
||||
tmpbyte |= ((0x08 | ((4-speed1)&0x07)) << (unit << 2));
|
||||
pci_write_config_byte(dev, m5229_udma, tmpbyte);
|
||||
if (speed >= XFER_UDMA_3) {
|
||||
pci_read_config_byte(dev, 0x4b, &tmpbyte);
|
||||
tmpbyte |= 1;
|
||||
pci_write_config_byte(dev, 0x4b, tmpbyte);
|
||||
}
|
||||
}
|
||||
return (ide_config_drive_speed(drive, speed));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* config_chipset_for_dma - set up DMA mode
|
||||
* @drive: drive to configure for
|
||||
*
|
||||
* Place a drive into DMA mode and tune the chipset for
|
||||
* the selected speed.
|
||||
*
|
||||
* Returns true if DMA mode can be used
|
||||
*/
|
||||
|
||||
static int config_chipset_for_dma (ide_drive_t *drive)
|
||||
{
|
||||
u8 speed = ide_dma_speed(drive, ali15x3_ratemask(drive));
|
||||
|
||||
if (!(speed))
|
||||
return 0;
|
||||
|
||||
(void) ali15x3_tune_chipset(drive, speed);
|
||||
return ide_dma_enable(drive);
|
||||
}
|
||||
|
||||
/**
|
||||
* ali15x3_config_drive_for_dma - configure for DMA
|
||||
* @drive: drive to configure
|
||||
*
|
||||
* Configure a drive for DMA operation. If DMA is not possible we
|
||||
* drop the drive into PIO mode instead.
|
||||
*
|
||||
* FIXME: exactly what are we trying to return here
|
||||
*/
|
||||
|
||||
static int ali15x3_config_drive_for_dma(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct hd_driveid *id = drive->id;
|
||||
|
||||
if ((m5229_revision<=0x20) && (drive->media!=ide_disk))
|
||||
return hwif->ide_dma_off_quietly(drive);
|
||||
|
||||
drive->init_speed = 0;
|
||||
|
||||
if ((id != NULL) && ((id->capability & 1) != 0) && drive->autodma) {
|
||||
/* Consult the list of known "bad" drives */
|
||||
if (__ide_dma_bad_drive(drive))
|
||||
goto ata_pio;
|
||||
if ((id->field_valid & 4) && (m5229_revision >= 0xC2)) {
|
||||
if (id->dma_ultra & hwif->ultra_mask) {
|
||||
/* Force if Capable UltraDMA */
|
||||
int dma = config_chipset_for_dma(drive);
|
||||
if ((id->field_valid & 2) && !dma)
|
||||
goto try_dma_modes;
|
||||
}
|
||||
} else if (id->field_valid & 2) {
|
||||
try_dma_modes:
|
||||
if ((id->dma_mword & hwif->mwdma_mask) ||
|
||||
(id->dma_1word & hwif->swdma_mask)) {
|
||||
/* Force if Capable regular DMA modes */
|
||||
if (!config_chipset_for_dma(drive))
|
||||
goto no_dma_set;
|
||||
}
|
||||
} else if (__ide_dma_good_drive(drive) &&
|
||||
(id->eide_dma_time < 150)) {
|
||||
/* Consult the list of known "good" drives */
|
||||
if (!config_chipset_for_dma(drive))
|
||||
goto no_dma_set;
|
||||
} else {
|
||||
goto ata_pio;
|
||||
}
|
||||
} else {
|
||||
ata_pio:
|
||||
hwif->tuneproc(drive, 255);
|
||||
no_dma_set:
|
||||
return hwif->ide_dma_off_quietly(drive);
|
||||
}
|
||||
return hwif->ide_dma_on(drive);
|
||||
}
|
||||
|
||||
/**
|
||||
* ali15x3_dma_setup - begin a DMA phase
|
||||
* @drive: target device
|
||||
*
|
||||
* Returns 1 if the DMA cannot be performed, zero on success.
|
||||
*/
|
||||
|
||||
static int ali15x3_dma_setup(ide_drive_t *drive)
|
||||
{
|
||||
if (m5229_revision < 0xC2 && drive->media != ide_disk) {
|
||||
if (rq_data_dir(drive->hwif->hwgroup->rq))
|
||||
return 1; /* try PIO instead of DMA */
|
||||
}
|
||||
return ide_dma_setup(drive);
|
||||
}
|
||||
|
||||
/**
|
||||
* init_chipset_ali15x3 - Initialise an ALi IDE controller
|
||||
* @dev: PCI device
|
||||
* @name: Name of the controller
|
||||
*
|
||||
* This function initializes the ALI IDE controller and where
|
||||
* appropriate also sets up the 1533 southbridge.
|
||||
*/
|
||||
|
||||
static unsigned int __init init_chipset_ali15x3 (struct pci_dev *dev, const char *name)
|
||||
{
|
||||
unsigned long flags;
|
||||
u8 tmpbyte;
|
||||
struct pci_dev *north = pci_find_slot(0, PCI_DEVFN(0,0));
|
||||
|
||||
pci_read_config_byte(dev, PCI_REVISION_ID, &m5229_revision);
|
||||
|
||||
isa_dev = pci_find_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL);
|
||||
|
||||
#if defined(DISPLAY_ALI_TIMINGS) && defined(CONFIG_PROC_FS)
|
||||
if (!ali_proc) {
|
||||
ali_proc = 1;
|
||||
bmide_dev = dev;
|
||||
ide_pci_create_host_proc("ali", ali_get_info);
|
||||
}
|
||||
#endif /* defined(DISPLAY_ALI_TIMINGS) && defined(CONFIG_PROC_FS) */
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
if (m5229_revision < 0xC2) {
|
||||
/*
|
||||
* revision 0x20 (1543-E, 1543-F)
|
||||
* revision 0xC0, 0xC1 (1543C-C, 1543C-D, 1543C-E)
|
||||
* clear CD-ROM DMA write bit, m5229, 0x4b, bit 7
|
||||
*/
|
||||
pci_read_config_byte(dev, 0x4b, &tmpbyte);
|
||||
/*
|
||||
* clear bit 7
|
||||
*/
|
||||
pci_write_config_byte(dev, 0x4b, tmpbyte & 0x7F);
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 1543C-B?, 1535, 1535D, 1553
|
||||
* Note 1: not all "motherboard" support this detection
|
||||
* Note 2: if no udma 66 device, the detection may "error".
|
||||
* but in this case, we will not set the device to
|
||||
* ultra 66, the detection result is not important
|
||||
*/
|
||||
|
||||
/*
|
||||
* enable "Cable Detection", m5229, 0x4b, bit3
|
||||
*/
|
||||
pci_read_config_byte(dev, 0x4b, &tmpbyte);
|
||||
pci_write_config_byte(dev, 0x4b, tmpbyte | 0x08);
|
||||
|
||||
/*
|
||||
* We should only tune the 1533 enable if we are using an ALi
|
||||
* North bridge. We might have no north found on some zany
|
||||
* box without a device at 0:0.0. The ALi bridge will be at
|
||||
* 0:0.0 so if we didn't find one we know what is cooking.
|
||||
*/
|
||||
if (north && north->vendor != PCI_VENDOR_ID_AL) {
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (m5229_revision < 0xC5 && isa_dev)
|
||||
{
|
||||
/*
|
||||
* set south-bridge's enable bit, m1533, 0x79
|
||||
*/
|
||||
|
||||
pci_read_config_byte(isa_dev, 0x79, &tmpbyte);
|
||||
if (m5229_revision == 0xC2) {
|
||||
/*
|
||||
* 1543C-B0 (m1533, 0x79, bit 2)
|
||||
*/
|
||||
pci_write_config_byte(isa_dev, 0x79, tmpbyte | 0x04);
|
||||
} else if (m5229_revision >= 0xC3) {
|
||||
/*
|
||||
* 1553/1535 (m1533, 0x79, bit 1)
|
||||
*/
|
||||
pci_write_config_byte(isa_dev, 0x79, tmpbyte | 0x02);
|
||||
}
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ata66_ali15x3 - check for UDMA 66 support
|
||||
* @hwif: IDE interface
|
||||
*
|
||||
* This checks if the controller and the cable are capable
|
||||
* of UDMA66 transfers. It doesn't check the drives.
|
||||
* But see note 2 below!
|
||||
*
|
||||
* FIXME: frobs bits that are not defined on newer ALi devicea
|
||||
*/
|
||||
|
||||
static unsigned int __init ata66_ali15x3 (ide_hwif_t *hwif)
|
||||
{
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
unsigned int ata66 = 0;
|
||||
u8 cable_80_pin[2] = { 0, 0 };
|
||||
|
||||
unsigned long flags;
|
||||
u8 tmpbyte;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
if (m5229_revision >= 0xC2) {
|
||||
/*
|
||||
* Ultra66 cable detection (from Host View)
|
||||
* m5229, 0x4a, bit0: primary, bit1: secondary 80 pin
|
||||
*/
|
||||
pci_read_config_byte(dev, 0x4a, &tmpbyte);
|
||||
/*
|
||||
* 0x4a, bit0 is 0 => primary channel
|
||||
* has 80-pin (from host view)
|
||||
*/
|
||||
if (!(tmpbyte & 0x01)) cable_80_pin[0] = 1;
|
||||
/*
|
||||
* 0x4a, bit1 is 0 => secondary channel
|
||||
* has 80-pin (from host view)
|
||||
*/
|
||||
if (!(tmpbyte & 0x02)) cable_80_pin[1] = 1;
|
||||
/*
|
||||
* Allow ata66 if cable of current channel has 80 pins
|
||||
*/
|
||||
ata66 = (hwif->channel)?cable_80_pin[1]:cable_80_pin[0];
|
||||
} else {
|
||||
/*
|
||||
* check m1533, 0x5e, bit 1~4 == 1001 => & 00011110 = 00010010
|
||||
*/
|
||||
pci_read_config_byte(isa_dev, 0x5e, &tmpbyte);
|
||||
chip_is_1543c_e = ((tmpbyte & 0x1e) == 0x12) ? 1: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* CD_ROM DMA on (m5229, 0x53, bit0)
|
||||
* Enable this bit even if we want to use PIO
|
||||
* PIO FIFO off (m5229, 0x53, bit1)
|
||||
* The hardware will use 0x54h and 0x55h to control PIO FIFO
|
||||
* (Not on later devices it seems)
|
||||
*
|
||||
* 0x53 changes meaning on later revs - we must no touch
|
||||
* bit 1 on them. Need to check if 0x20 is the right break
|
||||
*/
|
||||
|
||||
pci_read_config_byte(dev, 0x53, &tmpbyte);
|
||||
|
||||
if(m5229_revision <= 0x20)
|
||||
tmpbyte = (tmpbyte & (~0x02)) | 0x01;
|
||||
else
|
||||
tmpbyte |= 0x01;
|
||||
|
||||
pci_write_config_byte(dev, 0x53, tmpbyte);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
return(ata66);
|
||||
}
|
||||
|
||||
/**
|
||||
* init_hwif_common_ali15x3 - Set up ALI IDE hardware
|
||||
* @hwif: IDE interface
|
||||
*
|
||||
* Initialize the IDE structure side of the ALi 15x3 driver.
|
||||
*/
|
||||
|
||||
static void __init init_hwif_common_ali15x3 (ide_hwif_t *hwif)
|
||||
{
|
||||
hwif->autodma = 0;
|
||||
hwif->tuneproc = &ali15x3_tune_drive;
|
||||
hwif->speedproc = &ali15x3_tune_chipset;
|
||||
|
||||
/* don't use LBA48 DMA on ALi devices before rev 0xC5 */
|
||||
hwif->no_lba48_dma = (m5229_revision <= 0xC4) ? 1 : 0;
|
||||
|
||||
if (!hwif->dma_base) {
|
||||
hwif->drives[0].autotune = 1;
|
||||
hwif->drives[1].autotune = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
hwif->atapi_dma = 1;
|
||||
|
||||
if (m5229_revision > 0x20)
|
||||
hwif->ultra_mask = 0x7f;
|
||||
hwif->mwdma_mask = 0x07;
|
||||
hwif->swdma_mask = 0x07;
|
||||
|
||||
if (m5229_revision >= 0x20) {
|
||||
/*
|
||||
* M1543C or newer for DMAing
|
||||
*/
|
||||
hwif->ide_dma_check = &ali15x3_config_drive_for_dma;
|
||||
hwif->dma_setup = &ali15x3_dma_setup;
|
||||
if (!noautodma)
|
||||
hwif->autodma = 1;
|
||||
if (!(hwif->udma_four))
|
||||
hwif->udma_four = ata66_ali15x3(hwif);
|
||||
}
|
||||
hwif->drives[0].autodma = hwif->autodma;
|
||||
hwif->drives[1].autodma = hwif->autodma;
|
||||
}
|
||||
|
||||
/**
|
||||
* init_hwif_ali15x3 - Initialize the ALI IDE x86 stuff
|
||||
* @hwif: interface to configure
|
||||
*
|
||||
* Obtain the IRQ tables for an ALi based IDE solution on the PC
|
||||
* class platforms. This part of the code isn't applicable to the
|
||||
* Sparc systems
|
||||
*/
|
||||
|
||||
static void __init init_hwif_ali15x3 (ide_hwif_t *hwif)
|
||||
{
|
||||
u8 ideic, inmir;
|
||||
s8 irq_routing_table[] = { -1, 9, 3, 10, 4, 5, 7, 6,
|
||||
1, 11, 0, 12, 0, 14, 0, 15 };
|
||||
int irq = -1;
|
||||
|
||||
if (hwif->pci_dev->device == PCI_DEVICE_ID_AL_M5229)
|
||||
hwif->irq = hwif->channel ? 15 : 14;
|
||||
|
||||
if (isa_dev) {
|
||||
/*
|
||||
* read IDE interface control
|
||||
*/
|
||||
pci_read_config_byte(isa_dev, 0x58, &ideic);
|
||||
|
||||
/* bit0, bit1 */
|
||||
ideic = ideic & 0x03;
|
||||
|
||||
/* get IRQ for IDE Controller */
|
||||
if ((hwif->channel && ideic == 0x03) ||
|
||||
(!hwif->channel && !ideic)) {
|
||||
/*
|
||||
* get SIRQ1 routing table
|
||||
*/
|
||||
pci_read_config_byte(isa_dev, 0x44, &inmir);
|
||||
inmir = inmir & 0x0f;
|
||||
irq = irq_routing_table[inmir];
|
||||
} else if (hwif->channel && !(ideic & 0x01)) {
|
||||
/*
|
||||
* get SIRQ2 routing table
|
||||
*/
|
||||
pci_read_config_byte(isa_dev, 0x75, &inmir);
|
||||
inmir = inmir & 0x0f;
|
||||
irq = irq_routing_table[inmir];
|
||||
}
|
||||
if(irq >= 0)
|
||||
hwif->irq = irq;
|
||||
}
|
||||
|
||||
init_hwif_common_ali15x3(hwif);
|
||||
}
|
||||
|
||||
/**
|
||||
* init_dma_ali15x3 - set up DMA on ALi15x3
|
||||
* @hwif: IDE interface
|
||||
* @dmabase: DMA interface base PCI address
|
||||
*
|
||||
* Set up the DMA functionality on the ALi 15x3. For the ALi
|
||||
* controllers this is generic so we can let the generic code do
|
||||
* the actual work.
|
||||
*/
|
||||
|
||||
static void __init init_dma_ali15x3 (ide_hwif_t *hwif, unsigned long dmabase)
|
||||
{
|
||||
if (m5229_revision < 0x20)
|
||||
return;
|
||||
if (!(hwif->channel))
|
||||
hwif->OUTB(hwif->INB(dmabase+2) & 0x60, dmabase+2);
|
||||
ide_setup_dma(hwif, dmabase, 8);
|
||||
}
|
||||
|
||||
static ide_pci_device_t ali15x3_chipset __devinitdata = {
|
||||
.name = "ALI15X3",
|
||||
.init_chipset = init_chipset_ali15x3,
|
||||
.init_hwif = init_hwif_ali15x3,
|
||||
.init_dma = init_dma_ali15x3,
|
||||
.channels = 2,
|
||||
.autodma = AUTODMA,
|
||||
.bootable = ON_BOARD,
|
||||
};
|
||||
|
||||
/**
|
||||
* alim15x3_init_one - set up an ALi15x3 IDE controller
|
||||
* @dev: PCI device to set up
|
||||
*
|
||||
* Perform the actual set up for an ALi15x3 that has been found by the
|
||||
* hot plug layer.
|
||||
*/
|
||||
|
||||
static int __devinit alim15x3_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
{
|
||||
ide_pci_device_t *d = &ali15x3_chipset;
|
||||
|
||||
if(pci_find_device(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100, NULL))
|
||||
printk(KERN_ERR "Warning: ATI Radeon IGP Northbridge is not yet fully tested.\n");
|
||||
|
||||
#if defined(CONFIG_SPARC64)
|
||||
d->init_hwif = init_hwif_common_ali15x3;
|
||||
#endif /* CONFIG_SPARC64 */
|
||||
ide_setup_pci_device(dev, d);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static struct pci_device_id alim15x3_pci_tbl[] = {
|
||||
{ PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5229, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
||||
{ PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5228, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
||||
{ 0, },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, alim15x3_pci_tbl);
|
||||
|
||||
static struct pci_driver driver = {
|
||||
.name = "ALI15x3_IDE",
|
||||
.id_table = alim15x3_pci_tbl,
|
||||
.probe = alim15x3_init_one,
|
||||
};
|
||||
|
||||
static int ali15x3_ide_init(void)
|
||||
{
|
||||
return ide_pci_register_driver(&driver);
|
||||
}
|
||||
|
||||
module_init(ali15x3_ide_init);
|
||||
|
||||
MODULE_AUTHOR("Michael Aubry, Andrzej Krzysztofowicz, CJ, Andre Hedrick, Alan Cox");
|
||||
MODULE_DESCRIPTION("PCI driver module for ALi 15x3 IDE");
|
||||
MODULE_LICENSE("GPL");
|
||||
BIN
extra/linux-2.6.10/drivers/ide/pci/alim15x3.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/pci/alim15x3.o
Normal file
Binary file not shown.
540
extra/linux-2.6.10/drivers/ide/pci/amd74xx.c
Normal file
540
extra/linux-2.6.10/drivers/ide/pci/amd74xx.c
Normal file
@@ -0,0 +1,540 @@
|
||||
/*
|
||||
* Version 2.13
|
||||
*
|
||||
* AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04
|
||||
* IDE driver for Linux.
|
||||
*
|
||||
* Copyright (c) 2000-2002 Vojtech Pavlik
|
||||
*
|
||||
* Based on the work of:
|
||||
* Andre Hedrick
|
||||
*/
|
||||
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ide.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#include "ide-timing.h"
|
||||
|
||||
#define DISPLAY_AMD_TIMINGS
|
||||
|
||||
#define AMD_IDE_ENABLE (0x00 + amd_config->base)
|
||||
#define AMD_IDE_CONFIG (0x01 + amd_config->base)
|
||||
#define AMD_CABLE_DETECT (0x02 + amd_config->base)
|
||||
#define AMD_DRIVE_TIMING (0x08 + amd_config->base)
|
||||
#define AMD_8BIT_TIMING (0x0e + amd_config->base)
|
||||
#define AMD_ADDRESS_SETUP (0x0c + amd_config->base)
|
||||
#define AMD_UDMA_TIMING (0x10 + amd_config->base)
|
||||
|
||||
#define AMD_UDMA 0x07
|
||||
#define AMD_UDMA_33 0x01
|
||||
#define AMD_UDMA_66 0x02
|
||||
#define AMD_UDMA_100 0x03
|
||||
#define AMD_UDMA_133 0x04
|
||||
#define AMD_CHECK_SWDMA 0x08
|
||||
#define AMD_BAD_SWDMA 0x10
|
||||
#define AMD_BAD_FIFO 0x20
|
||||
#define AMD_CHECK_SERENADE 0x40
|
||||
|
||||
/*
|
||||
* AMD SouthBridge chips.
|
||||
*/
|
||||
|
||||
static struct amd_ide_chip {
|
||||
unsigned short id;
|
||||
unsigned long base;
|
||||
unsigned char flags;
|
||||
} amd_ide_chips[] = {
|
||||
{ PCI_DEVICE_ID_AMD_COBRA_7401, 0x40, AMD_UDMA_33 | AMD_BAD_SWDMA },
|
||||
{ PCI_DEVICE_ID_AMD_VIPER_7409, 0x40, AMD_UDMA_66 | AMD_CHECK_SWDMA },
|
||||
{ PCI_DEVICE_ID_AMD_VIPER_7411, 0x40, AMD_UDMA_100 | AMD_BAD_FIFO },
|
||||
{ PCI_DEVICE_ID_AMD_OPUS_7441, 0x40, AMD_UDMA_100 },
|
||||
{ PCI_DEVICE_ID_AMD_8111_IDE, 0x40, AMD_UDMA_133 | AMD_CHECK_SERENADE },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE_IDE, 0x50, AMD_UDMA_100 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE, 0x50, AMD_UDMA_133 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE, 0x50, AMD_UDMA_133 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA, 0x50, AMD_UDMA_133 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, 0x50, AMD_UDMA_133 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, 0x50, AMD_UDMA_133 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, 0x50, AMD_UDMA_133 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, 0x50, AMD_UDMA_133 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, 0x50, AMD_UDMA_133 },
|
||||
{ PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, 0x50, AMD_UDMA_133 },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static struct amd_ide_chip *amd_config;
|
||||
static ide_pci_device_t *amd_chipset;
|
||||
static unsigned int amd_80w;
|
||||
static unsigned int amd_clock;
|
||||
|
||||
static char *amd_dma[] = { "MWDMA16", "UDMA33", "UDMA66", "UDMA100", "UDMA133" };
|
||||
static unsigned char amd_cyc2udma[] = { 6, 6, 5, 4, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 7 };
|
||||
|
||||
/*
|
||||
* AMD /proc entry.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
|
||||
#include <linux/stat.h>
|
||||
#include <linux/proc_fs.h>
|
||||
|
||||
static u8 amd74xx_proc;
|
||||
|
||||
static unsigned char amd_udma2cyc[] = { 4, 6, 8, 10, 3, 2, 1, 15 };
|
||||
static unsigned long amd_base;
|
||||
static struct pci_dev *bmide_dev;
|
||||
extern int (*amd74xx_display_info)(char *, char **, off_t, int); /* ide-proc.c */
|
||||
|
||||
#define amd_print(format, arg...) p += sprintf(p, format "\n" , ## arg)
|
||||
#define amd_print_drive(name, format, arg...)\
|
||||
p += sprintf(p, name); for (i = 0; i < 4; i++) p += sprintf(p, format, ## arg); p += sprintf(p, "\n");
|
||||
|
||||
static int amd74xx_get_info(char *buffer, char **addr, off_t offset, int count)
|
||||
{
|
||||
int speed[4], cycle[4], setup[4], active[4], recover[4], den[4],
|
||||
uen[4], udma[4], active8b[4], recover8b[4];
|
||||
struct pci_dev *dev = bmide_dev;
|
||||
unsigned int v, u, i;
|
||||
unsigned short c, w;
|
||||
unsigned char t;
|
||||
int len;
|
||||
char *p = buffer;
|
||||
|
||||
amd_print("----------AMD BusMastering IDE Configuration----------------");
|
||||
|
||||
amd_print("Driver Version: 2.13");
|
||||
amd_print("South Bridge: %s", pci_name(bmide_dev));
|
||||
|
||||
pci_read_config_byte(dev, PCI_REVISION_ID, &t);
|
||||
amd_print("Revision: IDE %#x", t);
|
||||
amd_print("Highest DMA rate: %s", amd_dma[amd_config->flags & AMD_UDMA]);
|
||||
|
||||
amd_print("BM-DMA base: %#lx", amd_base);
|
||||
amd_print("PCI clock: %d.%dMHz", amd_clock / 1000, amd_clock / 100 % 10);
|
||||
|
||||
amd_print("-----------------------Primary IDE-------Secondary IDE------");
|
||||
|
||||
pci_read_config_byte(dev, AMD_IDE_CONFIG, &t);
|
||||
amd_print("Prefetch Buffer: %10s%20s", (t & 0x80) ? "yes" : "no", (t & 0x20) ? "yes" : "no");
|
||||
amd_print("Post Write Buffer: %10s%20s", (t & 0x40) ? "yes" : "no", (t & 0x10) ? "yes" : "no");
|
||||
|
||||
pci_read_config_byte(dev, AMD_IDE_ENABLE, &t);
|
||||
amd_print("Enabled: %10s%20s", (t & 0x02) ? "yes" : "no", (t & 0x01) ? "yes" : "no");
|
||||
|
||||
c = inb(amd_base + 0x02) | (inb(amd_base + 0x0a) << 8);
|
||||
amd_print("Simplex only: %10s%20s", (c & 0x80) ? "yes" : "no", (c & 0x8000) ? "yes" : "no");
|
||||
|
||||
amd_print("Cable Type: %10s%20s", (amd_80w & 1) ? "80w" : "40w", (amd_80w & 2) ? "80w" : "40w");
|
||||
|
||||
if (!amd_clock)
|
||||
return p - buffer;
|
||||
|
||||
amd_print("-------------------drive0----drive1----drive2----drive3-----");
|
||||
|
||||
pci_read_config_byte(dev, AMD_ADDRESS_SETUP, &t);
|
||||
pci_read_config_dword(dev, AMD_DRIVE_TIMING, &v);
|
||||
pci_read_config_word(dev, AMD_8BIT_TIMING, &w);
|
||||
pci_read_config_dword(dev, AMD_UDMA_TIMING, &u);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
setup[i] = ((t >> ((3 - i) << 1)) & 0x3) + 1;
|
||||
recover8b[i] = ((w >> ((1 - (i >> 1)) << 3)) & 0xf) + 1;
|
||||
active8b[i] = ((w >> (((1 - (i >> 1)) << 3) + 4)) & 0xf) + 1;
|
||||
active[i] = ((v >> (((3 - i) << 3) + 4)) & 0xf) + 1;
|
||||
recover[i] = ((v >> ((3 - i) << 3)) & 0xf) + 1;
|
||||
|
||||
udma[i] = amd_udma2cyc[((u >> ((3 - i) << 3)) & 0x7)];
|
||||
uen[i] = ((u >> ((3 - i) << 3)) & 0x40) ? 1 : 0;
|
||||
den[i] = (c & ((i & 1) ? 0x40 : 0x20) << ((i & 2) << 2));
|
||||
|
||||
if (den[i] && uen[i] && udma[i] == 1) {
|
||||
speed[i] = amd_clock * 3;
|
||||
cycle[i] = 666666 / amd_clock;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (den[i] && uen[i] && udma[i] == 15) {
|
||||
speed[i] = amd_clock * 4;
|
||||
cycle[i] = 500000 / amd_clock;
|
||||
continue;
|
||||
}
|
||||
|
||||
speed[i] = 4 * amd_clock / ((den[i] && uen[i]) ? udma[i] : (active[i] + recover[i]) * 2);
|
||||
cycle[i] = 1000000 * ((den[i] && uen[i]) ? udma[i] : (active[i] + recover[i]) * 2) / amd_clock / 2;
|
||||
}
|
||||
|
||||
amd_print_drive("Transfer Mode: ", "%10s", den[i] ? (uen[i] ? "UDMA" : "DMA") : "PIO");
|
||||
|
||||
amd_print_drive("Address Setup: ", "%8dns", 1000000 * setup[i] / amd_clock);
|
||||
amd_print_drive("Cmd Active: ", "%8dns", 1000000 * active8b[i] / amd_clock);
|
||||
amd_print_drive("Cmd Recovery: ", "%8dns", 1000000 * recover8b[i] / amd_clock);
|
||||
amd_print_drive("Data Active: ", "%8dns", 1000000 * active[i] / amd_clock);
|
||||
amd_print_drive("Data Recovery: ", "%8dns", 1000000 * recover[i] / amd_clock);
|
||||
amd_print_drive("Cycle Time: ", "%8dns", cycle[i]);
|
||||
amd_print_drive("Transfer Rate: ", "%4d.%dMB/s", speed[i] / 1000, speed[i] / 100 % 10);
|
||||
|
||||
/* hoping p - buffer is less than 4K... */
|
||||
len = (p - buffer) - offset;
|
||||
*addr = buffer + offset;
|
||||
|
||||
return len > count ? count : len;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* amd_set_speed() writes timing values to the chipset registers
|
||||
*/
|
||||
|
||||
static void amd_set_speed(struct pci_dev *dev, unsigned char dn, struct ide_timing *timing)
|
||||
{
|
||||
unsigned char t;
|
||||
|
||||
pci_read_config_byte(dev, AMD_ADDRESS_SETUP, &t);
|
||||
t = (t & ~(3 << ((3 - dn) << 1))) | ((FIT(timing->setup, 1, 4) - 1) << ((3 - dn) << 1));
|
||||
pci_write_config_byte(dev, AMD_ADDRESS_SETUP, t);
|
||||
|
||||
pci_write_config_byte(dev, AMD_8BIT_TIMING + (1 - (dn >> 1)),
|
||||
((FIT(timing->act8b, 1, 16) - 1) << 4) | (FIT(timing->rec8b, 1, 16) - 1));
|
||||
|
||||
pci_write_config_byte(dev, AMD_DRIVE_TIMING + (3 - dn),
|
||||
((FIT(timing->active, 1, 16) - 1) << 4) | (FIT(timing->recover, 1, 16) - 1));
|
||||
|
||||
switch (amd_config->flags & AMD_UDMA) {
|
||||
case AMD_UDMA_33: t = timing->udma ? (0xc0 | (FIT(timing->udma, 2, 5) - 2)) : 0x03; break;
|
||||
case AMD_UDMA_66: t = timing->udma ? (0xc0 | amd_cyc2udma[FIT(timing->udma, 2, 10)]) : 0x03; break;
|
||||
case AMD_UDMA_100: t = timing->udma ? (0xc0 | amd_cyc2udma[FIT(timing->udma, 1, 10)]) : 0x03; break;
|
||||
case AMD_UDMA_133: t = timing->udma ? (0xc0 | amd_cyc2udma[FIT(timing->udma, 1, 15)]) : 0x03; break;
|
||||
default: return;
|
||||
}
|
||||
|
||||
pci_write_config_byte(dev, AMD_UDMA_TIMING + (3 - dn), t);
|
||||
}
|
||||
|
||||
/*
|
||||
* amd_set_drive() computes timing values configures the drive and
|
||||
* the chipset to a desired transfer mode. It also can be called
|
||||
* by upper layers.
|
||||
*/
|
||||
|
||||
static int amd_set_drive(ide_drive_t *drive, u8 speed)
|
||||
{
|
||||
ide_drive_t *peer = HWIF(drive)->drives + (~drive->dn & 1);
|
||||
struct ide_timing t, p;
|
||||
int T, UT;
|
||||
|
||||
if (speed != XFER_PIO_SLOW && speed != drive->current_speed)
|
||||
if (ide_config_drive_speed(drive, speed))
|
||||
printk(KERN_WARNING "ide%d: Drive %d didn't accept speed setting. Oh, well.\n",
|
||||
drive->dn >> 1, drive->dn & 1);
|
||||
|
||||
T = 1000000000 / amd_clock;
|
||||
UT = T / min_t(int, max_t(int, amd_config->flags & AMD_UDMA, 1), 2);
|
||||
|
||||
ide_timing_compute(drive, speed, &t, T, UT);
|
||||
|
||||
if (peer->present) {
|
||||
ide_timing_compute(peer, peer->current_speed, &p, T, UT);
|
||||
ide_timing_merge(&p, &t, &t, IDE_TIMING_8BIT);
|
||||
}
|
||||
|
||||
if (speed == XFER_UDMA_5 && amd_clock <= 33333) t.udma = 1;
|
||||
if (speed == XFER_UDMA_6 && amd_clock <= 33333) t.udma = 15;
|
||||
|
||||
amd_set_speed(HWIF(drive)->pci_dev, drive->dn, &t);
|
||||
|
||||
if (!drive->init_speed)
|
||||
drive->init_speed = speed;
|
||||
drive->current_speed = speed;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* amd74xx_tune_drive() is a callback from upper layers for
|
||||
* PIO-only tuning.
|
||||
*/
|
||||
|
||||
static void amd74xx_tune_drive(ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
if (pio == 255) {
|
||||
amd_set_drive(drive, ide_find_best_mode(drive, XFER_PIO | XFER_EPIO));
|
||||
return;
|
||||
}
|
||||
|
||||
amd_set_drive(drive, XFER_PIO_0 + min_t(byte, pio, 5));
|
||||
}
|
||||
|
||||
/*
|
||||
* amd74xx_dmaproc() is a callback from upper layers that can do
|
||||
* a lot, but we use it for DMA/PIO tuning only, delegating everything
|
||||
* else to the default ide_dmaproc().
|
||||
*/
|
||||
|
||||
static int amd74xx_ide_dma_check(ide_drive_t *drive)
|
||||
{
|
||||
int w80 = HWIF(drive)->udma_four;
|
||||
|
||||
u8 speed = ide_find_best_mode(drive,
|
||||
XFER_PIO | XFER_EPIO | XFER_MWDMA | XFER_UDMA |
|
||||
((amd_config->flags & AMD_BAD_SWDMA) ? 0 : XFER_SWDMA) |
|
||||
(w80 && (amd_config->flags & AMD_UDMA) >= AMD_UDMA_66 ? XFER_UDMA_66 : 0) |
|
||||
(w80 && (amd_config->flags & AMD_UDMA) >= AMD_UDMA_100 ? XFER_UDMA_100 : 0) |
|
||||
(w80 && (amd_config->flags & AMD_UDMA) >= AMD_UDMA_133 ? XFER_UDMA_133 : 0));
|
||||
|
||||
amd_set_drive(drive, speed);
|
||||
|
||||
if (drive->autodma && (speed & XFER_MODE) != XFER_PIO)
|
||||
return HWIF(drive)->ide_dma_on(drive);
|
||||
return HWIF(drive)->ide_dma_off_quietly(drive);
|
||||
}
|
||||
|
||||
/*
|
||||
* The initialization callback. Here we determine the IDE chip type
|
||||
* and initialize its drive independent registers.
|
||||
*/
|
||||
|
||||
static unsigned int __init init_chipset_amd74xx(struct pci_dev *dev, const char *name)
|
||||
{
|
||||
unsigned char t;
|
||||
unsigned int u;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Check for bad SWDMA.
|
||||
*/
|
||||
|
||||
if (amd_config->flags & AMD_CHECK_SWDMA) {
|
||||
pci_read_config_byte(dev, PCI_REVISION_ID, &t);
|
||||
if (t <= 7)
|
||||
amd_config->flags |= AMD_BAD_SWDMA;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check 80-wire cable presence.
|
||||
*/
|
||||
|
||||
switch (amd_config->flags & AMD_UDMA) {
|
||||
|
||||
case AMD_UDMA_133:
|
||||
case AMD_UDMA_100:
|
||||
pci_read_config_byte(dev, AMD_CABLE_DETECT, &t);
|
||||
pci_read_config_dword(dev, AMD_UDMA_TIMING, &u);
|
||||
amd_80w = ((t & 0x3) ? 1 : 0) | ((t & 0xc) ? 2 : 0);
|
||||
for (i = 24; i >= 0; i -= 8)
|
||||
if (((u >> i) & 4) && !(amd_80w & (1 << (1 - (i >> 4))))) {
|
||||
printk(KERN_WARNING "%s: BIOS didn't set cable bits correctly. Enabling workaround.\n",
|
||||
amd_chipset->name);
|
||||
amd_80w |= (1 << (1 - (i >> 4)));
|
||||
}
|
||||
break;
|
||||
|
||||
case AMD_UDMA_66:
|
||||
pci_read_config_dword(dev, AMD_UDMA_TIMING, &u);
|
||||
for (i = 24; i >= 0; i -= 8)
|
||||
if ((u >> i) & 4)
|
||||
amd_80w |= (1 << (1 - (i >> 4)));
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Take care of prefetch & postwrite.
|
||||
*/
|
||||
|
||||
pci_read_config_byte(dev, AMD_IDE_CONFIG, &t);
|
||||
pci_write_config_byte(dev, AMD_IDE_CONFIG,
|
||||
(amd_config->flags & AMD_BAD_FIFO) ? (t & 0x0f) : (t | 0xf0));
|
||||
|
||||
/*
|
||||
* Take care of incorrectly wired Serenade mainboards.
|
||||
*/
|
||||
|
||||
if ((amd_config->flags & AMD_CHECK_SERENADE) &&
|
||||
dev->subsystem_vendor == PCI_VENDOR_ID_AMD &&
|
||||
dev->subsystem_device == PCI_DEVICE_ID_AMD_SERENADE)
|
||||
amd_config->flags = AMD_UDMA_100;
|
||||
|
||||
/*
|
||||
* Determine the system bus clock.
|
||||
*/
|
||||
|
||||
amd_clock = system_bus_clock() * 1000;
|
||||
|
||||
switch (amd_clock) {
|
||||
case 33000: amd_clock = 33333; break;
|
||||
case 37000: amd_clock = 37500; break;
|
||||
case 41000: amd_clock = 41666; break;
|
||||
}
|
||||
|
||||
if (amd_clock < 20000 || amd_clock > 50000) {
|
||||
printk(KERN_WARNING "%s: User given PCI clock speed impossible (%d), using 33 MHz instead.\n",
|
||||
amd_chipset->name, amd_clock);
|
||||
printk(KERN_WARNING "%s: Use ide0=ata66 if you want to assume 80-wire cable\n",
|
||||
amd_chipset->name);
|
||||
amd_clock = 33333;
|
||||
}
|
||||
|
||||
/*
|
||||
* Print the boot message.
|
||||
*/
|
||||
|
||||
pci_read_config_byte(dev, PCI_REVISION_ID, &t);
|
||||
printk(KERN_INFO "%s: %s (rev %02x) %s controller\n",
|
||||
amd_chipset->name, pci_name(dev), t, amd_dma[amd_config->flags & AMD_UDMA]);
|
||||
|
||||
/*
|
||||
* Register /proc/ide/amd74xx entry
|
||||
*/
|
||||
|
||||
#if defined(DISPLAY_AMD_TIMINGS) && defined(CONFIG_PROC_FS)
|
||||
if (!amd74xx_proc) {
|
||||
amd_base = pci_resource_start(dev, 4);
|
||||
bmide_dev = dev;
|
||||
ide_pci_create_host_proc("amd74xx", amd74xx_get_info);
|
||||
amd74xx_proc = 1;
|
||||
}
|
||||
#endif /* DISPLAY_AMD_TIMINGS && CONFIG_PROC_FS */
|
||||
|
||||
return dev->irq;
|
||||
}
|
||||
|
||||
static void __init init_hwif_amd74xx(ide_hwif_t *hwif)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (hwif->irq == 0) /* 0 is bogus but will do for now */
|
||||
hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel);
|
||||
|
||||
hwif->autodma = 0;
|
||||
|
||||
hwif->tuneproc = &amd74xx_tune_drive;
|
||||
hwif->speedproc = &amd_set_drive;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
hwif->drives[i].io_32bit = 1;
|
||||
hwif->drives[i].unmask = 1;
|
||||
hwif->drives[i].autotune = 1;
|
||||
hwif->drives[i].dn = hwif->channel * 2 + i;
|
||||
}
|
||||
|
||||
if (!hwif->dma_base)
|
||||
return;
|
||||
|
||||
hwif->atapi_dma = 1;
|
||||
hwif->ultra_mask = 0x7f;
|
||||
hwif->mwdma_mask = 0x07;
|
||||
hwif->swdma_mask = 0x07;
|
||||
|
||||
if (!hwif->udma_four)
|
||||
hwif->udma_four = (amd_80w >> hwif->channel) & 1;
|
||||
hwif->ide_dma_check = &amd74xx_ide_dma_check;
|
||||
if (!noautodma)
|
||||
hwif->autodma = 1;
|
||||
hwif->drives[0].autodma = hwif->autodma;
|
||||
hwif->drives[1].autodma = hwif->autodma;
|
||||
}
|
||||
|
||||
#define DECLARE_AMD_DEV(name_str) \
|
||||
{ \
|
||||
.name = name_str, \
|
||||
.init_chipset = init_chipset_amd74xx, \
|
||||
.init_hwif = init_hwif_amd74xx, \
|
||||
.channels = 2, \
|
||||
.autodma = AUTODMA, \
|
||||
.enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \
|
||||
.bootable = ON_BOARD, \
|
||||
}
|
||||
|
||||
#define DECLARE_NV_DEV(name_str) \
|
||||
{ \
|
||||
.name = name_str, \
|
||||
.init_chipset = init_chipset_amd74xx, \
|
||||
.init_hwif = init_hwif_amd74xx, \
|
||||
.channels = 2, \
|
||||
.autodma = AUTODMA, \
|
||||
.enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \
|
||||
.bootable = ON_BOARD, \
|
||||
}
|
||||
|
||||
static ide_pci_device_t amd74xx_chipsets[] __devinitdata = {
|
||||
/* 0 */ DECLARE_AMD_DEV("AMD7401"),
|
||||
/* 1 */ DECLARE_AMD_DEV("AMD7409"),
|
||||
/* 2 */ DECLARE_AMD_DEV("AMD7411"),
|
||||
/* 3 */ DECLARE_AMD_DEV("AMD7441"),
|
||||
/* 4 */ DECLARE_AMD_DEV("AMD8111"),
|
||||
|
||||
/* 5 */ DECLARE_NV_DEV("NFORCE"),
|
||||
/* 6 */ DECLARE_NV_DEV("NFORCE2"),
|
||||
/* 7 */ DECLARE_NV_DEV("NFORCE2-U400R"),
|
||||
/* 8 */ DECLARE_NV_DEV("NFORCE2-U400R-SATA"),
|
||||
/* 9 */ DECLARE_NV_DEV("NFORCE3-150"),
|
||||
/* 10 */ DECLARE_NV_DEV("NFORCE3-250"),
|
||||
/* 11 */ DECLARE_NV_DEV("NFORCE3-250-SATA"),
|
||||
/* 12 */ DECLARE_NV_DEV("NFORCE3-250-SATA2"),
|
||||
/* 13 */ DECLARE_NV_DEV("NFORCE-CK804"),
|
||||
/* 14 */ DECLARE_NV_DEV("NFORCE-MCP04"),
|
||||
};
|
||||
|
||||
static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
{
|
||||
amd_chipset = amd74xx_chipsets + id->driver_data;
|
||||
amd_config = amd_ide_chips + id->driver_data;
|
||||
if (dev->device != amd_config->id) BUG();
|
||||
ide_setup_pci_device(dev, amd_chipset);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct pci_device_id amd74xx_pci_tbl[] = {
|
||||
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_COBRA_7401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
||||
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7409, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
|
||||
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
|
||||
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
|
||||
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 },
|
||||
#ifdef CONFIG_BLK_DEV_IDE_SATA
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
|
||||
#endif
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
|
||||
#ifdef CONFIG_BLK_DEV_IDE_SATA
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 },
|
||||
#endif
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13 },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14 },
|
||||
{ 0, },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl);
|
||||
|
||||
static struct pci_driver driver = {
|
||||
.name = "AMD_IDE",
|
||||
.id_table = amd74xx_pci_tbl,
|
||||
.probe = amd74xx_probe,
|
||||
};
|
||||
|
||||
static int amd74xx_ide_init(void)
|
||||
{
|
||||
return ide_pci_register_driver(&driver);
|
||||
}
|
||||
|
||||
module_init(amd74xx_ide_init);
|
||||
|
||||
MODULE_AUTHOR("Vojtech Pavlik");
|
||||
MODULE_DESCRIPTION("AMD PCI IDE driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
BIN
extra/linux-2.6.10/drivers/ide/pci/amd74xx.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/pci/amd74xx.o
Normal file
Binary file not shown.
370
extra/linux-2.6.10/drivers/ide/pci/atiixp.c
Normal file
370
extra/linux-2.6.10/drivers/ide/pci/atiixp.c
Normal file
@@ -0,0 +1,370 @@
|
||||
/*
|
||||
* linux/drivers/ide/pci/atiixp.c Version 0.01-bart2 Feb. 26, 2004
|
||||
*
|
||||
* Copyright (C) 2003 ATI Inc. <hyu@ati.com>
|
||||
* Copyright (C) 2004 Bartlomiej Zolnierkiewicz
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#define ATIIXP_IDE_PIO_TIMING 0x40
|
||||
#define ATIIXP_IDE_MDMA_TIMING 0x44
|
||||
#define ATIIXP_IDE_PIO_CONTROL 0x48
|
||||
#define ATIIXP_IDE_PIO_MODE 0x4a
|
||||
#define ATIIXP_IDE_UDMA_CONTROL 0x54
|
||||
#define ATIIXP_IDE_UDMA_MODE 0x56
|
||||
|
||||
typedef struct {
|
||||
u8 command_width;
|
||||
u8 recover_width;
|
||||
} atiixp_ide_timing;
|
||||
|
||||
static atiixp_ide_timing pio_timing[] = {
|
||||
{ 0x05, 0x0d },
|
||||
{ 0x04, 0x07 },
|
||||
{ 0x03, 0x04 },
|
||||
{ 0x02, 0x02 },
|
||||
{ 0x02, 0x00 },
|
||||
};
|
||||
|
||||
static atiixp_ide_timing mdma_timing[] = {
|
||||
{ 0x07, 0x07 },
|
||||
{ 0x02, 0x01 },
|
||||
{ 0x02, 0x00 },
|
||||
};
|
||||
|
||||
static int save_mdma_mode[4];
|
||||
|
||||
/**
|
||||
* atiixp_ratemask - compute rate mask for ATIIXP IDE
|
||||
* @drive: IDE drive to compute for
|
||||
*
|
||||
* Returns the available modes for the ATIIXP IDE controller.
|
||||
*/
|
||||
|
||||
static u8 atiixp_ratemask(ide_drive_t *drive)
|
||||
{
|
||||
u8 mode = 3;
|
||||
|
||||
if (!eighty_ninty_three(drive))
|
||||
mode = min(mode, (u8)1);
|
||||
return mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* atiixp_dma_2_pio - return the PIO mode matching DMA
|
||||
* @xfer_rate: transfer speed
|
||||
*
|
||||
* Returns the nearest equivalent PIO timing for the PIO or DMA
|
||||
* mode requested by the controller.
|
||||
*/
|
||||
|
||||
static u8 atiixp_dma_2_pio(u8 xfer_rate) {
|
||||
switch(xfer_rate) {
|
||||
case XFER_UDMA_6:
|
||||
case XFER_UDMA_5:
|
||||
case XFER_UDMA_4:
|
||||
case XFER_UDMA_3:
|
||||
case XFER_UDMA_2:
|
||||
case XFER_UDMA_1:
|
||||
case XFER_UDMA_0:
|
||||
case XFER_MW_DMA_2:
|
||||
case XFER_PIO_4:
|
||||
return 4;
|
||||
case XFER_MW_DMA_1:
|
||||
case XFER_PIO_3:
|
||||
return 3;
|
||||
case XFER_SW_DMA_2:
|
||||
case XFER_PIO_2:
|
||||
return 2;
|
||||
case XFER_MW_DMA_0:
|
||||
case XFER_SW_DMA_1:
|
||||
case XFER_SW_DMA_0:
|
||||
case XFER_PIO_1:
|
||||
case XFER_PIO_0:
|
||||
case XFER_PIO_SLOW:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int atiixp_ide_dma_host_on(ide_drive_t *drive)
|
||||
{
|
||||
struct pci_dev *dev = drive->hwif->pci_dev;
|
||||
unsigned long flags;
|
||||
u16 tmp16;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
|
||||
pci_read_config_word(dev, ATIIXP_IDE_UDMA_CONTROL, &tmp16);
|
||||
if (save_mdma_mode[drive->dn])
|
||||
tmp16 &= ~(1 << drive->dn);
|
||||
else
|
||||
tmp16 |= (1 << drive->dn);
|
||||
pci_write_config_word(dev, ATIIXP_IDE_UDMA_CONTROL, tmp16);
|
||||
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
|
||||
return __ide_dma_host_on(drive);
|
||||
}
|
||||
|
||||
static int atiixp_ide_dma_host_off(ide_drive_t *drive)
|
||||
{
|
||||
struct pci_dev *dev = drive->hwif->pci_dev;
|
||||
unsigned long flags;
|
||||
u16 tmp16;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
|
||||
pci_read_config_word(dev, ATIIXP_IDE_UDMA_CONTROL, &tmp16);
|
||||
tmp16 &= ~(1 << drive->dn);
|
||||
pci_write_config_word(dev, ATIIXP_IDE_UDMA_CONTROL, tmp16);
|
||||
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
|
||||
return __ide_dma_host_off(drive);
|
||||
}
|
||||
|
||||
/**
|
||||
* atiixp_tune_drive - tune a drive attached to a ATIIXP
|
||||
* @drive: drive to tune
|
||||
* @pio: desired PIO mode
|
||||
*
|
||||
* Set the interface PIO mode.
|
||||
*/
|
||||
|
||||
static void atiixp_tuneproc(ide_drive_t *drive, u8 pio)
|
||||
{
|
||||
struct pci_dev *dev = drive->hwif->pci_dev;
|
||||
unsigned long flags;
|
||||
int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8;
|
||||
u32 pio_timing_data;
|
||||
u16 pio_mode_data;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
|
||||
pci_read_config_word(dev, ATIIXP_IDE_PIO_MODE, &pio_mode_data);
|
||||
pio_mode_data &= ~(0x07 << (drive->dn * 4));
|
||||
pio_mode_data |= (pio << (drive->dn * 4));
|
||||
pci_write_config_word(dev, ATIIXP_IDE_PIO_MODE, pio_mode_data);
|
||||
|
||||
pci_read_config_dword(dev, ATIIXP_IDE_PIO_TIMING, &pio_timing_data);
|
||||
pio_timing_data &= ~(0xff << timing_shift);
|
||||
pio_timing_data |= (pio_timing[pio].recover_width << timing_shift) |
|
||||
(pio_timing[pio].command_width << (timing_shift + 4));
|
||||
pci_write_config_dword(dev, ATIIXP_IDE_PIO_TIMING, pio_timing_data);
|
||||
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* atiixp_tune_chipset - tune a ATIIXP interface
|
||||
* @drive: IDE drive to tune
|
||||
* @xferspeed: speed to configure
|
||||
*
|
||||
* Set a ATIIXP interface channel to the desired speeds. This involves
|
||||
* requires the right timing data into the ATIIXP configuration space
|
||||
* then setting the drive parameters appropriately
|
||||
*/
|
||||
|
||||
static int atiixp_speedproc(ide_drive_t *drive, u8 xferspeed)
|
||||
{
|
||||
struct pci_dev *dev = drive->hwif->pci_dev;
|
||||
unsigned long flags;
|
||||
int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8;
|
||||
u32 tmp32;
|
||||
u16 tmp16;
|
||||
u8 speed, pio;
|
||||
|
||||
speed = ide_rate_filter(atiixp_ratemask(drive), xferspeed);
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
|
||||
save_mdma_mode[drive->dn] = 0;
|
||||
if (speed >= XFER_UDMA_0) {
|
||||
pci_read_config_word(dev, ATIIXP_IDE_UDMA_MODE, &tmp16);
|
||||
tmp16 &= ~(0x07 << (drive->dn * 4));
|
||||
tmp16 |= ((speed & 0x07) << (drive->dn * 4));
|
||||
pci_write_config_word(dev, ATIIXP_IDE_UDMA_MODE, tmp16);
|
||||
} else {
|
||||
if ((speed >= XFER_MW_DMA_0) && (speed <= XFER_MW_DMA_2)) {
|
||||
save_mdma_mode[drive->dn] = speed;
|
||||
pci_read_config_dword(dev, ATIIXP_IDE_MDMA_TIMING, &tmp32);
|
||||
tmp32 &= ~(0xff << timing_shift);
|
||||
tmp32 |= (mdma_timing[speed & 0x03].recover_width << timing_shift) |
|
||||
(mdma_timing[speed & 0x03].command_width << (timing_shift + 4));
|
||||
pci_write_config_dword(dev, ATIIXP_IDE_MDMA_TIMING, tmp32);
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
|
||||
if (speed >= XFER_SW_DMA_0)
|
||||
pio = atiixp_dma_2_pio(speed);
|
||||
else
|
||||
pio = speed - XFER_PIO_0;
|
||||
|
||||
atiixp_tuneproc(drive, pio);
|
||||
|
||||
return ide_config_drive_speed(drive, speed);
|
||||
}
|
||||
|
||||
/**
|
||||
* atiixp_config_drive_for_dma - configure drive for DMA
|
||||
* @drive: IDE drive to configure
|
||||
*
|
||||
* Set up a ATIIXP interface channel for the best available speed.
|
||||
* We prefer UDMA if it is available and then MWDMA. If DMA is
|
||||
* not available we switch to PIO and return 0.
|
||||
*/
|
||||
|
||||
static int atiixp_config_drive_for_dma(ide_drive_t *drive)
|
||||
{
|
||||
u8 speed = ide_dma_speed(drive, atiixp_ratemask(drive));
|
||||
|
||||
/* If no DMA speed was available then disable DMA and use PIO. */
|
||||
if (!speed) {
|
||||
u8 tspeed = ide_get_best_pio_mode(drive, 255, 5, NULL);
|
||||
speed = atiixp_dma_2_pio(XFER_PIO_0 + tspeed) + XFER_PIO_0;
|
||||
}
|
||||
|
||||
(void) atiixp_speedproc(drive, speed);
|
||||
return ide_dma_enable(drive);
|
||||
}
|
||||
|
||||
/**
|
||||
* atiixp_dma_check - set up an IDE device
|
||||
* @drive: IDE drive to configure
|
||||
*
|
||||
* Set up the ATIIXP interface for the best available speed on this
|
||||
* interface, preferring DMA to PIO.
|
||||
*/
|
||||
|
||||
static int atiixp_dma_check(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct hd_driveid *id = drive->id;
|
||||
u8 tspeed, speed;
|
||||
|
||||
drive->init_speed = 0;
|
||||
|
||||
if ((id->capability & 1) && drive->autodma) {
|
||||
|
||||
if (ide_use_dma(drive)) {
|
||||
if (atiixp_config_drive_for_dma(drive))
|
||||
return hwif->ide_dma_on(drive);
|
||||
}
|
||||
|
||||
goto fast_ata_pio;
|
||||
|
||||
} else if ((id->capability & 8) || (id->field_valid & 2)) {
|
||||
fast_ata_pio:
|
||||
tspeed = ide_get_best_pio_mode(drive, 255, 5, NULL);
|
||||
speed = atiixp_dma_2_pio(XFER_PIO_0 + tspeed) + XFER_PIO_0;
|
||||
hwif->speedproc(drive, speed);
|
||||
return hwif->ide_dma_off_quietly(drive);
|
||||
}
|
||||
/* IORDY not supported */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* init_hwif_atiixp - fill in the hwif for the ATIIXP
|
||||
* @hwif: IDE interface
|
||||
*
|
||||
* Set up the ide_hwif_t for the ATIIXP interface according to the
|
||||
* capabilities of the hardware.
|
||||
*/
|
||||
|
||||
static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
|
||||
{
|
||||
if (!hwif->irq)
|
||||
hwif->irq = hwif->channel ? 15 : 14;
|
||||
|
||||
hwif->autodma = 0;
|
||||
hwif->tuneproc = &atiixp_tuneproc;
|
||||
hwif->speedproc = &atiixp_speedproc;
|
||||
hwif->drives[0].autotune = 1;
|
||||
hwif->drives[1].autotune = 1;
|
||||
|
||||
if (!hwif->dma_base)
|
||||
return;
|
||||
|
||||
hwif->atapi_dma = 1;
|
||||
hwif->ultra_mask = 0x3f;
|
||||
hwif->mwdma_mask = 0x06;
|
||||
hwif->swdma_mask = 0x04;
|
||||
|
||||
/* FIXME: proper cable detection needed */
|
||||
hwif->udma_four = 1;
|
||||
hwif->ide_dma_host_on = &atiixp_ide_dma_host_on;
|
||||
hwif->ide_dma_host_off = &atiixp_ide_dma_host_off;
|
||||
hwif->ide_dma_check = &atiixp_dma_check;
|
||||
if (!noautodma)
|
||||
hwif->autodma = 1;
|
||||
|
||||
hwif->drives[1].autodma = hwif->autodma;
|
||||
hwif->drives[0].autodma = hwif->autodma;
|
||||
}
|
||||
|
||||
static ide_pci_device_t atiixp_pci_info[] __devinitdata = {
|
||||
{ /* 0 */
|
||||
.name = "ATIIXP",
|
||||
.init_hwif = init_hwif_atiixp,
|
||||
.channels = 2,
|
||||
.autodma = AUTODMA,
|
||||
.enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}},
|
||||
.bootable = ON_BOARD,
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* atiixp_init_one - called when a ATIIXP is found
|
||||
* @dev: the atiixp device
|
||||
* @id: the matching pci id
|
||||
*
|
||||
* Called when the PCI registration layer (or the IDE initialization)
|
||||
* finds a device matching our IDE device tables.
|
||||
*/
|
||||
|
||||
static int __devinit atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
{
|
||||
ide_setup_pci_device(dev, &atiixp_pci_info[id->driver_data]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct pci_device_id atiixp_pci_tbl[] = {
|
||||
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP2_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||
{ 0, },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl);
|
||||
|
||||
static struct pci_driver driver = {
|
||||
.name = "ATIIXP_IDE",
|
||||
.id_table = atiixp_pci_tbl,
|
||||
.probe = atiixp_init_one,
|
||||
};
|
||||
|
||||
static int atiixp_ide_init(void)
|
||||
{
|
||||
return ide_pci_register_driver(&driver);
|
||||
}
|
||||
|
||||
module_init(atiixp_ide_init);
|
||||
|
||||
MODULE_AUTHOR("HUI YU");
|
||||
MODULE_DESCRIPTION("PCI driver module for ATI IXP IDE");
|
||||
MODULE_LICENSE("GPL");
|
||||
BIN
extra/linux-2.6.10/drivers/ide/pci/atiixp.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/pci/atiixp.o
Normal file
Binary file not shown.
BIN
extra/linux-2.6.10/drivers/ide/pci/built-in.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/pci/built-in.o
Normal file
Binary file not shown.
879
extra/linux-2.6.10/drivers/ide/pci/cmd640.c
Normal file
879
extra/linux-2.6.10/drivers/ide/pci/cmd640.c
Normal file
@@ -0,0 +1,879 @@
|
||||
/*
|
||||
* linux/drivers/ide/pci/cmd640.c Version 1.02 Sep 01, 1996
|
||||
*
|
||||
* Copyright (C) 1995-1996 Linus Torvalds & authors (see below)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Original authors: abramov@cecmow.enet.dec.com (Igor Abramov)
|
||||
* mlord@pobox.com (Mark Lord)
|
||||
*
|
||||
* See linux/MAINTAINERS for address of current maintainer.
|
||||
*
|
||||
* This file provides support for the advanced features and bugs
|
||||
* of IDE interfaces using the CMD Technologies 0640 IDE interface chip.
|
||||
*
|
||||
* These chips are basically fucked by design, and getting this driver
|
||||
* to work on every motherboard design that uses this screwed chip seems
|
||||
* bloody well impossible. However, we're still trying.
|
||||
*
|
||||
* Version 0.97 worked for everybody.
|
||||
*
|
||||
* User feedback is essential. Many thanks to the beta test team:
|
||||
*
|
||||
* A.Hartgers@stud.tue.nl, JZDQC@CUNYVM.CUNY.edu, abramov@cecmow.enet.dec.com,
|
||||
* bardj@utopia.ppp.sn.no, bart@gaga.tue.nl, bbol001@cs.auckland.ac.nz,
|
||||
* chrisc@dbass.demon.co.uk, dalecki@namu26.Num.Math.Uni-Goettingen.de,
|
||||
* derekn@vw.ece.cmu.edu, florian@btp2x3.phy.uni-bayreuth.de,
|
||||
* flynn@dei.unipd.it, gadio@netvision.net.il, godzilla@futuris.net,
|
||||
* j@pobox.com, jkemp1@mises.uni-paderborn.de, jtoppe@hiwaay.net,
|
||||
* kerouac@ssnet.com, meskes@informatik.rwth-aachen.de, hzoli@cs.elte.hu,
|
||||
* peter@udgaard.isgtec.com, phil@tazenda.demon.co.uk, roadcapw@cfw.com,
|
||||
* s0033las@sun10.vsz.bme.hu, schaffer@tam.cornell.edu, sjd@slip.net,
|
||||
* steve@ei.org, ulrpeg@bigcomm.gun.de, ism@tardis.ed.ac.uk, mack@cray.com
|
||||
* liug@mama.indstate.edu, and others.
|
||||
*
|
||||
* Version 0.01 Initial version, hacked out of ide.c,
|
||||
* and #include'd rather than compiled separately.
|
||||
* This will get cleaned up in a subsequent release.
|
||||
*
|
||||
* Version 0.02 Fixes for vlb initialization code, enable prefetch
|
||||
* for versions 'B' and 'C' of chip by default,
|
||||
* some code cleanup.
|
||||
*
|
||||
* Version 0.03 Added reset of secondary interface,
|
||||
* and black list for devices which are not compatible
|
||||
* with prefetch mode. Separate function for setting
|
||||
* prefetch is added, possibly it will be called some
|
||||
* day from ioctl processing code.
|
||||
*
|
||||
* Version 0.04 Now configs/compiles separate from ide.c
|
||||
*
|
||||
* Version 0.05 Major rewrite of interface timing code.
|
||||
* Added new function cmd640_set_mode to set PIO mode
|
||||
* from ioctl call. New drives added to black list.
|
||||
*
|
||||
* Version 0.06 More code cleanup. Prefetch is enabled only for
|
||||
* detected hard drives, not included in prefetch
|
||||
* black list.
|
||||
*
|
||||
* Version 0.07 Changed to more conservative drive tuning policy.
|
||||
* Unknown drives, which report PIO < 4 are set to
|
||||
* (reported_PIO - 1) if it is supported, or to PIO0.
|
||||
* List of known drives extended by info provided by
|
||||
* CMD at their ftp site.
|
||||
*
|
||||
* Version 0.08 Added autotune/noautotune support.
|
||||
*
|
||||
* Version 0.09 Try to be smarter about 2nd port enabling.
|
||||
* Version 0.10 Be nice and don't reset 2nd port.
|
||||
* Version 0.11 Try to handle more weird situations.
|
||||
*
|
||||
* Version 0.12 Lots of bug fixes from Laszlo Peter
|
||||
* irq unmasking disabled for reliability.
|
||||
* try to be even smarter about the second port.
|
||||
* tidy up source code formatting.
|
||||
* Version 0.13 permit irq unmasking again.
|
||||
* Version 0.90 massive code cleanup, some bugs fixed.
|
||||
* defaults all drives to PIO mode0, prefetch off.
|
||||
* autotune is OFF by default, with compile time flag.
|
||||
* prefetch can be turned OFF/ON using "hdparm -p8/-p9"
|
||||
* (requires hdparm-3.1 or newer)
|
||||
* Version 0.91 first release to linux-kernel list.
|
||||
* Version 0.92 move initial reg dump to separate callable function
|
||||
* change "readahead" to "prefetch" to avoid confusion
|
||||
* Version 0.95 respect original BIOS timings unless autotuning.
|
||||
* tons of code cleanup and rearrangement.
|
||||
* added CONFIG_BLK_DEV_CMD640_ENHANCED option
|
||||
* prevent use of unmask when prefetch is on
|
||||
* Version 0.96 prevent use of io_32bit when prefetch is off
|
||||
* Version 0.97 fix VLB secondary interface for sjd@slip.net
|
||||
* other minor tune-ups: 0.96 was very good.
|
||||
* Version 0.98 ignore PCI version when disabled by BIOS
|
||||
* Version 0.99 display setup/active/recovery clocks with PIO mode
|
||||
* Version 1.00 Mmm.. cannot depend on PCMD_ENA in all systems
|
||||
* Version 1.01 slow/fast devsel can be selected with "hdparm -p6/-p7"
|
||||
* ("fast" is necessary for 32bit I/O in some systems)
|
||||
* Version 1.02 fix bug that resulted in slow "setup times"
|
||||
* (patch courtesy of Zoltan Hidvegi)
|
||||
*/
|
||||
|
||||
#undef REALLY_SLOW_IO /* most systems can safely undef this */
|
||||
#define CMD640_PREFETCH_MASKS 1
|
||||
|
||||
//#define CMD640_DUMP_REGS
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
/*
|
||||
* This flag is set in ide.c by the parameter: ide0=cmd640_vlb
|
||||
*/
|
||||
int cmd640_vlb = 0;
|
||||
|
||||
/*
|
||||
* CMD640 specific registers definition.
|
||||
*/
|
||||
|
||||
#define VID 0x00
|
||||
#define DID 0x02
|
||||
#define PCMD 0x04
|
||||
#define PCMD_ENA 0x01
|
||||
#define PSTTS 0x06
|
||||
#define REVID 0x08
|
||||
#define PROGIF 0x09
|
||||
#define SUBCL 0x0a
|
||||
#define BASCL 0x0b
|
||||
#define BaseA0 0x10
|
||||
#define BaseA1 0x14
|
||||
#define BaseA2 0x18
|
||||
#define BaseA3 0x1c
|
||||
#define INTLINE 0x3c
|
||||
#define INPINE 0x3d
|
||||
|
||||
#define CFR 0x50
|
||||
#define CFR_DEVREV 0x03
|
||||
#define CFR_IDE01INTR 0x04
|
||||
#define CFR_DEVID 0x18
|
||||
#define CFR_AT_VESA_078h 0x20
|
||||
#define CFR_DSA1 0x40
|
||||
#define CFR_DSA0 0x80
|
||||
|
||||
#define CNTRL 0x51
|
||||
#define CNTRL_DIS_RA0 0x40
|
||||
#define CNTRL_DIS_RA1 0x80
|
||||
#define CNTRL_ENA_2ND 0x08
|
||||
|
||||
#define CMDTIM 0x52
|
||||
#define ARTTIM0 0x53
|
||||
#define DRWTIM0 0x54
|
||||
#define ARTTIM1 0x55
|
||||
#define DRWTIM1 0x56
|
||||
#define ARTTIM23 0x57
|
||||
#define ARTTIM23_DIS_RA2 0x04
|
||||
#define ARTTIM23_DIS_RA3 0x08
|
||||
#define DRWTIM23 0x58
|
||||
#define BRST 0x59
|
||||
|
||||
/*
|
||||
* Registers and masks for easy access by drive index:
|
||||
*/
|
||||
static u8 prefetch_regs[4] = {CNTRL, CNTRL, ARTTIM23, ARTTIM23};
|
||||
static u8 prefetch_masks[4] = {CNTRL_DIS_RA0, CNTRL_DIS_RA1, ARTTIM23_DIS_RA2, ARTTIM23_DIS_RA3};
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
|
||||
|
||||
static u8 arttim_regs[4] = {ARTTIM0, ARTTIM1, ARTTIM23, ARTTIM23};
|
||||
static u8 drwtim_regs[4] = {DRWTIM0, DRWTIM1, DRWTIM23, DRWTIM23};
|
||||
|
||||
/*
|
||||
* Current cmd640 timing values for each drive.
|
||||
* The defaults for each are the slowest possible timings.
|
||||
*/
|
||||
static u8 setup_counts[4] = {4, 4, 4, 4}; /* Address setup count (in clocks) */
|
||||
static u8 active_counts[4] = {16, 16, 16, 16}; /* Active count (encoded) */
|
||||
static u8 recovery_counts[4] = {16, 16, 16, 16}; /* Recovery count (encoded) */
|
||||
|
||||
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
|
||||
|
||||
/*
|
||||
* These are initialized to point at the devices we control
|
||||
*/
|
||||
static ide_hwif_t *cmd_hwif0, *cmd_hwif1;
|
||||
static ide_drive_t *cmd_drives[4];
|
||||
|
||||
/*
|
||||
* Interface to access cmd640x registers
|
||||
*/
|
||||
static unsigned int cmd640_key;
|
||||
static void (*__put_cmd640_reg)(u16 reg, u8 val);
|
||||
static u8 (*__get_cmd640_reg)(u16 reg);
|
||||
|
||||
/*
|
||||
* This is read from the CFR reg, and is used in several places.
|
||||
*/
|
||||
static unsigned int cmd640_chip_version;
|
||||
|
||||
/*
|
||||
* The CMD640x chip does not support DWORD config write cycles, but some
|
||||
* of the BIOSes use them to implement the config services.
|
||||
* Therefore, we must use direct IO instead.
|
||||
*/
|
||||
|
||||
/* PCI method 1 access */
|
||||
|
||||
static void put_cmd640_reg_pci1 (u16 reg, u8 val)
|
||||
{
|
||||
outl_p((reg & 0xfc) | cmd640_key, 0xcf8);
|
||||
outb_p(val, (reg & 3) | 0xcfc);
|
||||
}
|
||||
|
||||
static u8 get_cmd640_reg_pci1 (u16 reg)
|
||||
{
|
||||
outl_p((reg & 0xfc) | cmd640_key, 0xcf8);
|
||||
return inb_p((reg & 3) | 0xcfc);
|
||||
}
|
||||
|
||||
/* PCI method 2 access (from CMD datasheet) */
|
||||
|
||||
static void put_cmd640_reg_pci2 (u16 reg, u8 val)
|
||||
{
|
||||
outb_p(0x10, 0xcf8);
|
||||
outb_p(val, cmd640_key + reg);
|
||||
outb_p(0, 0xcf8);
|
||||
}
|
||||
|
||||
static u8 get_cmd640_reg_pci2 (u16 reg)
|
||||
{
|
||||
u8 b;
|
||||
|
||||
outb_p(0x10, 0xcf8);
|
||||
b = inb_p(cmd640_key + reg);
|
||||
outb_p(0, 0xcf8);
|
||||
return b;
|
||||
}
|
||||
|
||||
/* VLB access */
|
||||
|
||||
static void put_cmd640_reg_vlb (u16 reg, u8 val)
|
||||
{
|
||||
outb_p(reg, cmd640_key);
|
||||
outb_p(val, cmd640_key + 4);
|
||||
}
|
||||
|
||||
static u8 get_cmd640_reg_vlb (u16 reg)
|
||||
{
|
||||
outb_p(reg, cmd640_key);
|
||||
return inb_p(cmd640_key + 4);
|
||||
}
|
||||
|
||||
static u8 get_cmd640_reg(u16 reg)
|
||||
{
|
||||
u8 b;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
b = __get_cmd640_reg(reg);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
return b;
|
||||
}
|
||||
|
||||
static void put_cmd640_reg(u16 reg, u8 val)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
__put_cmd640_reg(reg,val);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
}
|
||||
|
||||
static int __init match_pci_cmd640_device (void)
|
||||
{
|
||||
const u8 ven_dev[4] = {0x95, 0x10, 0x40, 0x06};
|
||||
unsigned int i;
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (get_cmd640_reg(i) != ven_dev[i])
|
||||
return 0;
|
||||
}
|
||||
#ifdef STUPIDLY_TRUST_BROKEN_PCMD_ENA_BIT
|
||||
if ((get_cmd640_reg(PCMD) & PCMD_ENA) == 0) {
|
||||
printk("ide: cmd640 on PCI disabled by BIOS\n");
|
||||
return 0;
|
||||
}
|
||||
#endif /* STUPIDLY_TRUST_BROKEN_PCMD_ENA_BIT */
|
||||
return 1; /* success */
|
||||
}
|
||||
|
||||
/*
|
||||
* Probe for CMD640x -- pci method 1
|
||||
*/
|
||||
static int __init probe_for_cmd640_pci1 (void)
|
||||
{
|
||||
__get_cmd640_reg = get_cmd640_reg_pci1;
|
||||
__put_cmd640_reg = put_cmd640_reg_pci1;
|
||||
for (cmd640_key = 0x80000000;
|
||||
cmd640_key <= 0x8000f800;
|
||||
cmd640_key += 0x800) {
|
||||
if (match_pci_cmd640_device())
|
||||
return 1; /* success */
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Probe for CMD640x -- pci method 2
|
||||
*/
|
||||
static int __init probe_for_cmd640_pci2 (void)
|
||||
{
|
||||
__get_cmd640_reg = get_cmd640_reg_pci2;
|
||||
__put_cmd640_reg = put_cmd640_reg_pci2;
|
||||
for (cmd640_key = 0xc000; cmd640_key <= 0xcf00; cmd640_key += 0x100) {
|
||||
if (match_pci_cmd640_device())
|
||||
return 1; /* success */
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Probe for CMD640x -- vlb
|
||||
*/
|
||||
static int __init probe_for_cmd640_vlb (void)
|
||||
{
|
||||
u8 b;
|
||||
|
||||
__get_cmd640_reg = get_cmd640_reg_vlb;
|
||||
__put_cmd640_reg = put_cmd640_reg_vlb;
|
||||
cmd640_key = 0x178;
|
||||
b = get_cmd640_reg(CFR);
|
||||
if (b == 0xff || b == 0x00 || (b & CFR_AT_VESA_078h)) {
|
||||
cmd640_key = 0x78;
|
||||
b = get_cmd640_reg(CFR);
|
||||
if (b == 0xff || b == 0x00 || !(b & CFR_AT_VESA_078h))
|
||||
return 0;
|
||||
}
|
||||
return 1; /* success */
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns 1 if an IDE interface/drive exists at 0x170,
|
||||
* Returns 0 otherwise.
|
||||
*/
|
||||
static int __init secondary_port_responding (void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
|
||||
outb_p(0x0a, 0x170 + IDE_SELECT_OFFSET); /* select drive0 */
|
||||
udelay(100);
|
||||
if ((inb_p(0x170 + IDE_SELECT_OFFSET) & 0x1f) != 0x0a) {
|
||||
outb_p(0x1a, 0x170 + IDE_SELECT_OFFSET); /* select drive1 */
|
||||
udelay(100);
|
||||
if ((inb_p(0x170 + IDE_SELECT_OFFSET) & 0x1f) != 0x1a) {
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
return 0; /* nothing responded */
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
return 1; /* success */
|
||||
}
|
||||
|
||||
#ifdef CMD640_DUMP_REGS
|
||||
/*
|
||||
* Dump out all cmd640 registers. May be called from ide.c
|
||||
*/
|
||||
static void cmd640_dump_regs (void)
|
||||
{
|
||||
unsigned int reg = cmd640_vlb ? 0x50 : 0x00;
|
||||
|
||||
/* Dump current state of chip registers */
|
||||
printk("ide: cmd640 internal register dump:");
|
||||
for (; reg <= 0x59; reg++) {
|
||||
if (!(reg & 0x0f))
|
||||
printk("\n%04x:", reg);
|
||||
printk(" %02x", get_cmd640_reg(reg));
|
||||
}
|
||||
printk("\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Check whether prefetch is on for a drive,
|
||||
* and initialize the unmask flags for safe operation.
|
||||
*/
|
||||
static void __init check_prefetch (unsigned int index)
|
||||
{
|
||||
ide_drive_t *drive = cmd_drives[index];
|
||||
u8 b = get_cmd640_reg(prefetch_regs[index]);
|
||||
|
||||
if (b & prefetch_masks[index]) { /* is prefetch off? */
|
||||
drive->no_unmask = 0;
|
||||
drive->no_io_32bit = 1;
|
||||
drive->io_32bit = 0;
|
||||
} else {
|
||||
#if CMD640_PREFETCH_MASKS
|
||||
drive->no_unmask = 1;
|
||||
drive->unmask = 0;
|
||||
#endif
|
||||
drive->no_io_32bit = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Figure out which devices we control
|
||||
*/
|
||||
static void __init setup_device_ptrs (void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
cmd_hwif0 = &ide_hwifs[0]; /* default, if not found below */
|
||||
cmd_hwif1 = &ide_hwifs[1]; /* default, if not found below */
|
||||
for (i = 0; i < MAX_HWIFS; i++) {
|
||||
ide_hwif_t *hwif = &ide_hwifs[i];
|
||||
if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced) {
|
||||
if (hwif->io_ports[IDE_DATA_OFFSET] == 0x1f0)
|
||||
cmd_hwif0 = hwif;
|
||||
else if (hwif->io_ports[IDE_DATA_OFFSET] == 0x170)
|
||||
cmd_hwif1 = hwif;
|
||||
}
|
||||
}
|
||||
cmd_drives[0] = &cmd_hwif0->drives[0];
|
||||
cmd_drives[1] = &cmd_hwif0->drives[1];
|
||||
cmd_drives[2] = &cmd_hwif1->drives[0];
|
||||
cmd_drives[3] = &cmd_hwif1->drives[1];
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
|
||||
|
||||
/*
|
||||
* Sets prefetch mode for a drive.
|
||||
*/
|
||||
static void set_prefetch_mode (unsigned int index, int mode)
|
||||
{
|
||||
ide_drive_t *drive = cmd_drives[index];
|
||||
int reg = prefetch_regs[index];
|
||||
u8 b;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
b = __get_cmd640_reg(reg);
|
||||
if (mode) { /* want prefetch on? */
|
||||
#if CMD640_PREFETCH_MASKS
|
||||
drive->no_unmask = 1;
|
||||
drive->unmask = 0;
|
||||
#endif
|
||||
drive->no_io_32bit = 0;
|
||||
b &= ~prefetch_masks[index]; /* enable prefetch */
|
||||
} else {
|
||||
drive->no_unmask = 0;
|
||||
drive->no_io_32bit = 1;
|
||||
drive->io_32bit = 0;
|
||||
b |= prefetch_masks[index]; /* disable prefetch */
|
||||
}
|
||||
__put_cmd640_reg(reg, b);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Dump out current drive clocks settings
|
||||
*/
|
||||
static void display_clocks (unsigned int index)
|
||||
{
|
||||
u8 active_count, recovery_count;
|
||||
|
||||
active_count = active_counts[index];
|
||||
if (active_count == 1)
|
||||
++active_count;
|
||||
recovery_count = recovery_counts[index];
|
||||
if (active_count > 3 && recovery_count == 1)
|
||||
++recovery_count;
|
||||
if (cmd640_chip_version > 1)
|
||||
recovery_count += 1; /* cmd640b uses (count + 1)*/
|
||||
printk(", clocks=%d/%d/%d\n", setup_counts[index], active_count, recovery_count);
|
||||
}
|
||||
|
||||
/*
|
||||
* Pack active and recovery counts into single byte representation
|
||||
* used by controller
|
||||
*/
|
||||
inline static u8 pack_nibbles (u8 upper, u8 lower)
|
||||
{
|
||||
return ((upper & 0x0f) << 4) | (lower & 0x0f);
|
||||
}
|
||||
|
||||
/*
|
||||
* This routine retrieves the initial drive timings from the chipset.
|
||||
*/
|
||||
static void __init retrieve_drive_counts (unsigned int index)
|
||||
{
|
||||
u8 b;
|
||||
|
||||
/*
|
||||
* Get the internal setup timing, and convert to clock count
|
||||
*/
|
||||
b = get_cmd640_reg(arttim_regs[index]) & ~0x3f;
|
||||
switch (b) {
|
||||
case 0x00: b = 4; break;
|
||||
case 0x80: b = 3; break;
|
||||
case 0x40: b = 2; break;
|
||||
default: b = 5; break;
|
||||
}
|
||||
setup_counts[index] = b;
|
||||
|
||||
/*
|
||||
* Get the active/recovery counts
|
||||
*/
|
||||
b = get_cmd640_reg(drwtim_regs[index]);
|
||||
active_counts[index] = (b >> 4) ? (b >> 4) : 0x10;
|
||||
recovery_counts[index] = (b & 0x0f) ? (b & 0x0f) : 0x10;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This routine writes the prepared setup/active/recovery counts
|
||||
* for a drive into the cmd640 chipset registers to active them.
|
||||
*/
|
||||
static void program_drive_counts (unsigned int index)
|
||||
{
|
||||
unsigned long flags;
|
||||
u8 setup_count = setup_counts[index];
|
||||
u8 active_count = active_counts[index];
|
||||
u8 recovery_count = recovery_counts[index];
|
||||
|
||||
/*
|
||||
* Set up address setup count and drive read/write timing registers.
|
||||
* Primary interface has individual count/timing registers for
|
||||
* each drive. Secondary interface has one common set of registers,
|
||||
* so we merge the timings, using the slowest value for each timing.
|
||||
*/
|
||||
if (index > 1) {
|
||||
unsigned int mate;
|
||||
if (cmd_drives[mate = index ^ 1]->present) {
|
||||
if (setup_count < setup_counts[mate])
|
||||
setup_count = setup_counts[mate];
|
||||
if (active_count < active_counts[mate])
|
||||
active_count = active_counts[mate];
|
||||
if (recovery_count < recovery_counts[mate])
|
||||
recovery_count = recovery_counts[mate];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert setup_count to internal chipset representation
|
||||
*/
|
||||
switch (setup_count) {
|
||||
case 4: setup_count = 0x00; break;
|
||||
case 3: setup_count = 0x80; break;
|
||||
case 1:
|
||||
case 2: setup_count = 0x40; break;
|
||||
default: setup_count = 0xc0; /* case 5 */
|
||||
}
|
||||
|
||||
/*
|
||||
* Now that everything is ready, program the new timings
|
||||
*/
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
/*
|
||||
* Program the address_setup clocks into ARTTIM reg,
|
||||
* and then the active/recovery counts into the DRWTIM reg
|
||||
* (this converts counts of 16 into counts of zero -- okay).
|
||||
*/
|
||||
setup_count |= __get_cmd640_reg(arttim_regs[index]) & 0x3f;
|
||||
__put_cmd640_reg(arttim_regs[index], setup_count);
|
||||
__put_cmd640_reg(drwtim_regs[index], pack_nibbles(active_count, recovery_count));
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set a specific pio_mode for a drive
|
||||
*/
|
||||
static void cmd640_set_mode (unsigned int index, u8 pio_mode, unsigned int cycle_time)
|
||||
{
|
||||
int setup_time, active_time, recovery_time, clock_time;
|
||||
u8 setup_count, active_count, recovery_count, recovery_count2, cycle_count;
|
||||
int bus_speed = system_bus_clock();
|
||||
|
||||
if (pio_mode > 5)
|
||||
pio_mode = 5;
|
||||
setup_time = ide_pio_timings[pio_mode].setup_time;
|
||||
active_time = ide_pio_timings[pio_mode].active_time;
|
||||
recovery_time = cycle_time - (setup_time + active_time);
|
||||
clock_time = 1000 / bus_speed;
|
||||
cycle_count = (cycle_time + clock_time - 1) / clock_time;
|
||||
|
||||
setup_count = (setup_time + clock_time - 1) / clock_time;
|
||||
|
||||
active_count = (active_time + clock_time - 1) / clock_time;
|
||||
if (active_count < 2)
|
||||
active_count = 2; /* minimum allowed by cmd640 */
|
||||
|
||||
recovery_count = (recovery_time + clock_time - 1) / clock_time;
|
||||
recovery_count2 = cycle_count - (setup_count + active_count);
|
||||
if (recovery_count2 > recovery_count)
|
||||
recovery_count = recovery_count2;
|
||||
if (recovery_count < 2)
|
||||
recovery_count = 2; /* minimum allowed by cmd640 */
|
||||
if (recovery_count > 17) {
|
||||
active_count += recovery_count - 17;
|
||||
recovery_count = 17;
|
||||
}
|
||||
if (active_count > 16)
|
||||
active_count = 16; /* maximum allowed by cmd640 */
|
||||
if (cmd640_chip_version > 1)
|
||||
recovery_count -= 1; /* cmd640b uses (count + 1)*/
|
||||
if (recovery_count > 16)
|
||||
recovery_count = 16; /* maximum allowed by cmd640 */
|
||||
|
||||
setup_counts[index] = setup_count;
|
||||
active_counts[index] = active_count;
|
||||
recovery_counts[index] = recovery_count;
|
||||
|
||||
/*
|
||||
* In a perfect world, we might set the drive pio mode here
|
||||
* (using WIN_SETFEATURE) before continuing.
|
||||
*
|
||||
* But we do not, because:
|
||||
* 1) this is the wrong place to do it (proper is do_special() in ide.c)
|
||||
* 2) in practice this is rarely, if ever, necessary
|
||||
*/
|
||||
program_drive_counts (index);
|
||||
}
|
||||
|
||||
/*
|
||||
* Drive PIO mode selection:
|
||||
*/
|
||||
static void cmd640_tune_drive (ide_drive_t *drive, u8 mode_wanted)
|
||||
{
|
||||
u8 b;
|
||||
ide_pio_data_t d;
|
||||
unsigned int index = 0;
|
||||
|
||||
while (drive != cmd_drives[index]) {
|
||||
if (++index > 3) {
|
||||
printk("%s: bad news in cmd640_tune_drive\n", drive->name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
switch (mode_wanted) {
|
||||
case 6: /* set fast-devsel off */
|
||||
case 7: /* set fast-devsel on */
|
||||
mode_wanted &= 1;
|
||||
b = get_cmd640_reg(CNTRL) & ~0x27;
|
||||
if (mode_wanted)
|
||||
b |= 0x27;
|
||||
put_cmd640_reg(CNTRL, b);
|
||||
printk("%s: %sabled cmd640 fast host timing (devsel)\n", drive->name, mode_wanted ? "en" : "dis");
|
||||
return;
|
||||
|
||||
case 8: /* set prefetch off */
|
||||
case 9: /* set prefetch on */
|
||||
mode_wanted &= 1;
|
||||
set_prefetch_mode(index, mode_wanted);
|
||||
printk("%s: %sabled cmd640 prefetch\n", drive->name, mode_wanted ? "en" : "dis");
|
||||
return;
|
||||
}
|
||||
|
||||
(void) ide_get_best_pio_mode (drive, mode_wanted, 5, &d);
|
||||
cmd640_set_mode (index, d.pio_mode, d.cycle_time);
|
||||
|
||||
printk ("%s: selected cmd640 PIO mode%d (%dns)%s",
|
||||
drive->name,
|
||||
d.pio_mode,
|
||||
d.cycle_time,
|
||||
d.overridden ? " (overriding vendor mode)" : "");
|
||||
display_clocks(index);
|
||||
return;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
|
||||
|
||||
static int pci_conf1(void)
|
||||
{
|
||||
u32 tmp;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
outb(0x01, 0xCFB);
|
||||
tmp = inl(0xCF8);
|
||||
outl(0x80000000, 0xCF8);
|
||||
if (inl(0xCF8) == 0x80000000) {
|
||||
outl(tmp, 0xCF8);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
return 1;
|
||||
}
|
||||
outl(tmp, 0xCF8);
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pci_conf2(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ide_lock, flags);
|
||||
outb(0x00, 0xCFB);
|
||||
outb(0x00, 0xCF8);
|
||||
outb(0x00, 0xCFA);
|
||||
if (inb(0xCF8) == 0x00 && inb(0xCF8) == 0x00) {
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
return 1;
|
||||
}
|
||||
spin_unlock_irqrestore(&ide_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Probe for a cmd640 chipset, and initialize it if found. Called from ide.c
|
||||
*/
|
||||
int __init ide_probe_for_cmd640x (void)
|
||||
{
|
||||
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
|
||||
int second_port_toggled = 0;
|
||||
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
|
||||
int second_port_cmd640 = 0;
|
||||
const char *bus_type, *port2;
|
||||
unsigned int index;
|
||||
u8 b, cfr;
|
||||
|
||||
if (cmd640_vlb && probe_for_cmd640_vlb()) {
|
||||
bus_type = "VLB";
|
||||
} else {
|
||||
cmd640_vlb = 0;
|
||||
/* Find out what kind of PCI probing is supported otherwise
|
||||
Justin Gibbs will sulk.. */
|
||||
if (pci_conf1() && probe_for_cmd640_pci1())
|
||||
bus_type = "PCI (type1)";
|
||||
else if (pci_conf2() && probe_for_cmd640_pci2())
|
||||
bus_type = "PCI (type2)";
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* Undocumented magic (there is no 0x5b reg in specs)
|
||||
*/
|
||||
put_cmd640_reg(0x5b, 0xbd);
|
||||
if (get_cmd640_reg(0x5b) != 0xbd) {
|
||||
printk(KERN_ERR "ide: cmd640 init failed: wrong value in reg 0x5b\n");
|
||||
return 0;
|
||||
}
|
||||
put_cmd640_reg(0x5b, 0);
|
||||
|
||||
#ifdef CMD640_DUMP_REGS
|
||||
cmd640_dump_regs();
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Documented magic begins here
|
||||
*/
|
||||
cfr = get_cmd640_reg(CFR);
|
||||
cmd640_chip_version = cfr & CFR_DEVREV;
|
||||
if (cmd640_chip_version == 0) {
|
||||
printk ("ide: bad cmd640 revision: %d\n", cmd640_chip_version);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize data for primary port
|
||||
*/
|
||||
setup_device_ptrs ();
|
||||
printk("%s: buggy cmd640%c interface on %s, config=0x%02x\n",
|
||||
cmd_hwif0->name, 'a' + cmd640_chip_version - 1, bus_type, cfr);
|
||||
cmd_hwif0->chipset = ide_cmd640;
|
||||
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
|
||||
cmd_hwif0->tuneproc = &cmd640_tune_drive;
|
||||
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
|
||||
|
||||
/*
|
||||
* Ensure compatibility by always using the slowest timings
|
||||
* for access to the drive's command register block,
|
||||
* and reset the prefetch burstsize to default (512 bytes).
|
||||
*
|
||||
* Maybe we need a way to NOT do these on *some* systems?
|
||||
*/
|
||||
put_cmd640_reg(CMDTIM, 0);
|
||||
put_cmd640_reg(BRST, 0x40);
|
||||
|
||||
/*
|
||||
* Try to enable the secondary interface, if not already enabled
|
||||
*/
|
||||
if (cmd_hwif1->noprobe) {
|
||||
port2 = "not probed";
|
||||
} else {
|
||||
b = get_cmd640_reg(CNTRL);
|
||||
if (secondary_port_responding()) {
|
||||
if ((b & CNTRL_ENA_2ND)) {
|
||||
second_port_cmd640 = 1;
|
||||
port2 = "okay";
|
||||
} else if (cmd640_vlb) {
|
||||
second_port_cmd640 = 1;
|
||||
port2 = "alive";
|
||||
} else
|
||||
port2 = "not cmd640";
|
||||
} else {
|
||||
put_cmd640_reg(CNTRL, b ^ CNTRL_ENA_2ND); /* toggle the bit */
|
||||
if (secondary_port_responding()) {
|
||||
second_port_cmd640 = 1;
|
||||
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
|
||||
second_port_toggled = 1;
|
||||
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
|
||||
port2 = "enabled";
|
||||
} else {
|
||||
put_cmd640_reg(CNTRL, b); /* restore original setting */
|
||||
port2 = "not responding";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize data for secondary cmd640 port, if enabled
|
||||
*/
|
||||
if (second_port_cmd640) {
|
||||
cmd_hwif0->serialized = 1;
|
||||
cmd_hwif1->serialized = 1;
|
||||
cmd_hwif1->chipset = ide_cmd640;
|
||||
cmd_hwif0->mate = cmd_hwif1;
|
||||
cmd_hwif1->mate = cmd_hwif0;
|
||||
cmd_hwif1->channel = 1;
|
||||
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
|
||||
cmd_hwif1->tuneproc = &cmd640_tune_drive;
|
||||
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
|
||||
}
|
||||
printk(KERN_INFO "%s: %sserialized, secondary interface %s\n", cmd_hwif1->name,
|
||||
cmd_hwif0->serialized ? "" : "not ", port2);
|
||||
|
||||
/*
|
||||
* Establish initial timings/prefetch for all drives.
|
||||
* Do not unnecessarily disturb any prior BIOS setup of these.
|
||||
*/
|
||||
for (index = 0; index < (2 + (second_port_cmd640 << 1)); index++) {
|
||||
ide_drive_t *drive = cmd_drives[index];
|
||||
#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
|
||||
if (drive->autotune || ((index > 1) && second_port_toggled)) {
|
||||
/*
|
||||
* Reset timing to the slowest speed and turn off prefetch.
|
||||
* This way, the drive identify code has a better chance.
|
||||
*/
|
||||
setup_counts [index] = 4; /* max possible */
|
||||
active_counts [index] = 16; /* max possible */
|
||||
recovery_counts [index] = 16; /* max possible */
|
||||
program_drive_counts (index);
|
||||
set_prefetch_mode (index, 0);
|
||||
printk("cmd640: drive%d timings/prefetch cleared\n", index);
|
||||
} else {
|
||||
/*
|
||||
* Record timings/prefetch without changing them.
|
||||
* This preserves any prior BIOS setup.
|
||||
*/
|
||||
retrieve_drive_counts (index);
|
||||
check_prefetch (index);
|
||||
printk("cmd640: drive%d timings/prefetch(%s) preserved",
|
||||
index, drive->no_io_32bit ? "off" : "on");
|
||||
display_clocks(index);
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* Set the drive unmask flags to match the prefetch setting
|
||||
*/
|
||||
check_prefetch (index);
|
||||
printk("cmd640: drive%d timings/prefetch(%s) preserved\n",
|
||||
index, drive->no_io_32bit ? "off" : "on");
|
||||
#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
|
||||
}
|
||||
|
||||
#ifdef CMD640_DUMP_REGS
|
||||
cmd640_dump_regs();
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
BIN
extra/linux-2.6.10/drivers/ide/pci/cmd640.o
Normal file
BIN
extra/linux-2.6.10/drivers/ide/pci/cmd640.o
Normal file
Binary file not shown.
740
extra/linux-2.6.10/drivers/ide/pci/cmd64x.c
Normal file
740
extra/linux-2.6.10/drivers/ide/pci/cmd64x.c
Normal file
@@ -0,0 +1,740 @@
|
||||
/* $Id: cmd64x.c,v 1.21 2000/01/30 23:23:16
|
||||
*
|
||||
* linux/drivers/ide/pci/cmd64x.c Version 1.30 Sept 10, 2002
|
||||
*
|
||||
* cmd64x.c: Enable interrupts at initialization time on Ultra/PCI machines.
|
||||
* Note, this driver is not used at all on other systems because
|
||||
* there the "BIOS" has done all of the following already.
|
||||
* Due to massive hardware bugs, UltraDMA is only supported
|
||||
* on the 646U2 and not on the 646U.
|
||||
*
|
||||
* Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be)
|
||||
* Copyright (C) 1998 David S. Miller (davem@redhat.com)
|
||||
*
|
||||
* Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org>
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#include "cmd64x.h"
|
||||
|
||||
#if defined(DISPLAY_CMD64X_TIMINGS) && defined(CONFIG_PROC_FS)
|
||||
#include <linux/stat.h>
|
||||
#include <linux/proc_fs.h>
|
||||
|
||||
static u8 cmd64x_proc = 0;
|
||||
|
||||
#define CMD_MAX_DEVS 5
|
||||
|
||||
static struct pci_dev *cmd_devs[CMD_MAX_DEVS];
|
||||
static int n_cmd_devs;
|
||||
|
||||
static char * print_cmd64x_get_info (char *buf, struct pci_dev *dev, int index)
|
||||
{
|
||||
char *p = buf;
|
||||
|
||||
u8 reg53 = 0, reg54 = 0, reg55 = 0, reg56 = 0; /* primary */
|
||||
u8 reg57 = 0, reg58 = 0, reg5b; /* secondary */
|
||||
u8 reg72 = 0, reg73 = 0; /* primary */
|
||||
u8 reg7a = 0, reg7b = 0; /* secondary */
|
||||
u8 reg50 = 0, reg71 = 0; /* extra */
|
||||
|
||||
p += sprintf(p, "\nController: %d\n", index);
|
||||
p += sprintf(p, "CMD%x Chipset.\n", dev->device);
|
||||
(void) pci_read_config_byte(dev, CFR, ®50);
|
||||
(void) pci_read_config_byte(dev, ARTTIM0, ®53);
|
||||
(void) pci_read_config_byte(dev, DRWTIM0, ®54);
|
||||
(void) pci_read_config_byte(dev, ARTTIM1, ®55);
|
||||
(void) pci_read_config_byte(dev, DRWTIM1, ®56);
|
||||
(void) pci_read_config_byte(dev, ARTTIM2, ®57);
|
||||
(void) pci_read_config_byte(dev, DRWTIM2, ®58);
|
||||
(void) pci_read_config_byte(dev, DRWTIM3, ®5b);
|
||||
(void) pci_read_config_byte(dev, MRDMODE, ®71);
|
||||
(void) pci_read_config_byte(dev, BMIDESR0, ®72);
|
||||
(void) pci_read_config_byte(dev, UDIDETCR0, ®73);
|
||||
(void) pci_read_config_byte(dev, BMIDESR1, ®7a);
|
||||
(void) pci_read_config_byte(dev, UDIDETCR1, ®7b);
|
||||
|
||||
p += sprintf(p, "--------------- Primary Channel "
|
||||
"---------------- Secondary Channel "
|
||||
"-------------\n");
|
||||
p += sprintf(p, " %sabled "
|
||||
" %sabled\n",
|
||||
(reg72&0x80)?"dis":" en",
|
||||
(reg7a&0x80)?"dis":" en");
|
||||
p += sprintf(p, "--------------- drive0 "
|
||||
"--------- drive1 -------- drive0 "
|
||||
"---------- drive1 ------\n");
|
||||
p += sprintf(p, "DMA enabled: %s %s"
|
||||
" %s %s\n",
|
||||
(reg72&0x20)?"yes":"no ", (reg72&0x40)?"yes":"no ",
|
||||
(reg7a&0x20)?"yes":"no ", (reg7a&0x40)?"yes":"no ");
|
||||
|
||||
p += sprintf(p, "DMA Mode: %s(%s) %s(%s)",
|
||||
(reg72&0x20)?((reg73&0x01)?"UDMA":" DMA"):" PIO",
|
||||
(reg72&0x20)?(
|
||||
((reg73&0x30)==0x30)?(((reg73&0x35)==0x35)?"3":"0"):
|
||||
((reg73&0x20)==0x20)?(((reg73&0x25)==0x25)?"3":"1"):
|
||||
((reg73&0x10)==0x10)?(((reg73&0x15)==0x15)?"4":"2"):
|
||||
((reg73&0x00)==0x00)?(((reg73&0x05)==0x05)?"5":"2"):
|
||||
"X"):"?",
|
||||
(reg72&0x40)?((reg73&0x02)?"UDMA":" DMA"):" PIO",
|
||||
(reg72&0x40)?(
|
||||
((reg73&0xC0)==0xC0)?(((reg73&0xC5)==0xC5)?"3":"0"):
|
||||
((reg73&0x80)==0x80)?(((reg73&0x85)==0x85)?"3":"1"):
|
||||
((reg73&0x40)==0x40)?(((reg73&0x4A)==0x4A)?"4":"2"):
|
||||
((reg73&0x00)==0x00)?(((reg73&0x0A)==0x0A)?"5":"2"):
|
||||
"X"):"?");
|
||||
p += sprintf(p, " %s(%s) %s(%s)\n",
|
||||
(reg7a&0x20)?((reg7b&0x01)?"UDMA":" DMA"):" PIO",
|
||||
(reg7a&0x20)?(
|
||||
((reg7b&0x30)==0x30)?(((reg7b&0x35)==0x35)?"3":"0"):
|
||||
((reg7b&0x20)==0x20)?(((reg7b&0x25)==0x25)?"3":"1"):
|
||||
((reg7b&0x10)==0x10)?(((reg7b&0x15)==0x15)?"4":"2"):
|
||||
((reg7b&0x00)==0x00)?(((reg7b&0x05)==0x05)?"5":"2"):
|
||||
"X"):"?",
|
||||
(reg7a&0x40)?((reg7b&0x02)?"UDMA":" DMA"):" PIO",
|
||||
(reg7a&0x40)?(
|
||||
((reg7b&0xC0)==0xC0)?(((reg7b&0xC5)==0xC5)?"3":"0"):
|
||||
((reg7b&0x80)==0x80)?(((reg7b&0x85)==0x85)?"3":"1"):
|
||||
((reg7b&0x40)==0x40)?(((reg7b&0x4A)==0x4A)?"4":"2"):
|
||||
((reg7b&0x00)==0x00)?(((reg7b&0x0A)==0x0A)?"5":"2"):
|
||||
"X"):"?" );
|
||||
p += sprintf(p, "PIO Mode: %s %s"
|
||||
" %s %s\n",
|
||||
"?", "?", "?", "?");
|
||||
p += sprintf(p, " %s %s\n",
|
||||
(reg50 & CFR_INTR_CH0) ? "interrupting" : "polling ",
|
||||
(reg57 & ARTTIM23_INTR_CH1) ? "interrupting" : "polling");
|
||||
p += sprintf(p, " %s %s\n",
|
||||
(reg71 & MRDMODE_INTR_CH0) ? "pending" : "clear ",
|
||||
(reg71 & MRDMODE_INTR_CH1) ? "pending" : "clear");
|
||||
p += sprintf(p, " %s %s\n",
|
||||
(reg71 & MRDMODE_BLK_CH0) ? "blocked" : "enabled",
|
||||
(reg71 & MRDMODE_BLK_CH1) ? "blocked" : "enabled");
|
||||
|
||||
return (char *)p;
|
||||
}
|
||||
|
||||
static int cmd64x_get_info (char *buffer, char **addr, off_t offset, int count)
|
||||
{
|
||||
char *p = buffer;
|
||||
int i;
|
||||
|
||||
p += sprintf(p, "\n");
|
||||
for (i = 0; i < n_cmd_devs; i++) {
|
||||
struct pci_dev *dev = cmd_devs[i];
|
||||
p = print_cmd64x_get_info(p, dev, i);
|
||||
}
|
||||
return p-buffer; /* => must be less than 4k! */
|
||||
}
|
||||
|
||||
#endif /* defined(DISPLAY_CMD64X_TIMINGS) && defined(CONFIG_PROC_FS) */
|
||||
|
||||
/*
|
||||
* Registers and masks for easy access by drive index:
|
||||
*/
|
||||
#if 0
|
||||
static u8 prefetch_regs[4] = {CNTRL, CNTRL, ARTTIM23, ARTTIM23};
|
||||
static u8 prefetch_masks[4] = {CNTRL_DIS_RA0, CNTRL_DIS_RA1, ARTTIM23_DIS_RA2, ARTTIM23_DIS_RA3};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This routine writes the prepared setup/active/recovery counts
|
||||
* for a drive into the cmd646 chipset registers to active them.
|
||||
*/
|
||||
static void program_drive_counts (ide_drive_t *drive, int setup_count, int active_count, int recovery_count)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct pci_dev *dev = HWIF(drive)->pci_dev;
|
||||
ide_drive_t *drives = HWIF(drive)->drives;
|
||||
u8 temp_b;
|
||||
static const u8 setup_counts[] = {0x40, 0x40, 0x40, 0x80, 0, 0xc0};
|
||||
static const u8 recovery_counts[] =
|
||||
{15, 15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0};
|
||||
static const u8 arttim_regs[2][2] = {
|
||||
{ ARTTIM0, ARTTIM1 },
|
||||
{ ARTTIM23, ARTTIM23 }
|
||||
};
|
||||
static const u8 drwtim_regs[2][2] = {
|
||||
{ DRWTIM0, DRWTIM1 },
|
||||
{ DRWTIM2, DRWTIM3 }
|
||||
};
|
||||
int channel = (int) HWIF(drive)->channel;
|
||||
int slave = (drives != drive); /* Is this really the best way to determine this?? */
|
||||
|
||||
cmdprintk("program_drive_count parameters = s(%d),a(%d),r(%d),p(%d)\n",
|
||||
setup_count, active_count, recovery_count, drive->present);
|
||||
/*
|
||||
* Set up address setup count registers.
|
||||
* Primary interface has individual count/timing registers for
|
||||
* each drive. Secondary interface has one common set of registers,
|
||||
* for address setup so we merge these timings, using the slowest
|
||||
* value.
|
||||
*/
|
||||
if (channel) {
|
||||
drive->drive_data = setup_count;
|
||||
setup_count = max(drives[0].drive_data,
|
||||
drives[1].drive_data);
|
||||
cmdprintk("Secondary interface, setup_count = %d\n",
|
||||
setup_count);
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert values to internal chipset representation
|
||||
*/
|
||||
setup_count = (setup_count > 5) ? 0xc0 : (int) setup_counts[setup_count];
|
||||
active_count &= 0xf; /* Remember, max value is 16 */
|
||||
recovery_count = (int) recovery_counts[recovery_count];
|
||||
|
||||
cmdprintk("Final values = %d,%d,%d\n",
|
||||
setup_count, active_count, recovery_count);
|
||||
|
||||
/*
|
||||
* Now that everything is ready, program the new timings
|
||||
*/
|
||||
local_irq_save(flags);
|
||||
/*
|
||||
* Program the address_setup clocks into ARTTIM reg,
|
||||
* and then the active/recovery counts into the DRWTIM reg
|
||||
*/
|
||||
(void) pci_read_config_byte(dev, arttim_regs[channel][slave], &temp_b);
|
||||
(void) pci_write_config_byte(dev, arttim_regs[channel][slave],
|
||||
((u8) setup_count) | (temp_b & 0x3f));
|
||||
(void) pci_write_config_byte(dev, drwtim_regs[channel][slave],
|
||||
(u8) ((active_count << 4) | recovery_count));
|
||||
cmdprintk ("Write %x to %x\n",
|
||||
((u8) setup_count) | (temp_b & 0x3f),
|
||||
arttim_regs[channel][slave]);
|
||||
cmdprintk ("Write %x to %x\n",
|
||||
(u8) ((active_count << 4) | recovery_count),
|
||||
drwtim_regs[channel][slave]);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Attempts to set the interface PIO mode.
|
||||
* The preferred method of selecting PIO modes (e.g. mode 4) is
|
||||
* "echo 'piomode:4' > /proc/ide/hdx/settings". Special cases are
|
||||
* 8: prefetch off, 9: prefetch on, 255: auto-select best mode.
|
||||
* Called with 255 at boot time.
|
||||
*/
|
||||
|
||||
static void cmd64x_tuneproc (ide_drive_t *drive, u8 mode_wanted)
|
||||
{
|
||||
int setup_time, active_time, recovery_time;
|
||||
int clock_time, pio_mode, cycle_time;
|
||||
u8 recovery_count2, cycle_count;
|
||||
int setup_count, active_count, recovery_count;
|
||||
int bus_speed = system_bus_clock();
|
||||
/*byte b;*/
|
||||
ide_pio_data_t d;
|
||||
|
||||
switch (mode_wanted) {
|
||||
case 8: /* set prefetch off */
|
||||
case 9: /* set prefetch on */
|
||||
mode_wanted &= 1;
|
||||
/*set_prefetch_mode(index, mode_wanted);*/
|
||||
cmdprintk("%s: %sabled cmd640 prefetch\n",
|
||||
drive->name, mode_wanted ? "en" : "dis");
|
||||
return;
|
||||
}
|
||||
|
||||
mode_wanted = ide_get_best_pio_mode (drive, mode_wanted, 5, &d);
|
||||
pio_mode = d.pio_mode;
|
||||
cycle_time = d.cycle_time;
|
||||
|
||||
/*
|
||||
* I copied all this complicated stuff from cmd640.c and made a few
|
||||
* minor changes. For now I am just going to pray that it is correct.
|
||||
*/
|
||||
if (pio_mode > 5)
|
||||
pio_mode = 5;
|
||||
setup_time = ide_pio_timings[pio_mode].setup_time;
|
||||
active_time = ide_pio_timings[pio_mode].active_time;
|
||||
recovery_time = cycle_time - (setup_time + active_time);
|
||||
clock_time = 1000 / bus_speed;
|
||||
cycle_count = (cycle_time + clock_time - 1) / clock_time;
|
||||
|
||||
setup_count = (setup_time + clock_time - 1) / clock_time;
|
||||
|
||||
active_count = (active_time + clock_time - 1) / clock_time;
|
||||
|
||||
recovery_count = (recovery_time + clock_time - 1) / clock_time;
|
||||
recovery_count2 = cycle_count - (setup_count + active_count);
|
||||
if (recovery_count2 > recovery_count)
|
||||
recovery_count = recovery_count2;
|
||||
if (recovery_count > 16) {
|
||||
active_count += recovery_count - 16;
|
||||
recovery_count = 16;
|
||||
}
|
||||
if (active_count > 16)
|
||||
active_count = 16; /* maximum allowed by cmd646 */
|
||||
|
||||
/*
|
||||
* In a perfect world, we might set the drive pio mode here
|
||||
* (using WIN_SETFEATURE) before continuing.
|
||||
*
|
||||
* But we do not, because:
|
||||
* 1) this is the wrong place to do it
|
||||
* (proper is do_special() in ide.c)
|
||||
* 2) in practice this is rarely, if ever, necessary
|
||||
*/
|
||||
program_drive_counts (drive, setup_count, active_count, recovery_count);
|
||||
|
||||
cmdprintk("%s: selected cmd646 PIO mode%d : %d (%dns)%s, "
|
||||
"clocks=%d/%d/%d\n",
|
||||
drive->name, pio_mode, mode_wanted, cycle_time,
|
||||
d.overridden ? " (overriding vendor mode)" : "",
|
||||
setup_count, active_count, recovery_count);
|
||||
}
|
||||
|
||||
static u8 cmd64x_ratemask (ide_drive_t *drive)
|
||||
{
|
||||
struct pci_dev *dev = HWIF(drive)->pci_dev;
|
||||
u8 mode = 0;
|
||||
|
||||
switch(dev->device) {
|
||||
case PCI_DEVICE_ID_CMD_649:
|
||||
mode = 3;
|
||||
break;
|
||||
case PCI_DEVICE_ID_CMD_648:
|
||||
mode = 2;
|
||||
break;
|
||||
case PCI_DEVICE_ID_CMD_643:
|
||||
return 0;
|
||||
|
||||
case PCI_DEVICE_ID_CMD_646:
|
||||
{
|
||||
unsigned int class_rev = 0;
|
||||
pci_read_config_dword(dev,
|
||||
PCI_CLASS_REVISION, &class_rev);
|
||||
class_rev &= 0xff;
|
||||
/*
|
||||
* UltraDMA only supported on PCI646U and PCI646U2, which
|
||||
* correspond to revisions 0x03, 0x05 and 0x07 respectively.
|
||||
* Actually, although the CMD tech support people won't
|
||||
* tell me the details, the 0x03 revision cannot support
|
||||
* UDMA correctly without hardware modifications, and even
|
||||
* then it only works with Quantum disks due to some
|
||||
* hold time assumptions in the 646U part which are fixed
|
||||
* in the 646U2.
|
||||
*
|
||||
* So we only do UltraDMA on revision 0x05 and 0x07 chipsets.
|
||||
*/
|
||||
switch(class_rev) {
|
||||
case 0x07:
|
||||
case 0x05:
|
||||
return 1;
|
||||
case 0x03:
|
||||
case 0x01:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!eighty_ninty_three(drive))
|
||||
mode = min(mode, (u8)1);
|
||||
return mode;
|
||||
}
|
||||
|
||||
static void config_cmd64x_chipset_for_pio (ide_drive_t *drive, u8 set_speed)
|
||||
{
|
||||
u8 speed = 0x00;
|
||||
u8 set_pio = ide_get_best_pio_mode(drive, 4, 5, NULL);
|
||||
|
||||
cmd64x_tuneproc(drive, set_pio);
|
||||
speed = XFER_PIO_0 + set_pio;
|
||||
if (set_speed)
|
||||
(void) ide_config_drive_speed(drive, speed);
|
||||
}
|
||||
|
||||
static void config_chipset_for_pio (ide_drive_t *drive, u8 set_speed)
|
||||
{
|
||||
config_cmd64x_chipset_for_pio(drive, set_speed);
|
||||
}
|
||||
|
||||
static int cmd64x_tune_chipset (ide_drive_t *drive, u8 xferspeed)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
|
||||
u8 unit = (drive->select.b.unit & 0x01);
|
||||
u8 regU = 0, pciU = (hwif->channel) ? UDIDETCR1 : UDIDETCR0;
|
||||
u8 regD = 0, pciD = (hwif->channel) ? BMIDESR1 : BMIDESR0;
|
||||
|
||||
u8 speed = ide_rate_filter(cmd64x_ratemask(drive), xferspeed);
|
||||
|
||||
if (speed > XFER_PIO_4) {
|
||||
(void) pci_read_config_byte(dev, pciD, ®D);
|
||||
(void) pci_read_config_byte(dev, pciU, ®U);
|
||||
regD &= ~(unit ? 0x40 : 0x20);
|
||||
regU &= ~(unit ? 0xCA : 0x35);
|
||||
(void) pci_write_config_byte(dev, pciD, regD);
|
||||
(void) pci_write_config_byte(dev, pciU, regU);
|
||||
(void) pci_read_config_byte(dev, pciD, ®D);
|
||||
(void) pci_read_config_byte(dev, pciU, ®U);
|
||||
}
|
||||
|
||||
switch(speed) {
|
||||
case XFER_UDMA_5: regU |= (unit ? 0x0A : 0x05); break;
|
||||
case XFER_UDMA_4: regU |= (unit ? 0x4A : 0x15); break;
|
||||
case XFER_UDMA_3: regU |= (unit ? 0x8A : 0x25); break;
|
||||
case XFER_UDMA_2: regU |= (unit ? 0x42 : 0x11); break;
|
||||
case XFER_UDMA_1: regU |= (unit ? 0x82 : 0x21); break;
|
||||
case XFER_UDMA_0: regU |= (unit ? 0xC2 : 0x31); break;
|
||||
case XFER_MW_DMA_2: regD |= (unit ? 0x40 : 0x10); break;
|
||||
case XFER_MW_DMA_1: regD |= (unit ? 0x80 : 0x20); break;
|
||||
case XFER_MW_DMA_0: regD |= (unit ? 0xC0 : 0x30); break;
|
||||
case XFER_SW_DMA_2: regD |= (unit ? 0x40 : 0x10); break;
|
||||
case XFER_SW_DMA_1: regD |= (unit ? 0x80 : 0x20); break;
|
||||
case XFER_SW_DMA_0: regD |= (unit ? 0xC0 : 0x30); break;
|
||||
case XFER_PIO_4: cmd64x_tuneproc(drive, 4); break;
|
||||
case XFER_PIO_3: cmd64x_tuneproc(drive, 3); break;
|
||||
case XFER_PIO_2: cmd64x_tuneproc(drive, 2); break;
|
||||
case XFER_PIO_1: cmd64x_tuneproc(drive, 1); break;
|
||||
case XFER_PIO_0: cmd64x_tuneproc(drive, 0); break;
|
||||
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (speed > XFER_PIO_4) {
|
||||
(void) pci_write_config_byte(dev, pciU, regU);
|
||||
regD |= (unit ? 0x40 : 0x20);
|
||||
(void) pci_write_config_byte(dev, pciD, regD);
|
||||
}
|
||||
|
||||
return (ide_config_drive_speed(drive, speed));
|
||||
}
|
||||
|
||||
static int config_chipset_for_dma (ide_drive_t *drive)
|
||||
{
|
||||
u8 speed = ide_dma_speed(drive, cmd64x_ratemask(drive));
|
||||
|
||||
config_chipset_for_pio(drive, !speed);
|
||||
|
||||
if (!speed)
|
||||
return 0;
|
||||
|
||||
if(ide_set_xfer_rate(drive, speed))
|
||||
return 0;
|
||||
|
||||
if (!drive->init_speed)
|
||||
drive->init_speed = speed;
|
||||
|
||||
return ide_dma_enable(drive);
|
||||
}
|
||||
|
||||
static int cmd64x_config_drive_for_dma (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct hd_driveid *id = drive->id;
|
||||
|
||||
if ((id != NULL) && ((id->capability & 1) != 0) && drive->autodma) {
|
||||
|
||||
if (ide_use_dma(drive)) {
|
||||
if (config_chipset_for_dma(drive))
|
||||
return hwif->ide_dma_on(drive);
|
||||
}
|
||||
|
||||
goto fast_ata_pio;
|
||||
|
||||
} else if ((id->capability & 8) || (id->field_valid & 2)) {
|
||||
fast_ata_pio:
|
||||
config_chipset_for_pio(drive, 1);
|
||||
return hwif->ide_dma_off_quietly(drive);
|
||||
}
|
||||
/* IORDY not supported */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd64x_alt_dma_status (struct pci_dev *dev)
|
||||
{
|
||||
switch(dev->device) {
|
||||
case PCI_DEVICE_ID_CMD_648:
|
||||
case PCI_DEVICE_ID_CMD_649:
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd64x_ide_dma_end (ide_drive_t *drive)
|
||||
{
|
||||
u8 dma_stat = 0, dma_cmd = 0;
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
|
||||
drive->waiting_for_dma = 0;
|
||||
/* read DMA command state */
|
||||
dma_cmd = hwif->INB(hwif->dma_command);
|
||||
/* stop DMA */
|
||||
hwif->OUTB((dma_cmd & ~1), hwif->dma_command);
|
||||
/* get DMA status */
|
||||
dma_stat = hwif->INB(hwif->dma_status);
|
||||
/* clear the INTR & ERROR bits */
|
||||
hwif->OUTB(dma_stat|6, hwif->dma_status);
|
||||
if (cmd64x_alt_dma_status(dev)) {
|
||||
u8 dma_intr = 0;
|
||||
u8 dma_mask = (hwif->channel) ? ARTTIM23_INTR_CH1 :
|
||||
CFR_INTR_CH0;
|
||||
u8 dma_reg = (hwif->channel) ? ARTTIM2 : CFR;
|
||||
(void) pci_read_config_byte(dev, dma_reg, &dma_intr);
|
||||
/* clear the INTR bit */
|
||||
(void) pci_write_config_byte(dev, dma_reg, dma_intr|dma_mask);
|
||||
}
|
||||
/* purge DMA mappings */
|
||||
ide_destroy_dmatable(drive);
|
||||
/* verify good DMA status */
|
||||
return (dma_stat & 7) != 4;
|
||||
}
|
||||
|
||||
static int cmd64x_ide_dma_test_irq (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
u8 dma_alt_stat = 0, mask = (hwif->channel) ? MRDMODE_INTR_CH1 :
|
||||
MRDMODE_INTR_CH0;
|
||||
u8 dma_stat = hwif->INB(hwif->dma_status);
|
||||
|
||||
(void) pci_read_config_byte(dev, MRDMODE, &dma_alt_stat);
|
||||
#ifdef DEBUG
|
||||
printk("%s: dma_stat: 0x%02x dma_alt_stat: "
|
||||
"0x%02x mask: 0x%02x\n", drive->name,
|
||||
dma_stat, dma_alt_stat, mask);
|
||||
#endif
|
||||
if (!(dma_alt_stat & mask))
|
||||
return 0;
|
||||
|
||||
/* return 1 if INTR asserted */
|
||||
if ((dma_stat & 4) == 4)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* ASUS P55T2P4D with CMD646 chipset revision 0x01 requires the old
|
||||
* event order for DMA transfers.
|
||||
*/
|
||||
|
||||
static int cmd646_1_ide_dma_end (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = HWIF(drive);
|
||||
u8 dma_stat = 0, dma_cmd = 0;
|
||||
|
||||
drive->waiting_for_dma = 0;
|
||||
/* get DMA status */
|
||||
dma_stat = hwif->INB(hwif->dma_status);
|
||||
/* read DMA command state */
|
||||
dma_cmd = hwif->INB(hwif->dma_command);
|
||||
/* stop DMA */
|
||||
hwif->OUTB((dma_cmd & ~1), hwif->dma_command);
|
||||
/* clear the INTR & ERROR bits */
|
||||
hwif->OUTB(dma_stat|6, hwif->dma_status);
|
||||
/* and free any DMA resources */
|
||||
ide_destroy_dmatable(drive);
|
||||
/* verify good DMA status */
|
||||
return (dma_stat & 7) != 4;
|
||||
}
|
||||
|
||||
static unsigned int __devinit init_chipset_cmd64x(struct pci_dev *dev, const char *name)
|
||||
{
|
||||
u32 class_rev = 0;
|
||||
u8 mrdmode = 0;
|
||||
|
||||
pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);
|
||||
class_rev &= 0xff;
|
||||
|
||||
#ifdef __i386__
|
||||
if (dev->resource[PCI_ROM_RESOURCE].start) {
|
||||
pci_write_config_byte(dev, PCI_ROM_ADDRESS, dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
|
||||
printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name, dev->resource[PCI_ROM_RESOURCE].start);
|
||||
}
|
||||
#endif
|
||||
|
||||
switch(dev->device) {
|
||||
case PCI_DEVICE_ID_CMD_643:
|
||||
break;
|
||||
case PCI_DEVICE_ID_CMD_646:
|
||||
printk(KERN_INFO "%s: chipset revision 0x%02X, ", name, class_rev);
|
||||
switch(class_rev) {
|
||||
case 0x07:
|
||||
case 0x05:
|
||||
printk("UltraDMA Capable");
|
||||
break;
|
||||
case 0x03:
|
||||
printk("MultiWord DMA Force Limited");
|
||||
break;
|
||||
case 0x01:
|
||||
default:
|
||||
printk("MultiWord DMA Limited, IRQ workaround enabled");
|
||||
break;
|
||||
}
|
||||
printk("\n");
|
||||
break;
|
||||
case PCI_DEVICE_ID_CMD_648:
|
||||
case PCI_DEVICE_ID_CMD_649:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Set a good latency timer and cache line size value. */
|
||||
(void) pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);
|
||||
/* FIXME: pci_set_master() to ensure a good latency timer value */
|
||||
|
||||
/* Setup interrupts. */
|
||||
(void) pci_read_config_byte(dev, MRDMODE, &mrdmode);
|
||||
mrdmode &= ~(0x30);
|
||||
(void) pci_write_config_byte(dev, MRDMODE, mrdmode);
|
||||
|
||||
/* Use MEMORY READ LINE for reads.
|
||||
* NOTE: Although not mentioned in the PCI0646U specs,
|
||||
* these bits are write only and won't be read
|
||||
* back as set or not. The PCI0646U2 specs clarify
|
||||
* this point.
|
||||
*/
|
||||
(void) pci_write_config_byte(dev, MRDMODE, mrdmode | 0x02);
|
||||
|
||||
/* Set reasonable active/recovery/address-setup values. */
|
||||
(void) pci_write_config_byte(dev, ARTTIM0, 0x40);
|
||||
(void) pci_write_config_byte(dev, DRWTIM0, 0x3f);
|
||||
(void) pci_write_config_byte(dev, ARTTIM1, 0x40);
|
||||
(void) pci_write_config_byte(dev, DRWTIM1, 0x3f);
|
||||
#ifdef __i386__
|
||||
(void) pci_write_config_byte(dev, ARTTIM23, 0x1c);
|
||||
#else
|
||||
(void) pci_write_config_byte(dev, ARTTIM23, 0x5c);
|
||||
#endif
|
||||
(void) pci_write_config_byte(dev, DRWTIM23, 0x3f);
|
||||
(void) pci_write_config_byte(dev, DRWTIM3, 0x3f);
|
||||
#ifdef CONFIG_PPC
|
||||
(void) pci_write_config_byte(dev, UDIDETCR0, 0xf0);
|
||||
#endif /* CONFIG_PPC */
|
||||
|
||||
#if defined(DISPLAY_CMD64X_TIMINGS) && defined(CONFIG_PROC_FS)
|
||||
|
||||
cmd_devs[n_cmd_devs++] = dev;
|
||||
|
||||
if (!cmd64x_proc) {
|
||||
cmd64x_proc = 1;
|
||||
ide_pci_create_host_proc("cmd64x", cmd64x_get_info);
|
||||
}
|
||||
#endif /* DISPLAY_CMD64X_TIMINGS && CONFIG_PROC_FS */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int __devinit ata66_cmd64x(ide_hwif_t *hwif)
|
||||
{
|
||||
u8 ata66 = 0, mask = (hwif->channel) ? 0x02 : 0x01;
|
||||
|
||||
switch(hwif->pci_dev->device) {
|
||||
case PCI_DEVICE_ID_CMD_643:
|
||||
case PCI_DEVICE_ID_CMD_646:
|
||||
return ata66;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
pci_read_config_byte(hwif->pci_dev, BMIDECSR, &ata66);
|
||||
return (ata66 & mask) ? 1 : 0;
|
||||
}
|
||||
|
||||
static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif)
|
||||
{
|
||||
struct pci_dev *dev = hwif->pci_dev;
|
||||
unsigned int class_rev;
|
||||
|
||||
hwif->autodma = 0;
|
||||
pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);
|
||||
class_rev &= 0xff;
|
||||
|
||||
hwif->tuneproc = &cmd64x_tuneproc;
|
||||
hwif->speedproc = &cmd64x_tune_chipset;
|
||||
|
||||
if (!hwif->dma_base) {
|
||||
hwif->drives[0].autotune = 1;
|
||||
hwif->drives[1].autotune = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
hwif->atapi_dma = 1;
|
||||
|
||||
hwif->ultra_mask = 0x3f;
|
||||
hwif->mwdma_mask = 0x07;
|
||||
hwif->swdma_mask = 0x07;
|
||||
|
||||
if (dev->device == PCI_DEVICE_ID_CMD_643)
|
||||
hwif->ultra_mask = 0x80;
|
||||
if (dev->device == PCI_DEVICE_ID_CMD_646)
|
||||
hwif->ultra_mask = (class_rev > 0x04) ? 0x07 : 0x80;
|
||||
if (dev->device == PCI_DEVICE_ID_CMD_648)
|
||||
hwif->ultra_mask = 0x1f;
|
||||
|
||||
hwif->ide_dma_check = &cmd64x_config_drive_for_dma;
|
||||
if (!(hwif->udma_four))
|
||||
hwif->udma_four = ata66_cmd64x(hwif);
|
||||
|
||||
if (dev->device == PCI_DEVICE_ID_CMD_646) {
|
||||
hwif->chipset = ide_cmd646;
|
||||
if (class_rev == 0x01) {
|
||||
hwif->ide_dma_end = &cmd646_1_ide_dma_end;
|
||||
} else {
|
||||
hwif->ide_dma_end = &cmd64x_ide_dma_end;
|
||||
hwif->ide_dma_test_irq = &cmd64x_ide_dma_test_irq;
|
||||
}
|
||||
} else {
|
||||
hwif->ide_dma_end = &cmd64x_ide_dma_end;
|
||||
hwif->ide_dma_test_irq = &cmd64x_ide_dma_test_irq;
|
||||
}
|
||||
|
||||
|
||||
if (!noautodma)
|
||||
hwif->autodma = 1;
|
||||
hwif->drives[0].autodma = hwif->autodma;
|
||||
hwif->drives[1].autodma = hwif->autodma;
|
||||
}
|
||||
|
||||
static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
{
|
||||
ide_setup_pci_device(dev, &cmd64x_chipsets[id->driver_data]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct pci_device_id cmd64x_pci_tbl[] = {
|
||||
{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_643, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
||||
{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_646, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
|
||||
{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
|
||||
{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_649, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},
|
||||
{ 0, },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, cmd64x_pci_tbl);
|
||||
|
||||
static struct pci_driver driver = {
|
||||
.name = "CMD64x_IDE",
|
||||
.id_table = cmd64x_pci_tbl,
|
||||
.probe = cmd64x_init_one,
|
||||
};
|
||||
|
||||
static int cmd64x_ide_init(void)
|
||||
{
|
||||
return ide_pci_register_driver(&driver);
|
||||
}
|
||||
|
||||
module_init(cmd64x_ide_init);
|
||||
|
||||
MODULE_AUTHOR("Eddie Dost, David Miller, Andre Hedrick");
|
||||
MODULE_DESCRIPTION("PCI driver module for CMD64x IDE");
|
||||
MODULE_LICENSE("GPL");
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user