提交 d916faac 编写于 作者: J Jeff Garzik

Remove long-unmaintained ftape driver subsystem.

It's bitrotten, long unmaintained, long hidden under BROKEN_ON_SMP,
etc.  As scheduled in feature-removal-schedule.txt, and ack'd several
times on lkml.
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 2b5f6dcc
......@@ -104,8 +104,6 @@ firmware_class/
- request_firmware() hotplug interface info.
floppy.txt
- notes and driver options for the floppy disk driver.
ftape.txt
- notes about the floppy tape device driver.
hayes-esp.txt
- info on using the Hayes ESP serial driver.
highuid.txt
......
......@@ -234,14 +234,6 @@ Who: Jean Delvare <khali@linux-fr.org>
---------------------------
What: ftape
When: 2.6.20
Why: Orphaned for ages. SMP bugs long unfixed. Few users left
in the world.
Who: Jeff Garzik <jeff@garzik.org>
---------------------------
What: IPv4 only connection tracking/NAT/helpers
When: 2.6.22
Why: The new layer 3 independant connection tracking replaces the old
......
Intro
=====
This file describes some issues involved when using the "ftape"
floppy tape device driver that comes with the Linux kernel.
ftape has a home page at
http://ftape.dot-heine.de/
which contains further information about ftape. Please cross check
this WWW address against the address given (if any) in the MAINTAINERS
file located in the top level directory of the Linux kernel source
tree.
NOTE: This is an unmaintained set of drivers, and it is not guaranteed to work.
If you are interested in taking over maintenance, contact Claus-Justus Heine
<ch@dot-heine.de>, the former maintainer.
Contents
========
A minus 1: Ftape documentation
A. Changes
1. Goal
2. I/O Block Size
3. Write Access when not at EOD (End Of Data) or BOT (Begin Of Tape)
4. Formatting
5. Interchanging cartridges with other operating systems
B. Debugging Output
1. Introduction
2. Tuning the debugging output
C. Boot and load time configuration
1. Setting boot time parameters
2. Module load time parameters
3. Ftape boot- and load time options
4. Example kernel parameter setting
5. Example module parameter setting
D. Support and contacts
*******************************************************************************
A minus 1. Ftape documentation
==============================
Unluckily, the ftape-HOWTO is out of date. This really needs to be
changed. Up to date documentation as well as recent development
versions of ftape and useful links to related topics can be found at
the ftape home page at
http://ftape.dot-heine.de/
*******************************************************************************
A. Changes
==========
1. Goal
~~~~
The goal of all that incompatibilities was to give ftape an interface
that resembles the interface provided by SCSI tape drives as close
as possible. Thus any Unix backup program that is known to work
with SCSI tape drives should also work.
The concept of a fixed block size for read/write transfers is
rather unrelated to this SCSI tape compatibility at the file system
interface level. It developed out of a feature of zftape, a
block wise user transparent on-the-fly compression. That compression
support will not be dropped in future releases for compatibility
reasons with previous releases of zftape.
2. I/O Block Size
~~~~~~~~~~~~~~
The block size defaults to 10k which is the default block size of
GNU tar.
The block size can be tuned either during kernel configuration or
at runtime with the MTIOCTOP ioctl using the MTSETBLK operation
(i.e. do "mt -f /dev/qft0" setblk #BLKSZ). A block size of 0
switches to variable block size mode i.e. "mt setblk 0" switches
off the block size restriction. However, this disables zftape's
built in on-the-fly compression which doesn't work with variable
block size mode.
The BLKSZ parameter must be given as a byte count and must be a
multiple of 32k or 0, i.e. use "mt setblk 32768" to switch to a
block size of 32k.
The typical symptom of a block size mismatch is an "invalid
argument" error message.
3. Write Access when not at EOD (End Of Data) or BOT (Begin Of Tape)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
zftape (the file system interface of ftape-3.x) denies write access
to the tape cartridge when it isn't positioned either at BOT or
EOD.
4. Formatting
~~~~~~~~~~
ftape DOES support formatting of floppy tape cartridges. You need the
`ftformat' program that is shipped with the modules version of ftape.
Please get the latest version of ftape from
ftp://sunsite.unc.edu/pub/Linux/kernel/tapes
or from the ftape home page at
http://ftape.dot-heine.de/
`ftformat' is contained in the `./contrib/' subdirectory of that
separate ftape package.
5. Interchanging cartridges with other operating systems
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The internal emulation of Unix tape device file marks has changed
completely. ftape now uses the volume table segment as specified
by the QIC-40/80/3010/3020/113 standards to emulate file marks. As
a consequence there is limited support to interchange cartridges
with other operating systems.
To be more precise: ftape will detect volumes written by other OS's
programs and other OS's programs will detect volumes written by
ftape.
However, it isn't possible to extract the data dumped to the tape
by some MSDOS program with ftape. This exceeds the scope of a
kernel device driver. If you need such functionality, then go ahead
and write a user space utility that is able to do that. ftape already
provides all kernel level support necessary to do that.
*******************************************************************************
B. Debugging Output
================
1. Introduction
~~~~~~~~~~~~
The ftape driver can be very noisy in that is can print lots of
debugging messages to the kernel log files and the system console.
While this is useful for debugging it might be annoying during
normal use and enlarges the size of the driver by several kilobytes.
To reduce the size of the driver you can trim the maximal amount of
debugging information available during kernel configuration. Please
refer to the kernel configuration script and its on-line help
functionality.
The amount of debugging output maps to the "tracing" boot time
option and the "ft_tracing" modules option as follows:
0 bugs
1 + errors (with call-stack dump)
2 + warnings
3 + information
4 + more information
5 + program flow
6 + fdc/dma info
7 + data flow
8 + everything else
2. Tuning the debugging output
~~~~~~~~~~~~~~~~~~~~~~~~~~~
To reduce the amount of debugging output printed to the system
console you can
i) trim the debugging output at run-time with
mt -f /dev/nqft0 setdensity #DBGLVL
where "#DBGLVL" is a number between 0 and 9
ii) trim the debugging output at module load time with
modprobe ftape ft_tracing=#DBGLVL
Of course, this applies only if you have configured ftape to be
compiled as a module.
iii) trim the debugging output during system boot time. Add the
following to the kernel command line:
ftape=#DBGLVL,tracing
Please refer also to the next section if you don't know how to
set boot time parameters.
*******************************************************************************
C. Boot and load time configuration
================================
1. Setting boot time parameters
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Assuming that you use lilo, the LI)nux LO)ader, boot time kernel
parameters can be set by adding a line
append some_kernel_boot_time_parameter
to `/etc/lilo.conf' or at real boot time by typing in the options
at the prompt provided by LILO. I can't give you advice on how to
specify those parameters with other loaders as I don't use them.
For ftape, each "some_kernel_boot_time_parameter" looks like
"ftape=value,option". As an example, the debugging output can be
increased with
ftape=4,tracing
NOTE: the value precedes the option name.
2. Module load time parameters
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Module parameters can be specified either directly when invoking
the program 'modprobe' at the shell prompt:
modprobe ftape ft_tracing=4
or by editing the file `/etc/modprobe.conf' in which case they take
effect each time when the module is loaded with `modprobe' (please
refer to the respective manual pages). Thus, you should add a line
options ftape ft_tracing=4
to `/etc/modprobe.conf` if you intend to increase the debugging
output of the driver.
3. Ftape boot- and load time options
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
i. Controlling the amount of debugging output
DBGLVL has to be replaced by a number between 0 and 8.
module | kernel command line
-----------------------|----------------------
ft_tracing=DBGLVL | ftape=DBGLVL,tracing
ii. Hardware setup
BASE is the base address of your floppy disk controller,
IRQ and DMA give its interrupt and DMA channel, respectively.
BOOL is an integer, "0" means "no"; any other value means
"yes". You don't need to specify anything if connecting your tape
drive to the standard floppy disk controller. All of these
values have reasonable defaults. The defaults can be modified
during kernel configuration, i.e. while running "make config",
"make menuconfig" or "make xconfig" in the top level directory
of the Linux kernel source tree. Please refer also to the on
line documentation provided during that kernel configuration
process.
ft_probe_fc10 is set to a non-zero value if you wish for ftape to
probe for a Colorado FC-10 or FC-20 controller.
ft_mach2 is set to a non-zero value if you wish for ftape to probe
for a Mountain MACH-2 controller.
module | kernel command line
-----------------------|----------------------
ft_fdc_base=BASE | ftape=BASE,ioport
ft_fdc_irq=IRQ | ftape=IRQ,irq
ft_fdc_dma=DMA | ftape=DMA,dma
ft_probe_fc10=BOOL | ftape=BOOL,fc10
ft_mach2=BOOL | ftape=BOOL,mach2
ft_fdc_threshold=THR | ftape=THR,threshold
ft_fdc_rate_limit=RATE | ftape=RATE,datarate
4. Example kernel parameter setting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To configure ftape to probe for a Colorado FC-10/FC-20 controller
and to increase the amount of debugging output a little bit, add
the following line to `/etc/lilo.conf':
append ftape=1,fc10 ftape=4,tracing
5. Example module parameter setting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To do the same, but with ftape compiled as a loadable kernel
module, add the following line to `/etc/modprobe.conf':
options ftape ft_probe_fc10=1 ft_tracing=4
*******************************************************************************
D. Support and contacts
====================
Ftape is distributed under the GNU General Public License. There is
absolutely no warranty for this software. However, you can reach
the current maintainer of the ftape package under the email address
given in the MAINTAINERS file which is located in the top level
directory of the Linux kernel source tree. There you'll find also
the relevant mailing list to use as a discussion forum and the web
page to query for the most recent documentation, related work and
development versions of ftape.
Changelog:
==========
~1996: Original Document
10-24-2004: General cleanup and updating, noting additional module options.
James Nelson <james4765@gmail.com>
......@@ -557,9 +557,6 @@ and is between 256 and 4096 characters. It is defined in the file
floppy= [HW]
See Documentation/floppy.txt.
ftape= [HW] Floppy Tape subsystem debugging options.
See Documentation/ftape.txt.
gamecon.map[2|3]=
[HW,JOY] Multisystem joystick and NES/SNES/PSX pad
support via parallel port (up to 5 devices per port)
......
......@@ -1166,11 +1166,6 @@ P: David Howells
M: dhowells@redhat.com
S: Maintained
FTAPE/QIC-117
L: linux-tape@vger.kernel.org
W: http://sourceforge.net/projects/ftape
S: Orphan
FUSE: FILESYSTEM IN USERSPACE
P: Miklos Szeredi
M: miklos@szeredi.hu
......
......@@ -855,39 +855,6 @@ config TANBAC_TB0219
depends TANBAC_TB022X
select GPIO_VR41XX
menu "Ftape, the floppy tape device driver"
config FTAPE
tristate "Ftape (QIC-80/Travan) support"
depends on BROKEN_ON_SMP && (ALPHA || X86)
---help---
If you have a tape drive that is connected to your floppy
controller, say Y here.
Some tape drives (like the Seagate "Tape Store 3200" or the Iomega
"Ditto 3200" or the Exabyte "Eagle TR-3") come with a "high speed"
controller of their own. These drives (and their companion
controllers) are also supported if you say Y here.
If you have a special controller (such as the CMS FC-10, FC-20,
Mountain Mach-II, or any controller that is based on the Intel 82078
FDC like the high speed controllers by Seagate and Exabyte and
Iomega's "Ditto Dash") you must configure it by selecting the
appropriate entries from the "Floppy tape controllers" sub-menu
below and possibly modify the default values for the IRQ and DMA
channel and the IO base in ftape's configuration menu.
If you want to use your floppy tape drive on a PCI-bus based system,
please read the file <file:drivers/char/ftape/README.PCI>.
The ftape kernel driver is also available as a runtime loadable
module. To compile this driver as a module, choose M here: the
module will be called ftape.
source "drivers/char/ftape/Kconfig"
endmenu
source "drivers/char/agp/Kconfig"
source "drivers/char/drm/Kconfig"
......
......@@ -78,7 +78,6 @@ obj-$(CONFIG_TOSHIBA) += toshiba.o
obj-$(CONFIG_I8K) += i8k.o
obj-$(CONFIG_DS1620) += ds1620.o
obj-$(CONFIG_HW_RANDOM) += hw_random/
obj-$(CONFIG_FTAPE) += ftape/
obj-$(CONFIG_COBALT_LCD) += lcd.o
obj-$(CONFIG_PPDEV) += ppdev.o
obj-$(CONFIG_NWBUTTON) += nwbutton.o
......
#
# Ftape configuration
#
config ZFTAPE
tristate "Zftape, the VFS interface"
depends on FTAPE
---help---
Normally, you want to say Y or M. DON'T say N here or you
WON'T BE ABLE TO USE YOUR FLOPPY TAPE DRIVE.
The ftape module itself no longer contains the routines necessary
to interface with the kernel VFS layer (i.e. to actually write data
to and read data from the tape drive). Instead the file system
interface (i.e. the hardware independent part of the driver) has
been moved to a separate module.
To compile this driver as a module, choose M here: the
module will be called zftape.
Regardless of whether you say Y or M here, an additional runtime
loadable module called `zft-compressor' which contains code to
support user transparent on-the-fly compression based on Ross
William's lzrw3 algorithm will be produced. If you have enabled the
kernel module loader (i.e. have said Y to "Kernel module loader
support", above) then `zft-compressor' will be loaded
automatically by zftape when needed.
Despite its name, zftape does NOT use compression by default.
config ZFT_DFLT_BLK_SZ
int "Default block size"
depends on ZFTAPE
default "10240"
---help---
If unsure leave this at its default value, i.e. 10240. Note that
you specify only the default block size here. The block size can be
changed at run time using the MTSETBLK tape operation with the
MTIOCTOP ioctl (i.e. with "mt -f /dev/qft0 setblk #BLKSZ" from the
shell command line).
The probably most striking difference between zftape and previous
versions of ftape is the fact that all data must be written or read
in multiples of a fixed block size. The block size defaults to
10240 which is what GNU tar uses. The values for the block size
should be either 1 or multiples of 1024 up to a maximum value of
63488 (i.e. 62 K). If you specify `1' then zftape's builtin
compression will be disabled.
Reasonable values are `10240' (GNU tar's default block size),
`5120' (afio's default block size), `32768' (default block size some
backup programs assume for SCSI tape drives) or `1' (no restriction
on block size, but disables builtin compression).
comment "The compressor will be built as a module only!"
depends on FTAPE && ZFTAPE
config ZFT_COMPRESSOR
tristate
depends on FTAPE!=n && ZFTAPE!=n
default m
config FT_NR_BUFFERS
int "Number of ftape buffers (EXPERIMENTAL)"
depends on FTAPE && EXPERIMENTAL
default "3"
help
Please leave this at `3' unless you REALLY know what you are doing.
It is not necessary to change this value. Values below 3 make the
proper use of ftape impossible, values greater than 3 are a waste of
memory. You can change the amount of DMA memory used by ftape at
runtime with "mt -f /dev/qft0 setdrvbuffer #NUMBUFFERS". Each buffer
wastes 32 KB of memory. Please note that this memory cannot be
swapped out.
config FT_PROC_FS
bool "Enable procfs status report (+2kb)"
depends on FTAPE && PROC_FS
---help---
Optional. Saying Y will result in creation of a directory
`/proc/ftape' under the /proc file system. The files can be viewed
with your favorite pager (i.e. use "more /proc/ftape/history" or
"less /proc/ftape/history" or simply "cat /proc/ftape/history"). The
file will contain some status information about the inserted
cartridge, the kernel driver, your tape drive, the floppy disk
controller and the error history for the most recent use of the
kernel driver. Saying Y will enlarge the size of the ftape driver
by approximately 2 KB.
WARNING: When compiling ftape as a module (i.e. saying M to "Floppy
tape drive") it is dangerous to use ftape's /proc file system
interface. Accessing `/proc/ftape' while the module is unloaded will
result in a kernel Oops. This cannot be fixed from inside ftape.
choice
prompt "Debugging output"
depends on FTAPE
default FT_NORMAL_DEBUG
config FT_NORMAL_DEBUG
bool "Normal"
---help---
This option controls the amount of debugging output the ftape driver
is ABLE to produce; it does not increase or diminish the debugging
level itself. If unsure, leave this at its default setting,
i.e. choose "Normal".
Ftape can print lots of debugging messages to the system console
resp. kernel log files. Reducing the amount of possible debugging
output reduces the size of the kernel module by some KB, so it might
be a good idea to use "None" for emergency boot floppies.
If you want to save memory then the following strategy is
recommended: leave this option at its default setting "Normal" until
you know that the driver works as expected, afterwards reconfigure
the kernel, this time specifying "Reduced" or "None" and recompile
and install the kernel as usual. Note that choosing "Excessive"
debugging output does not increase the amount of debugging output
printed to the console but only makes it possible to produce
"Excessive" debugging output.
Please read <file:Documentation/ftape.txt> for a short description
how to control the amount of debugging output.
config FT_FULL_DEBUG
bool "Excessive"
help
Extremely verbose output for driver debugging purposes.
config FT_NO_TRACE
bool "Reduced"
help
Reduced tape driver debugging output.
config FT_NO_TRACE_AT_ALL
bool "None"
help
Suppress all debugging output from the tape drive.
endchoice
comment "Hardware configuration"
depends on FTAPE
choice
prompt "Floppy tape controllers"
depends on FTAPE
default FT_STD_FDC
config FT_STD_FDC
bool "Standard"
---help---
Only change this setting if you have a special controller. If you
didn't plug any add-on card into your computer system but just
plugged the floppy tape cable into the already existing floppy drive
controller then you don't want to change the default setting,
i.e. choose "Standard".
Choose "MACH-2" if you have a Mountain Mach-2 controller.
Choose "FC-10/FC-20" if you have a Colorado FC-10 or FC-20
controller.
Choose "Alt/82078" if you have another controller that is located at
an IO base address different from the standard floppy drive
controller's base address of `0x3f0', or uses an IRQ (interrupt)
channel different from `6', or a DMA channel different from
`2'. This is necessary for any controller card that is based on
Intel's 82078 FDC such as Seagate's, Exabyte's and Iomega's "high
speed" controllers.
If you choose something other than "Standard" then please make
sure that the settings for the IO base address and the IRQ and DMA
channel in the configuration menus below are correct. Use the manual
of your tape drive to determine the correct settings!
If you are already successfully using your tape drive with another
operating system then you definitely should use the same settings
for the IO base, the IRQ and DMA channel that have proven to work
with that other OS.
Note that this menu lets you specify only the default setting for
the hardware setup. The hardware configuration can be changed at
boot time (when ftape is compiled into the kernel, i.e. if you
have said Y to "Floppy tape drive") or module load time (i.e. if you
have said M to "Floppy tape drive").
Please read also the file <file:Documentation/ftape.txt> which
contains a short description of the parameters that can be set at
boot or load time. If you want to use your floppy tape drive on a
PCI-bus based system, please read the file
<file:drivers/char/ftape/README.PCI>.
config FT_MACH2
bool "MACH-2"
config FT_PROBE_FC10
bool "FC-10/FC-20"
config FT_ALT_FDC
bool "Alt/82078"
endchoice
comment "Consult the manuals of your tape drive for the correct settings!"
depends on FTAPE && !FT_STD_FDC
config FT_FDC_BASE
hex "IO base of the floppy disk controller"
depends on FTAPE && !FT_STD_FDC
default "0"
---help---
You don't need to specify a value if the following default
settings for the base IO address are correct:
<<< MACH-2 : 0x1E0 >>>
<<< FC-10/FC-20: 0x180 >>>
<<< Secondary : 0x370 >>>
Secondary refers to a secondary FDC controller like the "high speed"
controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash.
Please make sure that the setting for the IO base address
specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR
CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already
successfully using the tape drive with another operating system then
you definitely should use the same settings for the IO base that has
proven to work with that other OS.
Note that this menu lets you specify only the default setting for
the IO base. The hardware configuration can be changed at boot time
(when ftape is compiled into the kernel, i.e. if you specified Y to
"Floppy tape drive") or module load time (i.e. if you have said M to
"Floppy tape drive").
Please read also the file <file:Documentation/ftape.txt> which
contains a short description of the parameters that can be set at
boot or load time.
config FT_FDC_IRQ
int "IRQ channel of the floppy disk controller"
depends on FTAPE && !FT_STD_FDC
default "0"
---help---
You don't need to specify a value if the following default
settings for the interrupt channel are correct:
<<< MACH-2 : 6 >>>
<<< FC-10/FC-20: 9 >>>
<<< Secondary : 6 >>>
Secondary refers to secondary a FDC controller like the "high speed"
controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash.
Please make sure that the setting for the IO base address
specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR
CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already
successfully using the tape drive with another operating system then
you definitely should use the same settings for the IO base that has
proven to work with that other OS.
Note that this menu lets you specify only the default setting for
the IRQ channel. The hardware configuration can be changed at boot
time (when ftape is compiled into the kernel, i.e. if you said Y to
"Floppy tape drive") or module load time (i.e. if you said M to
"Floppy tape drive").
Please read also the file <file:Documentation/ftape.txt> which
contains a short description of the parameters that can be set at
boot or load time.
config FT_FDC_DMA
int "DMA channel of the floppy disk controller"
depends on FTAPE && !FT_STD_FDC
default "0"
---help---
You don't need to specify a value if the following default
settings for the DMA channel are correct:
<<< MACH-2 : 2 >>>
<<< FC-10/FC-20: 3 >>>
<<< Secondary : 2 >>>
Secondary refers to a secondary FDC controller like the "high speed"
controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash.
Please make sure that the setting for the IO base address
specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR
CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already
successfully using the tape drive with another operating system then
you definitely should use the same settings for the IO base that has
proven to work with that other OS.
Note that this menu lets you specify only the default setting for
the DMA channel. The hardware configuration can be changed at boot
time (when ftape is compiled into the kernel, i.e. if you said Y to
"Floppy tape drive") or module load time (i.e. if you said M to
"Floppy tape drive").
Please read also the file <file:Documentation/ftape.txt> which
contains a short description of the parameters that can be set at
boot or load time.
config FT_FDC_THR
int "Default FIFO threshold (EXPERIMENTAL)"
depends on FTAPE && EXPERIMENTAL
default "8"
help
Set the FIFO threshold of the FDC. If this is higher the DMA
controller may serve the FDC after a higher latency time. If this is
lower, fewer DMA transfers occur leading to less bus contention.
You may try to tune this if ftape annoys you with "reduced data
rate because of excessive overrun errors" messages. However, this
doesn't seem to have too much effect.
If unsure, don't touch the initial value, i.e. leave it at "8".
config FT_FDC_MAX_RATE
int "Maximal data rate to use (EXPERIMENTAL)"
depends on FTAPE && EXPERIMENTAL
default "2000"
---help---
With some motherboard/FDC combinations ftape will not be able to
run your FDC/tape drive combination at the highest available
speed. If this is the case you'll encounter "reduced data rate
because of excessive overrun errors" messages and lots of retries
before ftape finally decides to reduce the data rate.
In this case it might be desirable to tell ftape beforehand that
it need not try to run the tape drive at the highest available
speed. If unsure, leave this disabled, i.e. leave it at 2000
bits/sec.
config FT_ALPHA_CLOCK
int "CPU clock frequency of your DEC Alpha" if ALPHA
depends on FTAPE
default "0"
help
On some DEC Alpha machines the CPU clock frequency cannot be
determined automatically, so you need to specify it here ONLY if
running a DEC Alpha, otherwise this setting has no effect.
#
# Copyright (C) 1997 Claus Heine.
#
# 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.
#
# 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; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#
# $Source: /homes/cvs/ftape-stacked/ftape/Makefile,v $
# $Revision: 1.4 $
# $Date: 1997/10/05 19:17:56 $
#
# Makefile for the QIC-40/80/3010/3020 floppy-tape driver for
# Linux.
#
obj-$(CONFIG_FTAPE) += lowlevel/
obj-$(CONFIG_ZFTAPE) += zftape/
obj-$(CONFIG_ZFT_COMPRESSOR) += compressor/
Some notes for ftape users with PCI motherboards:
=================================================
The problem:
------------
There have been some problem reports from people using PCI-bus based
systems getting overrun errors.
I wasn't able to reproduce these until I ran ftape on a Intel Plato
(Premiere PCI II) motherboard with bios version 1.00.08AX1.
It turned out that if GAT (Guaranteed Access Timing) is enabled (?)
ftape gets a lot of overrun errors.
The problem disappears when disabling GAT in the bios.
Note that Intel removed this setting (permanently disabled) from the
1.00.10AX1 bios !
It looks like that if GAT is enabled there are often large periods
(greater than 120 us !??) on the ISA bus that the DMA controller cannot
service the floppy disk controller.
I cannot imagine this being acceptable in a decent PCI implementation.
Maybe this is a `feature' of the chipset. I can only speculate why
Intel choose to remove the option from the latest Bios...
The lesson of this all is that there may be other motherboard
implementations having the same of similar problems.
If you experience a lot of overrun errors during a backup to tape,
see if there is some setting in the Bios that may influence the
bus timing.
I judge this a hardware problem and not a limitation of ftape ;-)
My DOS backup software seems to be suffering from the same problems
and even refuses to run at 1 Mbps !
Ftape will reduce the data-rate from 1 Mbps to 500 Kbps if the number
of overrun errors on a track exceeds a threshold.
Possible solutions:
-------------------
Some of the problems were solved by upgrading the (flash) bios.
Other suggest that it has to do with the FDC being on the PCI
bus, but that is not the case with the Intel Premiere II boards.
[If upgrading the bios doesn't solve the problem you could try
a floppy disk controller on the isa-bus].
Here is a list of systems and recommended BIOS settings:
Intel Premiere PCI (Revenge):
Bios version 1.00.09.AF2 is reported to work.
Intel Premiere PCI II (Plato):
Bios version 1.00.10.AX1 and version 11 beta are ok.
If using version 1.00.08.AX1, GAT must be disabled !
ASUS PCI/I-SP3G:
Preferred settings: ISA-GAT-mode : disabled
DMA-linebuffer-mode : standard
ISA-masterbuffer-mode : standard
DELL Dimension XPS P90
Bios version A2 is reported to be broken, while bios version A5 works.
You can get a flash bios upgrade from http://www.dell.com
To see if you're having the GAT problem, try making a backup
under DOS. If it's very slow and often repositions you're
probably having this problem.
--//--
LocalWords: ftape PCI bios GAT ISA DMA chipset Mbps Kbps FDC isa AF ok ASUS
LocalWords: SP linebuffer masterbuffer XPS http www com
此差异已折叠。
#
# Copyright (C) 1997 Claus-Justus Heine.
#
# 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.
#
# 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; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#
# $Source: /homes/cvs/ftape-stacked/ftape/compressor/Makefile,v $
# $Revision: 1.1 $
# $Date: 1997/10/05 19:12:28 $
#
# Makefile for the optional compressor for th zftape VFS
# interface to the QIC-40/80/3010/3020 floppy-tape driver for
# Linux.
#
obj-$(CONFIG_ZFT_COMPRESSOR) += zft-compressor.o
zft-compressor-objs := zftape-compress.o lzrw3.o
CFLAGS_lzrw3.o := -O6 -funroll-all-loops
此差异已折叠。
#ifndef _LZRW3_H
#define _LZRW3_H
/*
* $Source: /homes/cvs/ftape-stacked/ftape/compressor/lzrw3.h,v $
* $Revision: 1.1 $
* $Date: 1997/10/05 19:12:30 $
*
* include files for lzrw3. Only slighty modified from the original
* version. Assembles the three include files compress.h, port.h and
* fastcopy.h from the original lzrw3 package.
*
*/
#include <linux/types.h>
#include <linux/string.h>
/******************************************************************************/
/* */
/* COMPRESS.H */
/* */
/******************************************************************************/
/* */
/* Author : Ross Williams. */
/* Date : December 1989. */
/* */
/* This header file defines the interface to a set of functions called */
/* 'compress', each member of which implements a particular data compression */
/* algorithm. */
/* */
/* Normally in C programming, for each .H file, there is a corresponding .C */
/* file that implements the functions promised in the .H file. */
/* Here, there are many .C files corresponding to this header file. */
/* Each comforming implementation file contains a single function */
/* called 'compress' that implements a single data compression */
/* algorithm that conforms with the interface specified in this header file. */
/* Only one algorithm can be linked in at a time in this organization. */
/* */
/******************************************************************************/
/* */
/* DEFINITION OF FUNCTION COMPRESS */
/* =============================== */
/* */
/* Summary of Function Compress */
/* ---------------------------- */
/* The action that 'compress' takes depends on its first argument called */
/* 'action'. The function provides three actions: */
/* */
/* - Return information about the algorithm. */
/* - Compress a block of memory. */
/* - Decompress a block of memory. */
/* */
/* Parameters */
/* ---------- */
/* See the formal C definition later for a description of the parameters. */
/* */
/* Constants */
/* --------- */
/* COMPRESS_OVERRUN: The constant COMPRESS_OVERRUN defines by how many bytes */
/* an algorithm is allowed to expand a block during a compression operation. */
/* */
/* Although compression algorithms usually compress data, there will always */
/* be data that a given compressor will expand (this can be proven). */
/* Fortunately, the degree of expansion can be limited to a single bit, by */
/* copying over the input data if the data gets bigger during compression. */
/* To allow for this possibility, the first bit of a compressed */
/* representation can be used as a flag indicating whether the */
/* input data was copied over, or truly compressed. In practice, the first */
/* byte would be used to store this bit so as to maintain byte alignment. */
/* */
/* Unfortunately, in general, the only way to tell if an algorithm will */
/* expand a particular block of data is to run the algorithm on the data. */
/* If the algorithm does not continuously monitor how many output bytes it */
/* has written, it might write an output block far larger than the input */
/* block before realizing that it has done so. */
/* On the other hand, continuous checks on output length are inefficient. */
/* */
/* To cater for all these problems, this interface definition: */
/* > Allows a compression algorithm to return an output block that is up to */
/* COMPRESS_OVERRUN bytes longer than the input block. */
/* > Allows a compression algorithm to write up to COMPRESS_OVERRUN bytes */
/* more than the length of the input block to the memory of the output */
/* block regardless of the length of the output block eventually returned. */
/* This allows an algorithm to overrun the length of the input block in the */
/* output block by up to COMPRESS_OVERRUN bytes between expansion checks. */
/* */
/* The problem does not arise for decompression. */
/* */
/* Identity Action */
/* --------------- */
/* > action must be COMPRESS_ACTION_IDENTITY. */
/* > p_dst_len must point to a longword to receive a longword address. */
/* > The value of the other parameters does not matter. */
/* > After execution, the longword that p_dst_len points to will be a pointer */
/* to a structure of type compress_identity. */
/* Thus, for example, after the call, (*p_dst_len)->memory will return the */
/* number of bytes of working memory that the algorithm requires to run. */
/* > The values of the identity structure returned are fixed constant */
/* attributes of the algorithm and must not vary from call to call. */
/* */
/* Common Requirements for Compression and Decompression Actions */
/* ------------------------------------------------------------- */
/* > wrk_mem must point to an unused block of memory of a length specified in */
/* the algorithm's identity block. The identity block can be obtained by */
/* making a separate call to compress, specifying the identity action. */
/* > The INPUT BLOCK is defined to be Memory[src_addr,src_addr+src_len-1]. */
/* > dst_len will be used to denote *p_dst_len. */
/* > dst_len is not read by compress, only written. */
/* > The value of dst_len is defined only upon termination. */
/* > The OUTPUT BLOCK is defined to be Memory[dst_addr,dst_addr+dst_len-1]. */
/* */
/* Compression Action */
/* ------------------ */
/* > action must be COMPRESS_ACTION_COMPRESS. */
/* > src_len must be in the range [0,COMPRESS_MAX_ORG]. */
/* > The OUTPUT ZONE is defined to be */
/* Memory[dst_addr,dst_addr+src_len-1+COMPRESS_OVERRUN]. */
/* > The function can modify any part of the output zone regardless of the */
/* final length of the output block. */
/* > The input block and the output zone must not overlap. */
/* > dst_len will be in the range [0,src_len+COMPRESS_OVERRUN]. */
/* > dst_len will be in the range [0,COMPRESS_MAX_COM] (from prev fact). */
/* > The output block will consist of a representation of the input block. */
/* */
/* Decompression Action */
/* -------------------- */
/* > action must be COMPRESS_ACTION_DECOMPRESS. */
/* > The input block must be the result of an earlier compression operation. */
/* > If the previous fact is true, the following facts must also be true: */
/* > src_len will be in the range [0,COMPRESS_MAX_COM]. */
/* > dst_len will be in the range [0,COMPRESS_MAX_ORG]. */
/* > The input and output blocks must not overlap. */
/* > Only the output block is modified. */
/* > Upon termination, the output block will consist of the bytes contained */
/* in the input block passed to the earlier compression operation. */
/* */
/******************************************************************************/
/******************************************************************************/
/* */
/* PORT.H */
/* */
/******************************************************************************/
/* */
/* This module contains macro definitions and types that are likely to */
/* change between computers. */
/* */
/******************************************************************************/
#ifndef DONE_PORT /* Only do this if not previously done. */
#ifdef THINK_C
#define UBYTE unsigned char /* Unsigned byte */
#define UWORD unsigned int /* Unsigned word (2 bytes) */
#define ULONG unsigned long /* Unsigned word (4 bytes) */
#define BOOL unsigned char /* Boolean */
#define FOPEN_BINARY_READ "rb" /* Mode string for binary reading. */
#define FOPEN_BINARY_WRITE "wb" /* Mode string for binary writing. */
#define FOPEN_TEXT_APPEND "a" /* Mode string for text appending. */
#define REAL double /* USed for floating point stuff. */
#endif
#if defined(LINUX) || defined(linux)
#define UBYTE __u8 /* Unsigned byte */
#define UWORD __u16 /* Unsigned word (2 bytes) */
#define ULONG __u32 /* Unsigned word (4 bytes) */
#define LONG __s32 /* Signed word (4 bytes) */
#define BOOL is not used here /* Boolean */
#define FOPEN_BINARY_READ not used /* Mode string for binary reading. */
#define FOPEN_BINARY_WRITE not used /* Mode string for binary writing. */
#define FOPEN_TEXT_APPEND not used /* Mode string for text appending. */
#define REAL not used /* USed for floating point stuff. */
#ifndef TRUE
#define TRUE 1
#endif
#endif
#define DONE_PORT /* Don't do all this again. */
#define MALLOC_FAIL NULL /* Failure status from malloc() */
#define LOCAL static /* For non-exported routines. */
#define EXPORT /* Signals exported function. */
#define then /* Useful for aligning ifs. */
#endif
/******************************************************************************/
/* End of PORT.H */
/******************************************************************************/
#define COMPRESS_ACTION_IDENTITY 0
#define COMPRESS_ACTION_COMPRESS 1
#define COMPRESS_ACTION_DECOMPRESS 2
#define COMPRESS_OVERRUN 1024
#define COMPRESS_MAX_COM 0x70000000
#define COMPRESS_MAX_ORG (COMPRESS_MAX_COM-COMPRESS_OVERRUN)
#define COMPRESS_MAX_STRLEN 255
/* The following structure provides information about the algorithm. */
/* > The top bit of id must be zero. The remaining bits must be chosen by */
/* the author of the algorithm by tossing a coin 31 times. */
/* > The amount of memory requested by the algorithm is specified in bytes */
/* and must be in the range [0,0x70000000]. */
/* > All strings s must be such that strlen(s)<=COMPRESS_MAX_STRLEN. */
struct compress_identity
{
ULONG id; /* Identifying number of algorithm. */
ULONG memory; /* Number of bytes of working memory required. */
char *name; /* Name of algorithm. */
char *version; /* Version number. */
char *date; /* Date of release of this version. */
char *copyright; /* Copyright message. */
char *author; /* Author of algorithm. */
char *affiliation; /* Affiliation of author. */
char *vendor; /* Where the algorithm can be obtained. */
};
void lzrw3_compress( /* Single function interface to compression algorithm. */
UWORD action, /* Action to be performed. */
UBYTE *wrk_mem, /* Working memory temporarily given to routine to use. */
UBYTE *src_adr, /* Address of input data. */
LONG src_len, /* Length of input data. */
UBYTE *dst_adr, /* Address of output data. */
void *p_dst_len /* Pointer to a longword where routine will write: */
/* If action=..IDENTITY => Adr of id structure. */
/* If action=..COMPRESS => Length of output data. */
/* If action=..DECOMPRESS => Length of output data. */
);
/******************************************************************************/
/* End of COMPRESS.H */
/******************************************************************************/
/******************************************************************************/
/* fast_copy.h */
/******************************************************************************/
/* This function copies a block of memory very quickly. */
/* The exact speed depends on the relative alignment of the blocks of memory. */
/* PRE : 0<=src_len<=(2^32)-1 . */
/* PRE : Source and destination blocks must not overlap. */
/* POST : MEM[dst_adr,dst_adr+src_len-1]=MEM[src_adr,src_adr+src_len-1]. */
/* POST : MEM[dst_adr,dst_adr+src_len-1] is the only memory changed. */
#define fast_copy(src,dst,len) memcpy(dst,src,len)
/******************************************************************************/
/* End of fast_copy.h */
/******************************************************************************/
#endif
#ifndef _ZFTAPE_COMPRESS_H
#define _ZFTAPE_COMPRESS_H
/*
* Copyright (c) 1994-1997 Claus-Justus Heine
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/compressor/zftape-compress.h,v $
* $Revision: 1.1 $
* $Date: 1997/10/05 19:12:32 $
*
* This file contains macros and definitions for zftape's
* builtin compression code.
*
*/
#include "../zftape/zftape-buffers.h"
#include "../zftape/zftape-vtbl.h"
#include "../compressor/lzrw3.h"
/* CMPR_WRK_MEM_SIZE gives the size of the compression wrk_mem */
/* I got these out of lzrw3.c */
#define U(X) ((__u32) X)
#define SIZE_P_BYTE (U(sizeof(__u8 *)))
#define ALIGNMENT_FUDGE (U(16))
#define CMPR_WRK_MEM_SIZE (U(4096)*(SIZE_P_BYTE) + ALIGNMENT_FUDGE)
/* the maximum number of bytes the size of the "compressed" data can
* exceed the uncompressed data. As it is quite useless to compress
* data twice it is sometimes the case that it is more efficient to
* copy a block of data but to feed it to the "compression"
* algorithm. In this case there are some flag bytes or the like
* proceding the "compressed" data. THAT MUST NOT BE THE CASE for the
* algorithm we use for this driver. Instead, the high bit 15 of
* compressed_size:
*
* compressed_size = ftape_compress()
*
* must be set in such a case.
*
* Nevertheless, it might also be as for lzrw3 that there is an
* "intermediate" overrun that exceeds the amount of the compressed
* data that is actually produced. During the algorithm we need in the
* worst case MAX_CMP_GROUP bytes more than the input-size.
*/
#define MAX_CMP_GROUP (2+16*2) /* from lzrw3.c */
#define CMPR_OVERRUN MAX_CMP_GROUP /* during compression */
/****************************************************/
#define CMPR_BUFFER_SIZE (MAX_BLOCK_SIZE + CMPR_OVERRUN)
/* the compression map stores the byte offset compressed blocks within
* the current volume for catridges with format code 2,3 and 5
* (and old versions of zftape) and the offset measured in kilobytes for
* format code 4 and 6. This gives us a possible max. size of a
* compressed volume of 1024*4GIG which should be enough.
*/
typedef __u32 CmprMap;
/* globals
*/
/* exported functions
*/
#endif /* _ZFTAPE_COMPRESS_H */
#
# Copyright (C) 1996, 1997 Clau-Justus Heine.
#
# 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.
#
# 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; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#
# $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/Makefile,v $
# $Revision: 1.4 $
# $Date: 1997/10/07 09:26:02 $
#
# Makefile for the lowlevel part QIC-40/80/3010/3020 floppy-tape
# driver for Linux.
#
obj-$(CONFIG_FTAPE) += ftape.o
ftape-objs := ftape-init.o fdc-io.o fdc-isr.o \
ftape-bsm.o ftape-ctl.o ftape-read.o ftape-rw.o \
ftape-write.o ftape-io.o ftape-calibr.o ftape-ecc.o fc-10.o \
ftape-buffer.o ftape-format.o ftape_syms.o
ifeq ($(CONFIG_FTAPE),y)
ftape-objs += ftape-setup.o
endif
ifndef CONFIG_FT_NO_TRACE_AT_ALL
ftape-objs += ftape-tracing.o
endif
ifeq ($(CONFIG_FT_PROC_FS),y)
ftape-objs += ftape-proc.o
endif
/*
*
Copyright (C) 1993,1994 Jon Tombs.
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.
The entire guts of this program was written by dosemu, modified to
record reads and writes to the ports in the 0x180-0x188 address space,
while running the CMS program TAPE.EXE V2.0.5 supplied with the drive.
Modified to use an array of addresses and generally cleaned up (made
much shorter) 4 June 94, dosemu isn't that good at writing short code it
would seem :-). Made independent of 0x180, but I doubt it will work
at any other address.
Modified for distribution with ftape source. 21 June 94, SJL.
Modifications on 20 October 95, by Daniel Cohen (catman@wpi.edu):
Modified to support different DMA, IRQ, and IO Ports. Borland's
Turbo Debugger in virtual 8086 mode (TD386.EXE with hardware breakpoints
provided by the TDH386.SYS Device Driver) was used on the CMS program
TAPE V4.0.5. I set breakpoints on I/O to ports 0x180-0x187. Note that
CMS's program will not successfully configure the tape drive if you set
breakpoints on IO Reads, but you can set them on IO Writes without problems.
Known problems:
- You can not use DMA Channels 5 or 7.
Modification on 29 January 96, by Daniel Cohen (catman@wpi.edu):
Modified to only accept IRQs 3 - 7, or 9. Since we can only send a 3 bit
number representing the IRQ to the card, special handling is required when
IRQ 9 is selected. IRQ 2 and 9 are the same, and we should request IRQ 9
from the kernel while telling the card to use IRQ 2. Thanks to Greg
Crider (gcrider@iclnet.org) for finding and locating this bug, as well as
testing the patch.
Modification on 11 December 96, by Claus Heine (claus@momo.math.rwth-aachen.de):
Modified a little to use variahle ft_fdc_base, ft_fdc_irq, ft_fdc_dma
instead of preprocessor symbols. Thus we can compile this into the module
or kernel and let the user specify the options as command line arguments.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/fc-10.c,v $
* $Revision: 1.2 $
* $Date: 1997/10/05 19:18:04 $
*
* This file contains code for the CMS FC-10/FC-20 card.
*/
#include <asm/io.h>
#include <linux/ftape.h>
#include "../lowlevel/ftape-tracing.h"
#include "../lowlevel/fdc-io.h"
#include "../lowlevel/fc-10.h"
static __u16 inbs_magic[] = {
0x3, 0x3, 0x0, 0x4, 0x7, 0x2, 0x5, 0x3, 0x1, 0x4,
0x3, 0x5, 0x2, 0x0, 0x3, 0x7, 0x4, 0x2,
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7
};
static __u16 fc10_ports[] = {
0x180, 0x210, 0x2A0, 0x300, 0x330, 0x340, 0x370
};
int fc10_enable(void)
{
int i;
__u8 cardConfig = 0x00;
__u8 x;
TRACE_FUN(ft_t_flow);
/* This code will only work if the FC-10 (or FC-20) is set to
* use DMA channels 1, 2, or 3. DMA channels 5 and 7 seem to be
* initialized by the same command as channels 1 and 3, respectively.
*/
if (ft_fdc_dma > 3) {
TRACE_ABORT(0, ft_t_err,
"Error: The FC-10/20 must be set to use DMA channels 1, 2, or 3!");
}
/* Only allow the FC-10/20 to use IRQ 3-7, or 9. Note that CMS's program
* only accepts IRQ's 2-7, but in linux, IRQ 2 is the same as IRQ 9.
*/
if (ft_fdc_irq < 3 || ft_fdc_irq == 8 || ft_fdc_irq > 9) {
TRACE_ABORT(0, ft_t_err,
"Error: The FC-10/20 must be set to use IRQ levels 3 - 7, or 9!\n"
KERN_INFO "Note: IRQ 9 is the same as IRQ 2");
}
/* Clear state machine ???
*/
for (i = 0; i < NR_ITEMS(inbs_magic); i++) {
inb(ft_fdc_base + inbs_magic[i]);
}
outb(0x0, ft_fdc_base);
x = inb(ft_fdc_base);
if (x == 0x13 || x == 0x93) {
for (i = 1; i < 8; i++) {
if (inb(ft_fdc_base + i) != x) {
TRACE_EXIT 0;
}
}
} else {
TRACE_EXIT 0;
}
outb(0x8, ft_fdc_base);
for (i = 0; i < 8; i++) {
if (inb(ft_fdc_base + i) != 0x0) {
TRACE_EXIT 0;
}
}
outb(0x10, ft_fdc_base);
for (i = 0; i < 8; i++) {
if (inb(ft_fdc_base + i) != 0xff) {
TRACE_EXIT 0;
}
}
/* Okay, we found a FC-10 card ! ???
*/
outb(0x0, fdc.ccr);
/* Clear state machine again ???
*/
for (i = 0; i < NR_ITEMS(inbs_magic); i++) {
inb(ft_fdc_base + inbs_magic[i]);
}
/* Send io port */
for (i = 0; i < NR_ITEMS(fc10_ports); i++)
if (ft_fdc_base == fc10_ports[i])
cardConfig = i + 1;
if (cardConfig == 0) {
TRACE_EXIT 0; /* Invalid I/O Port */
}
/* and IRQ - If using IRQ 9, tell the FC card it is actually IRQ 2 */
if (ft_fdc_irq != 9)
cardConfig |= ft_fdc_irq << 3;
else
cardConfig |= 2 << 3;
/* and finally DMA Channel */
cardConfig |= ft_fdc_dma << 6;
outb(cardConfig, ft_fdc_base); /* DMA [2 bits]/IRQ [3 bits]/BASE [3 bits] */
/* Enable FC-10 ???
*/
outb(0, fdc.ccr);
outb(0, fdc.dor2);
outb(FDC_DMA_MODE /* 8 */, fdc.dor);
outb(FDC_DMA_MODE /* 8 */, fdc.dor);
outb(1, fdc.dor2);
/*************************************
*
* cH: why the hell should this be necessary? This is done
* by fdc_reset()!!!
*
*************************************/
/* Initialize fdc, select drive B:
*/
outb(FDC_DMA_MODE, fdc.dor); /* assert reset, dma & irq enabled */
/* 0x08 */
outb(FDC_DMA_MODE|FDC_RESET_NOT, fdc.dor); /* release reset */
/* 0x08 | 0x04 = 0x0c */
outb(FDC_DMA_MODE|FDC_RESET_NOT|FDC_MOTOR_1|FTAPE_SEL_B, fdc.dor);
/* 0x08 | 0x04 | 0x20 | 0x01 = 0x2d */
/* select drive 1 */ /* why not drive 0 ???? */
TRACE_EXIT (x == 0x93) ? 2 : 1;
}
#ifndef _FC_10_H
#define _FC_10_H
/*
* Copyright (C) 1994-1996 Bas Laarhoven.
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/fc-10.h,v $
* $Revision: 1.1 $
* $Date: 1997/09/19 09:05:22 $
*
* This file contains definitions for the FC-10 code
* of the QIC-40/80 floppy-tape driver for Linux.
*/
/*
* fc-10.c defined global vars.
*/
/*
* fc-10.c defined global functions.
*/
extern int fc10_enable(void);
#endif
此差异已折叠。
#ifndef _FDC_IO_H
#define _FDC_IO_H
/*
* Copyright (C) 1993-1996 Bas Laarhoven,
* (C) 1996-1997 Claus-Justus Heine.
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/fdc-io.h,v $
* $Revision: 1.3 $
* $Date: 1997/10/05 19:18:06 $
*
* This file contains the declarations for the low level
* functions that communicate with the floppy disk controller,
* for the QIC-40/80/3010/3020 floppy-tape driver "ftape" for
* Linux.
*/
#include <linux/fdreg.h>
#include "../lowlevel/ftape-bsm.h"
#define FDC_SK_BIT (0x20)
#define FDC_MT_BIT (0x80)
#define FDC_READ (FD_READ & ~(FDC_SK_BIT | FDC_MT_BIT))
#define FDC_WRITE (FD_WRITE & ~FDC_MT_BIT)
#define FDC_READ_DELETED (0x4c)
#define FDC_WRITE_DELETED (0x49)
#define FDC_VERIFY (0x56)
#define FDC_READID (0x4a)
#define FDC_SENSED (0x04)
#define FDC_SENSEI (FD_SENSEI)
#define FDC_FORMAT (FD_FORMAT)
#define FDC_RECAL (FD_RECALIBRATE)
#define FDC_SEEK (FD_SEEK)
#define FDC_SPECIFY (FD_SPECIFY)
#define FDC_RECALIBR (FD_RECALIBRATE)
#define FDC_VERSION (FD_VERSION)
#define FDC_PERPEND (FD_PERPENDICULAR)
#define FDC_DUMPREGS (FD_DUMPREGS)
#define FDC_LOCK (FD_LOCK)
#define FDC_UNLOCK (FD_UNLOCK)
#define FDC_CONFIGURE (FD_CONFIGURE)
#define FDC_DRIVE_SPEC (0x8e) /* i82078 has this (any others?) */
#define FDC_PARTID (0x18) /* i82078 has this */
#define FDC_SAVE (0x2e) /* i82078 has this (any others?) */
#define FDC_RESTORE (0x4e) /* i82078 has this (any others?) */
#define FDC_STATUS_MASK (STATUS_BUSY | STATUS_DMA | STATUS_DIR | STATUS_READY)
#define FDC_DATA_READY (STATUS_READY)
#define FDC_DATA_OUTPUT (STATUS_DIR)
#define FDC_DATA_READY_MASK (STATUS_READY | STATUS_DIR)
#define FDC_DATA_OUT_READY (STATUS_READY | STATUS_DIR)
#define FDC_DATA_IN_READY (STATUS_READY)
#define FDC_BUSY (STATUS_BUSY)
#define FDC_CLK48_BIT (0x80)
#define FDC_SEL3V_BIT (0x40)
#define ST0_INT_MASK (ST0_INTR)
#define FDC_INT_NORMAL (ST0_INTR & 0x00)
#define FDC_INT_ABNORMAL (ST0_INTR & 0x40)
#define FDC_INT_INVALID (ST0_INTR & 0x80)
#define FDC_INT_READYCH (ST0_INTR & 0xC0)
#define ST0_SEEK_END (ST0_SE)
#define ST3_TRACK_0 (ST3_TZ)
#define FDC_RESET_NOT (0x04)
#define FDC_DMA_MODE (0x08)
#define FDC_MOTOR_0 (0x10)
#define FDC_MOTOR_1 (0x20)
typedef struct {
void (**hook) (void); /* our wedge into the isr */
enum {
no_fdc, i8272, i82077, i82077AA, fc10,
i82078, i82078_1
} type; /* FDC type */
unsigned int irq; /* FDC irq nr */
unsigned int dma; /* FDC dma channel nr */
__u16 sra; /* Status register A (PS/2 only) */
__u16 srb; /* Status register B (PS/2 only) */
__u16 dor; /* Digital output register */
__u16 tdr; /* Tape Drive Register (82077SL-1 &
82078 only) */
__u16 msr; /* Main Status Register */
__u16 dsr; /* Datarate Select Register (8207x only) */
__u16 fifo; /* Data register / Fifo on 8207x */
__u16 dir; /* Digital Input Register */
__u16 ccr; /* Configuration Control Register */
__u16 dor2; /* Alternate dor on MACH-2 controller,
also used with FC-10, meaning unknown */
} fdc_config_info;
typedef enum {
fdc_data_rate_250 = 2,
fdc_data_rate_300 = 1, /* any fdc in default configuration */
fdc_data_rate_500 = 0,
fdc_data_rate_1000 = 3,
fdc_data_rate_2000 = 1, /* i82078-1: when using Data Rate Table #2 */
} fdc_data_rate_type;
typedef enum {
fdc_idle = 0,
fdc_reading_data = FDC_READ,
fdc_seeking = FDC_SEEK,
fdc_writing_data = FDC_WRITE,
fdc_deleting = FDC_WRITE_DELETED,
fdc_reading_id = FDC_READID,
fdc_recalibrating = FDC_RECAL,
fdc_formatting = FDC_FORMAT,
fdc_verifying = FDC_VERIFY
} fdc_mode_enum;
typedef enum {
waiting = 0,
reading,
writing,
formatting,
verifying,
deleting,
done,
error,
mmapped,
} buffer_state_enum;
typedef struct {
__u8 *address;
volatile buffer_state_enum status;
volatile __u8 *ptr;
volatile unsigned int bytes;
volatile unsigned int segment_id;
/* bitmap for remainder of segment not yet handled.
* one bit set for each bad sector that must be skipped.
*/
volatile SectorMap bad_sector_map;
/* bitmap with bad data blocks in data buffer.
* the errors in this map may be retried.
*/
volatile SectorMap soft_error_map;
/* bitmap with bad data blocks in data buffer
* the errors in this map may not be retried.
*/
volatile SectorMap hard_error_map;
/* retry counter for soft errors.
*/
volatile int retry;
/* sectors to skip on retry ???
*/
volatile unsigned int skip;
/* nr of data blocks in data buffer
*/
volatile unsigned int data_offset;
/* offset in segment for first sector to be handled.
*/
volatile unsigned int sector_offset;
/* size of cluster of good sectors to be handled.
*/
volatile unsigned int sector_count;
/* size of remaining part of segment to be handled.
*/
volatile unsigned int remaining;
/* points to next segment (contiguous) to be handled,
* or is zero if no read-ahead is allowed.
*/
volatile unsigned int next_segment;
/* flag being set if deleted data was read.
*/
volatile int deleted;
/* floppy coordinates of first sector in segment */
volatile __u8 head;
volatile __u8 cyl;
volatile __u8 sect;
/* gap to use when formatting */
__u8 gap3;
/* flag set when buffer is mmaped */
int mmapped;
} buffer_struct;
/*
* fdc-io.c defined public variables
*/
extern volatile fdc_mode_enum fdc_mode;
extern int fdc_setup_error; /* outdated ??? */
extern wait_queue_head_t ftape_wait_intr;
extern volatile int ftape_current_cylinder; /* track nr FDC thinks we're on */
extern volatile __u8 fdc_head; /* FDC head */
extern volatile __u8 fdc_cyl; /* FDC track */
extern volatile __u8 fdc_sect; /* FDC sector */
extern fdc_config_info fdc; /* FDC hardware configuration */
extern unsigned int ft_fdc_base;
extern unsigned int ft_fdc_irq;
extern unsigned int ft_fdc_dma;
extern unsigned int ft_fdc_threshold;
extern unsigned int ft_fdc_rate_limit;
extern int ft_probe_fc10;
extern int ft_mach2;
/*
* fdc-io.c defined public functions
*/
extern void fdc_catch_stray_interrupts(int count);
extern int fdc_ready_wait(unsigned int timeout);
extern int fdc_command(const __u8 * cmd_data, int cmd_len);
extern int fdc_result(__u8 * res_data, int res_len);
extern int fdc_interrupt_wait(unsigned int time);
extern int fdc_seek(int track);
extern int fdc_sense_drive_status(int *st3);
extern void fdc_motor(int motor);
extern void fdc_reset(void);
extern void fdc_disable(void);
extern int fdc_fifo_threshold(__u8 threshold,
int *fifo_state, int *lock_state, int *fifo_thr);
extern void fdc_wait_calibrate(void);
extern int fdc_sense_interrupt_status(int *st0, int *current_cylinder);
extern void fdc_save_drive_specs(void);
extern void fdc_restore_drive_specs(void);
extern int fdc_set_data_rate(int rate);
extern void fdc_set_write_precomp(int precomp);
extern int fdc_release_irq_and_dma(void);
extern void fdc_release_regions(void);
extern int fdc_init(void);
extern int fdc_setup_read_write(buffer_struct * buff, __u8 operation);
extern int fdc_setup_formatting(buffer_struct * buff);
#endif
此差异已折叠。
#ifndef _FDC_ISR_H
#define _FDC_ISR_H
/*
* Copyright (C) 1993-1996 Bas Laarhoven,
* (C) 1996-1997 Claus-Justus Heine.
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/fdc-isr.h,v $
* $Revision: 1.2 $
* $Date: 1997/10/05 19:18:07 $
*
* This file declares the global variables necessary to
* synchronize the interrupt service routine (isr) with the
* remainder of the QIC-40/80/3010/3020 floppy-tape driver
* "ftape" for Linux.
*/
/*
* fdc-isr.c defined public variables
*/
extern volatile int ft_expected_stray_interrupts; /* masks stray interrupts */
extern volatile int ft_seek_completed; /* flag set by isr */
extern volatile int ft_interrupt_seen; /* flag set by isr */
extern volatile int ft_hide_interrupt; /* flag set by isr */
/*
* fdc-io.c defined public functions
*/
extern void fdc_isr(void);
/*
* A kernel hook that steals one interrupt from the floppy
* driver (Should be fixed when the new fdc driver gets ready)
* See the linux kernel source files:
* drivers/block/floppy.c & drivers/block/blk.h
* for the details.
*/
extern void (*do_floppy) (void);
#endif
此差异已折叠。
#ifndef _FTAPE_BSM_H
#define _FTAPE_BSM_H
/*
* Copyright (C) 1994-1996 Bas Laarhoven,
* (C) 1996-1997 Claus-Justus Heine.
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/ftape-bsm.h,v $
* $Revision: 1.2 $
* $Date: 1997/10/05 19:18:07 $
*
* This file contains definitions for the bad sector map handling
* routines for the QIC-117 floppy-tape driver for Linux.
*/
#include <linux/ftape.h>
#include <linux/ftape-header-segment.h>
#define EMPTY_SEGMENT (0xffffffff)
#define FAKE_SEGMENT (0xfffffffe)
/* maximum (format code 4) bad sector map size (bytes).
*/
#define BAD_SECTOR_MAP_SIZE (29 * SECTOR_SIZE - 256)
/* format code 4 bad sector entry, ftape uses this
* internally for all format codes
*/
typedef __u32 SectorMap;
/* variable and 1100 ft bad sector map entry. These three bytes represent
* a single sector address measured from BOT.
*/
typedef struct NewSectorMap {
__u8 bytes[3];
} SectorCount;
/*
* ftape-bsm.c defined global vars.
*/
/*
* ftape-bsm.c defined global functions.
*/
extern void update_bad_sector_map(__u8 * buffer);
extern void ftape_extract_bad_sector_map(__u8 * buffer);
extern SectorMap ftape_get_bad_sector_entry(int segment_id);
extern __u8 *ftape_find_end_of_bsm_list(__u8 * address);
extern void ftape_init_bsm(void);
#endif
/*
* Copyright (C) 1997 Claus-Justus Heine
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/ftape-buffer.c,v $
* $Revision: 1.3 $
* $Date: 1997/10/16 23:33:11 $
*
* This file contains the allocator/dealloctor for ftape's dynamic dma
* buffer.
*/
#include <linux/slab.h>
#include <linux/mm.h>
#include <linux/mman.h>
#include <asm/dma.h>
#include <linux/ftape.h>
#include "../lowlevel/ftape-rw.h"
#include "../lowlevel/ftape-read.h"
#include "../lowlevel/ftape-tracing.h"
#include "../lowlevel/ftape-buffer.h"
/* DMA'able memory allocation stuff.
*/
static inline void *dmaalloc(size_t size)
{
unsigned long addr;
if (size == 0) {
return NULL;
}
addr = __get_dma_pages(GFP_KERNEL, get_order(size));
if (addr) {
struct page *page;
for (page = virt_to_page(addr); page < virt_to_page(addr+size); page++)
SetPageReserved(page);
}
return (void *)addr;
}
static inline void dmafree(void *addr, size_t size)
{
if (size > 0) {
struct page *page;
for (page = virt_to_page((unsigned long)addr);
page < virt_to_page((unsigned long)addr+size); page++)
ClearPageReserved(page);
free_pages((unsigned long) addr, get_order(size));
}
}
static int add_one_buffer(void)
{
TRACE_FUN(ft_t_flow);
if (ft_nr_buffers >= FT_MAX_NR_BUFFERS) {
TRACE_EXIT -ENOMEM;
}
ft_buffer[ft_nr_buffers] = kmalloc(sizeof(buffer_struct), GFP_KERNEL);
if (ft_buffer[ft_nr_buffers] == NULL) {
TRACE_EXIT -ENOMEM;
}
memset(ft_buffer[ft_nr_buffers], 0, sizeof(buffer_struct));
ft_buffer[ft_nr_buffers]->address = dmaalloc(FT_BUFF_SIZE);
if (ft_buffer[ft_nr_buffers]->address == NULL) {
kfree(ft_buffer[ft_nr_buffers]);
ft_buffer[ft_nr_buffers] = NULL;
TRACE_EXIT -ENOMEM;
}
ft_nr_buffers ++;
TRACE(ft_t_info, "buffer nr #%d @ %p, dma area @ %p",
ft_nr_buffers,
ft_buffer[ft_nr_buffers-1],
ft_buffer[ft_nr_buffers-1]->address);
TRACE_EXIT 0;
}
static void del_one_buffer(void)
{
TRACE_FUN(ft_t_flow);
if (ft_nr_buffers > 0) {
TRACE(ft_t_info, "releasing buffer nr #%d @ %p, dma area @ %p",
ft_nr_buffers,
ft_buffer[ft_nr_buffers-1],
ft_buffer[ft_nr_buffers-1]->address);
ft_nr_buffers --;
dmafree(ft_buffer[ft_nr_buffers]->address, FT_BUFF_SIZE);
kfree(ft_buffer[ft_nr_buffers]);
ft_buffer[ft_nr_buffers] = NULL;
}
TRACE_EXIT;
}
int ftape_set_nr_buffers(int cnt)
{
int delta = cnt - ft_nr_buffers;
TRACE_FUN(ft_t_flow);
if (delta > 0) {
while (delta--) {
if (add_one_buffer() < 0) {
TRACE_EXIT -ENOMEM;
}
}
} else if (delta < 0) {
while (delta++) {
del_one_buffer();
}
}
ftape_zap_read_buffers();
TRACE_EXIT 0;
}
#ifndef _FTAPE_BUFFER_H
#define _FTAPE_BUFFER_H
/*
* Copyright (C) 1997 Claus-Justus Heine.
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/ftape-buffer.h,v $
* $Revision: 1.2 $
* $Date: 1997/10/05 19:18:08 $
*
* This file contains the allocator/dealloctor for ftape's dynamic dma
* buffer.
*/
extern int ftape_set_nr_buffers(int cnt);
#endif
此差异已折叠。
#ifndef _FTAPE_CALIBR_H
#define _FTAPE_CALIBR_H
/*
* Copyright (C) 1993-1996 Bas Laarhoven.
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/ftape-calibr.h,v $
* $Revision: 1.1 $
* $Date: 1997/09/19 09:05:26 $
*
* This file contains a gp calibration routine for
* hardware dependent timeout functions.
*/
extern void ftape_calibrate(char *name,
void (*fun) (unsigned int),
unsigned int *calibr_count,
unsigned int *calibr_time);
extern unsigned int ftape_timestamp(void);
extern unsigned int ftape_timediff(unsigned int t0, unsigned int t1);
#endif /* _FTAPE_CALIBR_H */
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
#ifndef _FTAPE_FORMAT_H
#define _FTAPE_FORMAT_H
/*
* Copyright (C) 1996-1997 Claus-Justus Heine.
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.
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; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/ftape-format.h,v $
* $Revision: 1.2 $
* $Date: 1997/10/05 19:18:13 $
*
* This file contains the low level definitions for the
* formatting support for the QIC-40/80/3010/3020 floppy-tape
* driver "ftape" for Linux.
*/
#ifdef __KERNEL__
extern int ftape_format_track(const unsigned int track, const __u8 gap3);
extern int ftape_format_status(unsigned int *segment_id);
extern int ftape_verify_segment(const unsigned int segment_id, SectorMap *bsm);
#endif /* __KERNEL__ */
#endif
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
......@@ -60,8 +60,6 @@ header-y += fadvise.h
header-y += fd.h
header-y += fdreg.h
header-y += fib_rules.h
header-y += ftape-header-segment.h
header-y += ftape-vendors.h
header-y += fuse.h
header-y += futex.h
header-y += genetlink.h
......@@ -206,7 +204,6 @@ unifdef-y += fcntl.h
unifdef-y += filter.h
unifdef-y += flat.h
unifdef-y += fs.h
unifdef-y += ftape.h
unifdef-y += gameport.h
unifdef-y += generic_serial.h
unifdef-y += genhd.h
......@@ -341,6 +338,5 @@ unifdef-y += wait.h
unifdef-y += wanrouter.h
unifdef-y += watchdog.h
unifdef-y += xfrm.h
unifdef-y += zftape.h
objhdr-y += version.h
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册