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
58c1b542
Commit
58c1b542
authored
Sep 22, 2002
by
Jens Axboe
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] pdc4030
make pdc4030 work
parent
6c99eec3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
23 additions
and
15 deletions
+23
-15
drivers/ide/legacy/pdc4030.c
drivers/ide/legacy/pdc4030.c
+23
-15
No files found.
drivers/ide/legacy/pdc4030.c
View file @
58c1b542
...
@@ -462,7 +462,7 @@ static ide_startstop_t promise_read_intr (ide_drive_t *drive)
...
@@ -462,7 +462,7 @@ static ide_startstop_t promise_read_intr (ide_drive_t *drive)
rq
->
nr_sectors
-=
nsect
;
rq
->
nr_sectors
-=
nsect
;
total_remaining
=
rq
->
nr_sectors
;
total_remaining
=
rq
->
nr_sectors
;
if
((
rq
->
current_nr_sectors
-=
nsect
)
<=
0
)
{
if
((
rq
->
current_nr_sectors
-=
nsect
)
<=
0
)
{
DRIVER
(
drive
)
->
end_request
(
drive
,
1
);
DRIVER
(
drive
)
->
end_request
(
drive
,
1
,
0
);
}
}
/*
/*
* Now the data has been read in, do the following:
* Now the data has been read in, do the following:
...
@@ -539,7 +539,7 @@ static ide_startstop_t promise_complete_pollfunc(ide_drive_t *drive)
...
@@ -539,7 +539,7 @@ static ide_startstop_t promise_complete_pollfunc(ide_drive_t *drive)
#endif
/* DEBUG_WRITE */
#endif
/* DEBUG_WRITE */
for
(
i
=
rq
->
nr_sectors
;
i
>
0
;
)
{
for
(
i
=
rq
->
nr_sectors
;
i
>
0
;
)
{
i
-=
rq
->
current_nr_sectors
;
i
-=
rq
->
current_nr_sectors
;
DRIVER
(
drive
)
->
end_request
(
drive
,
1
);
DRIVER
(
drive
)
->
end_request
(
drive
,
1
,
0
);
}
}
return
ide_stopped
;
return
ide_stopped
;
}
}
...
@@ -584,16 +584,24 @@ int promise_multwrite (ide_drive_t *drive, unsigned int mcount)
...
@@ -584,16 +584,24 @@ int promise_multwrite (ide_drive_t *drive, unsigned int mcount)
/* Do we move to the next bh after this? */
/* Do we move to the next bh after this? */
if
(
!
rq
->
current_nr_sectors
)
{
if
(
!
rq
->
current_nr_sectors
)
{
struct
buffer_head
*
bh
=
rq
->
bh
->
b_reqnext
;
struct
bio
*
bio
=
rq
->
bio
;
/*
* only move to next bio, when we have processed
* all bvecs in this one.
*/
if
(
++
bio
->
bi_idx
>=
bio
->
bi_vcnt
)
{
bio
->
bi_idx
=
0
;
bio
=
bio
->
bi_next
;
}
/* end early early we ran out of requests */
/* end early early we ran out of requests */
if
(
!
b
h
)
{
if
(
!
b
io
)
{
mcount
=
0
;
mcount
=
0
;
}
else
{
}
else
{
rq
->
b
h
=
bh
;
rq
->
b
io
=
bio
;
rq
->
current_nr_sectors
=
bh
->
b_size
>>
9
;
rq
->
current_nr_sectors
=
bio_iovec
(
bio
)
->
bv_len
>>
9
;
rq
->
hard_cur_sectors
=
rq
->
current_nr_sectors
;
rq
->
hard_cur_sectors
=
rq
->
current_nr_sectors
;
rq
->
buffer
=
bh
->
b_data
;
}
}
}
}
...
@@ -720,6 +728,12 @@ ide_startstop_t do_pdc4030_io (ide_drive_t *drive, ide_task_t *task)
...
@@ -720,6 +728,12 @@ ide_startstop_t do_pdc4030_io (ide_drive_t *drive, ide_task_t *task)
unsigned
long
timeout
;
unsigned
long
timeout
;
u8
stat
=
0
;
u8
stat
=
0
;
if
(
!
blk_fs_request
(
rq
))
{
blk_dump_rq_flags
(
rq
,
"do_pdc4030_io - bad command"
);
DRIVER
(
drive
)
->
end_request
(
drive
,
0
,
0
);
return
ide_stopped
;
}
#ifdef CONFIG_IDE_TASKFILE_IO
#ifdef CONFIG_IDE_TASKFILE_IO
if
(
IDE_CONTROL_REG
)
if
(
IDE_CONTROL_REG
)
HWIF
(
drive
)
->
OUTB
(
drive
->
ctl
,
IDE_CONTROL_REG
);
/* clear nIEN */
HWIF
(
drive
)
->
OUTB
(
drive
->
ctl
,
IDE_CONTROL_REG
);
/* clear nIEN */
...
@@ -735,8 +749,7 @@ ide_startstop_t do_pdc4030_io (ide_drive_t *drive, ide_task_t *task)
...
@@ -735,8 +749,7 @@ ide_startstop_t do_pdc4030_io (ide_drive_t *drive, ide_task_t *task)
HWIF
(
drive
)
->
OUTB
(
taskfile
->
command
,
IDE_COMMAND_REG
);
HWIF
(
drive
)
->
OUTB
(
taskfile
->
command
,
IDE_COMMAND_REG
);
#endif
/* CONFIG_IDE_TASKFILE_IO */
#endif
/* CONFIG_IDE_TASKFILE_IO */
switch
(
rq
->
cmd
)
{
if
(
rq_data_dir
(
rq
)
==
READ
)
{
case
READ
:
#ifndef CONFIG_IDE_TASKFILE_IO
#ifndef CONFIG_IDE_TASKFILE_IO
HWIF
(
drive
)
->
OUTB
(
PROMISE_READ
,
IDE_COMMAND_REG
);
HWIF
(
drive
)
->
OUTB
(
PROMISE_READ
,
IDE_COMMAND_REG
);
#endif
/* CONFIG_IDE_TASKFILE_IO */
#endif
/* CONFIG_IDE_TASKFILE_IO */
...
@@ -774,7 +787,7 @@ ide_startstop_t do_pdc4030_io (ide_drive_t *drive, ide_task_t *task)
...
@@ -774,7 +787,7 @@ ide_startstop_t do_pdc4030_io (ide_drive_t *drive, ide_task_t *task)
printk
(
KERN_ERR
"%s: reading: No DRQ and not "
printk
(
KERN_ERR
"%s: reading: No DRQ and not "
"waiting - Odd!
\n
"
,
drive
->
name
);
"waiting - Odd!
\n
"
,
drive
->
name
);
return
ide_stopped
;
return
ide_stopped
;
case
WRITE
:
}
else
{
#ifndef CONFIG_IDE_TASKFILE_IO
#ifndef CONFIG_IDE_TASKFILE_IO
HWIF
(
drive
)
->
OUTB
(
PROMISE_WRITE
,
IDE_COMMAND_REG
);
HWIF
(
drive
)
->
OUTB
(
PROMISE_WRITE
,
IDE_COMMAND_REG
);
#endif
/* CONFIG_IDE_TASKFILE_IO */
#endif
/* CONFIG_IDE_TASKFILE_IO */
...
@@ -788,11 +801,6 @@ ide_startstop_t do_pdc4030_io (ide_drive_t *drive, ide_task_t *task)
...
@@ -788,11 +801,6 @@ ide_startstop_t do_pdc4030_io (ide_drive_t *drive, ide_task_t *task)
local_irq_disable
();
local_irq_disable
();
HWGROUP
(
drive
)
->
wrq
=
*
rq
;
/* scratchpad */
HWGROUP
(
drive
)
->
wrq
=
*
rq
;
/* scratchpad */
return
promise_write
(
drive
);
return
promise_write
(
drive
);
default:
printk
(
"KERN_WARNING %s: bad command: %d
\n
"
,
drive
->
name
,
rq
->
cmd
);
DRIVER
(
drive
)
->
end_request
(
drive
,
0
);
return
ide_stopped
;
}
}
}
}
...
...
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