Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
a04c895e
Commit
a04c895e
authored
Aug 13, 2003
by
Bartlomiej Zolnierkiewicz
Committed by
Linus Torvalds
Aug 13, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] ide: build fixes for ide-tape.c
also add missing Kconfig help entry from 2.4.x
parent
8ca7b325
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
35 deletions
+64
-35
drivers/ide/Kconfig
drivers/ide/Kconfig
+25
-1
drivers/ide/ide-tape.c
drivers/ide/ide-tape.c
+39
-34
No files found.
drivers/ide/Kconfig
View file @
a04c895e
...
...
@@ -206,7 +206,31 @@ config BLK_DEV_IDECD
say M here and read <file:Documentation/modules.txt>. The module
will be called ide-cd.
#dep_tristate ' Include IDE/ATAPI TAPE support' CONFIG_BLK_DEV_IDETAPE $CONFIG_BLK_DEV_IDE
config BLK_DEV_IDETAPE
tristate "Include IDE/ATAPI TAPE support (EXPERIMENTAL)"
depends on EXPERIMENTAL
help
If you have an IDE tape drive using the ATAPI protocol, say Y.
ATAPI is a newer protocol used by IDE tape and CD-ROM drives,
similar to the SCSI protocol. If you have an SCSI tape drive
however, you can say N here.
You should also say Y if you have an OnStream DI-30 tape drive; this
will not work with the SCSI protocol, until there is support for the
SC-30 and SC-50 versions.
If you say Y here, the tape drive will be identified at boot time
along with other IDE devices, as "hdb" or "hdc", or something
similar, and will be mapped to a character device such as "ht0"
(check the boot messages with dmesg). Be sure to consult the
<file:drivers/ide/ide-tape.c> and <file:Documentation/ide.txt> files
for usage information.
If you want to compile the driver as a module ( = code which can be
inserted in and removed from the running kernel whenever you want),
say M here and read <file:Documentation/modules.txt>. The module
will be called ide-tape.o.
config BLK_DEV_IDEFLOPPY
tristate "Include IDE/ATAPI FLOPPY support"
---help---
...
...
drivers/ide/ide-tape.c
View file @
a04c895e
...
...
@@ -1413,7 +1413,7 @@ static void idetape_write_release (ide_drive_t *drive, unsigned int minor);
static
void
idetape_discard_data
(
ide_drive_t
*
drive
,
unsigned
int
bcount
)
{
while
(
bcount
--
)
IN_BYTE
(
IDE_DATA_REG
);
(
void
)
HWIF
(
drive
)
->
INB
(
IDE_DATA_REG
);
}
static
void
idetape_input_buffers
(
ide_drive_t
*
drive
,
idetape_pc_t
*
pc
,
unsigned
int
bcount
)
...
...
@@ -1775,7 +1775,7 @@ static void idetape_abort_pipeline (ide_drive_t *drive, idetape_stage_t *last_st
* idetape_end_request is used to finish servicing a request, and to
* insert a pending pipeline request into the main device queue.
*/
static
int
idetape_end_request
(
ide_drive_t
*
drive
,
int
uptodate
)
static
int
idetape_end_request
(
ide_drive_t
*
drive
,
int
uptodate
,
int
nr_sects
)
{
struct
request
*
rq
=
HWGROUP
(
drive
)
->
rq
;
idetape_tape_t
*
tape
=
drive
->
driver_data
;
...
...
@@ -1898,10 +1898,10 @@ static ide_startstop_t idetape_request_sense_callback (ide_drive_t *drive)
#endif
/* IDETAPE_DEBUG_LOG */
if
(
!
tape
->
pc
->
error
)
{
idetape_analyze_error
(
drive
,
(
idetape_request_sense_result_t
*
)
tape
->
pc
->
buffer
);
idetape_end_request
(
drive
,
1
);
idetape_end_request
(
drive
,
1
,
0
);
}
else
{
printk
(
KERN_ERR
"ide-tape: Error in REQUEST SENSE itself - Aborting request!
\n
"
);
idetape_end_request
(
drive
,
0
);
idetape_end_request
(
drive
,
0
,
0
);
}
return
ide_stopped
;
}
...
...
@@ -1954,7 +1954,7 @@ static ide_startstop_t idetape_retry_pc (ide_drive_t *drive)
struct
request
*
rq
;
atapi_error_t
error
;
error
.
all
=
IN_BYTE
(
IDE_ERROR_REG
);
error
.
all
=
HWIF
(
drive
)
->
INB
(
IDE_ERROR_REG
);
pc
=
idetape_next_pc_storage
(
drive
);
rq
=
idetape_next_rq_storage
(
drive
);
idetape_create_request_sense_cmd
(
pc
);
...
...
@@ -1990,6 +1990,7 @@ static void idetape_postpone_request (ide_drive_t *drive)
*/
static
ide_startstop_t
idetape_pc_intr
(
ide_drive_t
*
drive
)
{
ide_hwif_t
*
hwif
=
drive
->
hwif
;
idetape_tape_t
*
tape
=
drive
->
driver_data
;
atapi_status_t
status
;
atapi_bcount_t
bcount
;
...
...
@@ -2105,9 +2106,11 @@ static ide_startstop_t idetape_pc_intr (ide_drive_t *drive)
(
void
)
HWIF
(
drive
)
->
ide_dma_off
(
drive
);
return
ide_do_reset
(
drive
);
}
bcount
.
b
.
high
=
IN_BYTE
(
IDE_BCOUNTH_REG
);
/* Get the number of bytes to transfer */
bcount
.
b
.
low
=
IN_BYTE
(
IDE_BCOUNTL_REG
);
/* on this interrupt */
ireason
.
all
=
IN_BYTE
(
IDE_IREASON_REG
);
/* Get the number of bytes to transfer on this interrupt. */
bcount
.
b
.
high
=
hwif
->
INB
(
IDE_BCOUNTH_REG
);
bcount
.
b
.
low
=
hwif
->
INB
(
IDE_BCOUNTL_REG
);
ireason
.
all
=
hwif
->
INB
(
IDE_IREASON_REG
);
if
(
ireason
.
b
.
cod
)
{
printk
(
KERN_ERR
"ide-tape: CoD != 0 in idetape_pc_intr
\n
"
);
...
...
@@ -2200,6 +2203,7 @@ static ide_startstop_t idetape_pc_intr (ide_drive_t *drive)
*/
static
ide_startstop_t
idetape_transfer_pc
(
ide_drive_t
*
drive
)
{
ide_hwif_t
*
hwif
=
drive
->
hwif
;
idetape_tape_t
*
tape
=
drive
->
driver_data
;
idetape_pc_t
*
pc
=
tape
->
pc
;
atapi_ireason_t
ireason
;
...
...
@@ -2210,12 +2214,12 @@ static ide_startstop_t idetape_transfer_pc(ide_drive_t *drive)
printk
(
KERN_ERR
"ide-tape: Strange, packet command initiated yet DRQ isn't asserted
\n
"
);
return
startstop
;
}
ireason
.
all
=
IN_BYTE
(
IDE_IREASON_REG
);
ireason
.
all
=
hwif
->
INB
(
IDE_IREASON_REG
);
while
(
retries
--
&&
(
!
ireason
.
b
.
cod
||
ireason
.
b
.
io
))
{
printk
(
KERN_ERR
"ide-tape: (IO,CoD != (0,1) while issuing "
"a packet command, retrying
\n
"
);
udelay
(
100
);
ireason
.
all
=
IN_BYTE
(
IDE_IREASON_REG
);
ireason
.
all
=
hwif
->
INB
(
IDE_IREASON_REG
);
if
(
retries
==
0
)
{
printk
(
KERN_ERR
"ide-tape: (IO,CoD != (0,1) while "
"issuing a packet command, ignoring
\n
"
);
...
...
@@ -2242,6 +2246,7 @@ static ide_startstop_t idetape_transfer_pc(ide_drive_t *drive)
static
ide_startstop_t
idetape_issue_packet_command
(
ide_drive_t
*
drive
,
idetape_pc_t
*
pc
)
{
ide_hwif_t
*
hwif
=
drive
->
hwif
;
idetape_tape_t
*
tape
=
drive
->
driver_data
;
atapi_bcount_t
bcount
;
int
dma_ok
=
0
;
...
...
@@ -2309,19 +2314,19 @@ static ide_startstop_t idetape_issue_packet_command (ide_drive_t *drive, idetape
}
if
(
IDE_CONTROL_REG
)
OUT_BYTE
(
drive
->
ctl
,
IDE_CONTROL_REG
);
OUT_BYTE
(
dma_ok
?
1
:
0
,
IDE_FEATURE_REG
);
/* Use PIO/DMA */
OUT_BYTE
(
bcount
.
b
.
high
,
IDE_BCOUNTH_REG
);
OUT_BYTE
(
bcount
.
b
.
low
,
IDE_BCOUNTL_REG
);
OUT_BYTE
(
drive
->
select
.
all
,
IDE_SELECT_REG
);
hwif
->
OUTB
(
drive
->
ctl
,
IDE_CONTROL_REG
);
hwif
->
OUTB
(
dma_ok
?
1
:
0
,
IDE_FEATURE_REG
);
/* Use PIO/DMA */
hwif
->
OUTB
(
bcount
.
b
.
high
,
IDE_BCOUNTH_REG
);
hwif
->
OUTB
(
bcount
.
b
.
low
,
IDE_BCOUNTL_REG
);
hwif
->
OUTB
(
drive
->
select
.
all
,
IDE_SELECT_REG
);
if
(
dma_ok
)
/* Will begin DMA later */
set_bit
(
PC_DMA_IN_PROGRESS
,
&
pc
->
flags
);
if
(
test_bit
(
IDETAPE_DRQ_INTERRUPT
,
&
tape
->
flags
))
{
ide_set_handler
(
drive
,
&
idetape_transfer_pc
,
IDETAPE_WAIT_CMD
,
NULL
);
OUT_BYTE
(
WIN_PACKETCMD
,
IDE_COMMAND_REG
);
hwif
->
OUTB
(
WIN_PACKETCMD
,
IDE_COMMAND_REG
);
return
ide_started
;
}
else
{
OUT_BYTE
(
WIN_PACKETCMD
,
IDE_COMMAND_REG
);
hwif
->
OUTB
(
WIN_PACKETCMD
,
IDE_COMMAND_REG
);
return
idetape_transfer_pc
(
drive
);
}
}
...
...
@@ -2338,7 +2343,7 @@ static ide_startstop_t idetape_pc_callback (ide_drive_t *drive)
printk
(
KERN_INFO
"ide-tape: Reached idetape_pc_callback
\n
"
);
#endif
/* IDETAPE_DEBUG_LOG */
idetape_end_request
(
drive
,
tape
->
pc
->
error
?
0
:
1
);
idetape_end_request
(
drive
,
tape
->
pc
->
error
?
0
:
1
,
0
);
return
ide_stopped
;
}
...
...
@@ -2389,7 +2394,7 @@ static ide_startstop_t idetape_onstream_buffer_fill_callback (ide_drive_t *drive
printk
(
KERN_INFO
"ide-tape: buffer fill callback, %d/%d
\n
"
,
tape
->
cur_frames
,
tape
->
max_frames
);
#endif
idetape_end_request
(
drive
,
tape
->
pc
->
error
?
0
:
1
);
idetape_end_request
(
drive
,
tape
->
pc
->
error
?
0
:
1
,
0
);
return
ide_stopped
;
}
...
...
@@ -2509,9 +2514,9 @@ static ide_startstop_t idetape_rw_callback (ide_drive_t *drive)
rq
->
current_nr_sectors
-=
blocks
;
if
(
!
tape
->
pc
->
error
)
idetape_end_request
(
drive
,
1
);
idetape_end_request
(
drive
,
1
,
0
);
else
idetape_end_request
(
drive
,
tape
->
pc
->
error
);
idetape_end_request
(
drive
,
tape
->
pc
->
error
,
0
);
return
ide_stopped
;
}
...
...
@@ -2604,7 +2609,8 @@ static void idetape_create_write_cmd (idetape_tape_t *tape, idetape_pc_t *pc, un
/*
* idetape_do_request is our request handling function.
*/
static
ide_startstop_t
idetape_do_request
(
ide_drive_t
*
drive
,
struct
request
*
rq
,
unsigned
long
block
)
static
ide_startstop_t
idetape_do_request
(
ide_drive_t
*
drive
,
struct
request
*
rq
,
sector_t
block
)
{
idetape_tape_t
*
tape
=
drive
->
driver_data
;
idetape_pc_t
*
pc
;
...
...
@@ -2630,7 +2636,7 @@ static ide_startstop_t idetape_do_request (ide_drive_t *drive, struct request *r
*/
printk
(
KERN_NOTICE
"ide-tape: %s: Unsupported command in "
"request queue (%ld)
\n
"
,
drive
->
name
,
rq
->
flags
);
ide_end_request
(
drive
,
0
);
ide_end_request
(
drive
,
0
,
0
);
return
ide_stopped
;
}
...
...
@@ -2646,7 +2652,7 @@ static ide_startstop_t idetape_do_request (ide_drive_t *drive, struct request *r
if
(
rq
!=
postponed_rq
)
{
printk
(
KERN_ERR
"ide-tape: ide-tape.c bug - "
"Two DSC requests were queued
\n
"
);
idetape_end_request
(
drive
,
0
);
idetape_end_request
(
drive
,
0
,
0
);
return
ide_stopped
;
}
#endif
/* IDETAPE_DEBUG_BUGS */
...
...
@@ -2778,7 +2784,7 @@ static ide_startstop_t idetape_do_request (ide_drive_t *drive, struct request *r
break
;
case
IDETAPE_ABORTED_WRITE_RQ
:
rq
->
flags
=
IDETAPE_WRITE_RQ
;
idetape_end_request
(
drive
,
IDETAPE_ERROR_EOD
);
idetape_end_request
(
drive
,
IDETAPE_ERROR_EOD
,
0
);
return
ide_stopped
;
case
IDETAPE_ABORTED_READ_RQ
:
#if IDETAPE_DEBUG_LOG
...
...
@@ -2786,7 +2792,7 @@ static ide_startstop_t idetape_do_request (ide_drive_t *drive, struct request *r
printk
(
KERN_INFO
"ide-tape: %s: detected aborted read rq
\n
"
,
tape
->
name
);
#endif
rq
->
flags
=
IDETAPE_READ_RQ
;
idetape_end_request
(
drive
,
IDETAPE_ERROR_EOD
);
idetape_end_request
(
drive
,
IDETAPE_ERROR_EOD
,
0
);
return
ide_stopped
;
case
IDETAPE_PC_RQ1
:
pc
=
(
idetape_pc_t
*
)
rq
->
buffer
;
...
...
@@ -2797,7 +2803,7 @@ static ide_startstop_t idetape_do_request (ide_drive_t *drive, struct request *r
return
ide_stopped
;
default:
printk
(
KERN_ERR
"ide-tape: bug in IDETAPE_RQ_CMD macro
\n
"
);
idetape_end_request
(
drive
,
0
);
idetape_end_request
(
drive
,
0
,
0
);
return
ide_stopped
;
}
return
idetape_issue_packet_command
(
drive
,
pc
);
...
...
@@ -3130,7 +3136,7 @@ static ide_startstop_t idetape_read_position_callback (ide_drive_t *drive)
if
(
result
->
bpu
)
{
printk
(
KERN_INFO
"ide-tape: Block location is unknown to the tape
\n
"
);
clear_bit
(
IDETAPE_ADDRESS_VALID
,
&
tape
->
flags
);
idetape_end_request
(
drive
,
0
);
idetape_end_request
(
drive
,
0
,
0
);
}
else
{
#if IDETAPE_DEBUG_LOG
if
(
tape
->
debug_level
>=
2
)
...
...
@@ -3141,10 +3147,10 @@ static ide_startstop_t idetape_read_position_callback (ide_drive_t *drive)
tape
->
last_frame_position
=
ntohl
(
result
->
last_block
);
tape
->
blocks_in_buffer
=
result
->
blocks_in_buffer
[
2
];
set_bit
(
IDETAPE_ADDRESS_VALID
,
&
tape
->
flags
);
idetape_end_request
(
drive
,
1
);
idetape_end_request
(
drive
,
1
,
0
);
}
}
else
{
idetape_end_request
(
drive
,
0
);
idetape_end_request
(
drive
,
0
,
0
);
}
return
ide_stopped
;
}
...
...
@@ -3223,7 +3229,7 @@ static void idetape_create_load_unload_cmd (ide_drive_t *drive, idetape_pc_t *pc
pc
->
callback
=
&
idetape_pc_callback
;
}
static
int
idetape_wait_ready
(
ide_drive_t
*
drive
,
unsigned
long
long
timeout
)
static
int
idetape_wait_ready
(
ide_drive_t
*
drive
,
unsigned
long
timeout
)
{
idetape_tape_t
*
tape
=
drive
->
driver_data
;
idetape_pc_t
pc
;
...
...
@@ -4578,7 +4584,6 @@ static int idetape_space_over_filemarks (ide_drive_t *drive,short mt_op,int mt_c
static
ssize_t
idetape_chrdev_read
(
struct
file
*
file
,
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
ide_drive_t
*
drive
=
file
->
private_data
;
idetape_tape_t
*
tape
=
drive
->
driver_data
;
ssize_t
bytes_read
,
temp
,
actually_read
=
0
,
rc
;
...
...
@@ -5532,7 +5537,7 @@ static void idetape_write_release (ide_drive_t *drive, unsigned int minor)
*/
static
int
idetape_chrdev_release
(
struct
inode
*
inode
,
struct
file
*
filp
)
{
ide_drive_t
*
drive
=
fil
e
->
private_data
;
ide_drive_t
*
drive
=
fil
p
->
private_data
;
idetape_tape_t
*
tape
;
idetape_pc_t
pc
;
unsigned
int
minor
=
minor
(
inode
->
i_rdev
);
...
...
@@ -6290,7 +6295,7 @@ static int idetape_attach (ide_drive_t *drive)
idetape_setup
(
drive
,
tape
,
minor
);
idetape_chrdevs
[
minor
].
drive
=
drive
;
devfs_mk_cdev
(
MKDEV
(
HWIF
(
drive
)
->
major
,
minor
)
devfs_mk_cdev
(
MKDEV
(
HWIF
(
drive
)
->
major
,
minor
)
,
S_IFCHR
|
S_IRUGO
|
S_IWUGO
,
"%s/mt"
,
drive
->
devfs_name
);
devfs_mk_cdev
(
MKDEV
(
HWIF
(
drive
)
->
major
,
minor
+
128
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment