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
nexedi
linux
Commits
d843f16d
Commit
d843f16d
authored
Aug 12, 2002
by
Alexander Viro
Committed by
Linus Torvalds
Aug 12, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] DAC960 per-disk gendisks
DAC960 switched to per-disk gendisks.
parent
fb454fda
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
99 additions
and
141 deletions
+99
-141
drivers/block/DAC960.c
drivers/block/DAC960.c
+93
-122
drivers/block/DAC960.h
drivers/block/DAC960.h
+6
-14
fs/partitions/check.c
fs/partitions/check.c
+0
-5
No files found.
drivers/block/DAC960.c
View file @
d843f16d
...
@@ -75,17 +75,19 @@ static DAC960_Controller_T
...
@@ -75,17 +75,19 @@ static DAC960_Controller_T
*
DAC960_Controllers
[
DAC960_MaxControllers
]
=
{
NULL
};
*
DAC960_Controllers
[
DAC960_MaxControllers
]
=
{
NULL
};
static
int
DAC960_revalidate
(
kdev_t
);
/*
/*
DAC960_BlockDeviceOperations is the Block Device Operations structure for
DAC960_BlockDeviceOperations is the Block Device Operations structure for
DAC960 Logical Disk Devices.
DAC960 Logical Disk Devices.
*/
*/
static
BlockDeviceOperations_T
static
struct
block_device_operations
DAC960_BlockDeviceOperations
=
{
DAC960_BlockDeviceOperations
=
owner:
THIS_MODULE
,
{
owner
:
THIS_MODULE
,
open:
DAC960_Open
,
open:
DAC960_Open
,
release:
DAC960_Release
,
release:
DAC960_Release
,
ioctl:
DAC960_IOCTL
,
ioctl:
DAC960_IOCTL
};
revalidate:
DAC960_revalidate
,
};
/*
/*
...
@@ -306,9 +308,9 @@ static inline void DAC960_DeallocateCommand(DAC960_Command_T *Command)
...
@@ -306,9 +308,9 @@ static inline void DAC960_DeallocateCommand(DAC960_Command_T *Command)
static
void
DAC960_WaitForCommand
(
DAC960_Controller_T
*
Controller
)
static
void
DAC960_WaitForCommand
(
DAC960_Controller_T
*
Controller
)
{
{
spin_unlock_irq
(
&
Controller
->
RequestQueue
->
queue_lock
);
spin_unlock_irq
(
Controller
->
RequestQueue
->
queue_lock
);
__wait_event
(
Controller
->
CommandWaitQueue
,
Controller
->
FreeCommands
);
__wait_event
(
Controller
->
CommandWaitQueue
,
Controller
->
FreeCommands
);
spin_lock_irq
(
&
Controller
->
RequestQueue
->
queue_lock
);
spin_lock_irq
(
Controller
->
RequestQueue
->
queue_lock
);
}
}
...
@@ -1920,7 +1922,6 @@ static boolean DAC960_V2_ReportDeviceConfiguration(DAC960_Controller_T
...
@@ -1920,7 +1922,6 @@ static boolean DAC960_V2_ReportDeviceConfiguration(DAC960_Controller_T
return
true
;
return
true
;
}
}
/*
/*
DAC960_RegisterBlockDevice registers the Block Device structures
DAC960_RegisterBlockDevice registers the Block Device structures
associated with Controller.
associated with Controller.
...
@@ -1929,8 +1930,16 @@ static boolean DAC960_V2_ReportDeviceConfiguration(DAC960_Controller_T
...
@@ -1929,8 +1930,16 @@ static boolean DAC960_V2_ReportDeviceConfiguration(DAC960_Controller_T
static
boolean
DAC960_RegisterBlockDevice
(
DAC960_Controller_T
*
Controller
)
static
boolean
DAC960_RegisterBlockDevice
(
DAC960_Controller_T
*
Controller
)
{
{
int
MajorNumber
=
DAC960_MAJOR
+
Controller
->
ControllerNumber
;
int
MajorNumber
=
DAC960_MAJOR
+
Controller
->
ControllerNumber
;
char
*
names
;
RequestQueue_T
*
RequestQueue
;
RequestQueue_T
*
RequestQueue
;
int
MinorNumber
;
int
MinorNumber
;
int
n
;
names
=
kmalloc
(
9
*
DAC960_MaxLogicalDrives
,
GFP_KERNEL
);
if
(
!
names
)
{
DAC960_Error
(
"out of memory"
,
Controller
);
return
false
;
}
/*
/*
Register the Block Device Major Number for this DAC960 Controller.
Register the Block Device Major Number for this DAC960 Controller.
*/
*/
...
@@ -1939,13 +1948,15 @@ static boolean DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller)
...
@@ -1939,13 +1948,15 @@ static boolean DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller)
{
{
DAC960_Error
(
"UNABLE TO ACQUIRE MAJOR NUMBER %d - DETACHING
\n
"
,
DAC960_Error
(
"UNABLE TO ACQUIRE MAJOR NUMBER %d - DETACHING
\n
"
,
Controller
,
MajorNumber
);
Controller
,
MajorNumber
);
kfree
(
names
);
return
false
;
return
false
;
}
}
/*
/*
Initialize the I/O Request Queue.
Initialize the I/O Request Queue.
*/
*/
RequestQueue
=
BLK_DEFAULT_QUEUE
(
MajorNumber
);
RequestQueue
=
BLK_DEFAULT_QUEUE
(
MajorNumber
);
blk_init_queue
(
RequestQueue
,
DAC960_RequestFunction
);
Controller
->
queue_lock
=
SPIN_LOCK_UNLOCKED
;
blk_init_queue
(
RequestQueue
,
DAC960_RequestFunction
,
&
Controller
->
queue_lock
);
RequestQueue
->
queuedata
=
Controller
;
RequestQueue
->
queuedata
=
Controller
;
blk_queue_max_hw_segments
(
RequestQueue
,
blk_queue_max_hw_segments
(
RequestQueue
,
Controller
->
DriverScatterGatherLimit
);
Controller
->
DriverScatterGatherLimit
);
...
@@ -1953,27 +1964,19 @@ static boolean DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller)
...
@@ -1953,27 +1964,19 @@ static boolean DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller)
blk_queue_max_sectors
(
RequestQueue
,
Controller
->
MaxBlocksPerCommand
);
blk_queue_max_sectors
(
RequestQueue
,
Controller
->
MaxBlocksPerCommand
);
Controller
->
RequestQueue
=
RequestQueue
;
Controller
->
RequestQueue
=
RequestQueue
;
/*
for
(
n
=
0
;
n
<
DAC960_MaxLogicalDrives
;
n
++
)
{
Initialize the Disk Partitions array, Partition Sizes array, Block Sizes
struct
gendisk
*
disk
=
&
Controller
->
disks
[
n
];
array, and Max Sectors per Request array.
memset
(
disk
,
0
,
sizeof
(
struct
gendisk
));
*/
sprintf
(
names
+
9
*
n
,
"rd/c%dd%d"
,
Controller
->
ControllerNumber
,
n
);
for
(
MinorNumber
=
0
;
MinorNumber
<
DAC960_MinorCount
;
MinorNumber
++
)
disk
->
part
=
Controller
->
DiskPartitions
+
(
n
<<
DAC960_MaxPartitionsBits
);
Controller
->
MaxSectorsPerRequest
[
MinorNumber
]
=
disk
->
major
=
MajorNumber
;
Controller
->
MaxBlocksPerCommand
;
disk
->
first_minor
=
n
<<
DAC960_MaxPartitionsBits
;
Controller
->
GenericDiskInfo
.
part
=
Controller
->
DiskPartitions
;
disk
->
major_name
=
names
+
9
*
n
;
/*
disk
->
minor_shift
=
DAC960_MaxPartitionsBits
;
Complete initialization of the Generic Disk Information structure.
disk
->
nr_real
=
1
;
*/
disk
->
fops
=
&
DAC960_BlockDeviceOperations
;
Controller
->
GenericDiskInfo
.
major
=
MajorNumber
;
add_gendisk
(
disk
);
Controller
->
GenericDiskInfo
.
major_name
=
"rd"
;
}
Controller
->
GenericDiskInfo
.
minor_shift
=
DAC960_MaxPartitionsBits
;
Controller
->
GenericDiskInfo
.
nr_real
=
DAC960_MaxLogicalDrives
;
Controller
->
GenericDiskInfo
.
next
=
NULL
;
Controller
->
GenericDiskInfo
.
fops
=
&
DAC960_BlockDeviceOperations
;
/*
Install the Generic Disk Information structure at the end of the list.
*/
add_gendisk
(
&
Controller
->
GenericDiskInfo
);
/*
/*
Indicate the Block Device Registration completed successfully,
Indicate the Block Device Registration completed successfully,
*/
*/
...
@@ -1989,6 +1992,11 @@ static boolean DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller)
...
@@ -1989,6 +1992,11 @@ static boolean DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller)
static
void
DAC960_UnregisterBlockDevice
(
DAC960_Controller_T
*
Controller
)
static
void
DAC960_UnregisterBlockDevice
(
DAC960_Controller_T
*
Controller
)
{
{
int
MajorNumber
=
DAC960_MAJOR
+
Controller
->
ControllerNumber
;
int
MajorNumber
=
DAC960_MAJOR
+
Controller
->
ControllerNumber
;
int
disk
;
for
(
disk
=
0
;
disk
<
DAC960_MaxLogicalDrives
;
disk
++
)
{
del_gendisk
(
&
Controller
->
disks
[
disk
]);
kfree
(
Controller
->
disks
[
0
].
major_name
);
}
/*
/*
Unregister the Block Device Major Number for this DAC960 Controller.
Unregister the Block Device Major Number for this DAC960 Controller.
*/
*/
...
@@ -2001,14 +2009,23 @@ static void DAC960_UnregisterBlockDevice(DAC960_Controller_T *Controller)
...
@@ -2001,14 +2009,23 @@ static void DAC960_UnregisterBlockDevice(DAC960_Controller_T *Controller)
Remove the Disk Partitions array, Partition Sizes array, Block Sizes
Remove the Disk Partitions array, Partition Sizes array, Block Sizes
array, Max Sectors per Request array, and Max Segments per Request array.
array, Max Sectors per Request array, and Max Segments per Request array.
*/
*/
Controller
->
GenericDiskInfo
.
part
=
NULL
;
blk_clear
(
MajorNumber
);
blk_clear
(
MajorNumber
);
/*
Remove the Generic Disk Information structure from the list.
*/
del_gendisk
(
&
Controller
->
GenericDiskInfo
);
}
}
static
long
disk_size
(
DAC960_Controller_T
*
Controller
,
int
disk
)
{
if
(
Controller
->
FirmwareType
==
DAC960_V1_Controller
)
{
if
(
disk
>=
Controller
->
LogicalDriveCount
)
return
0
;
return
Controller
->
V1
.
LogicalDriveInformation
[
disk
].
LogicalDriveSize
;
}
else
{
DAC960_V2_LogicalDeviceInfo_T
*
LogicalDeviceInfo
=
Controller
->
V2
.
LogicalDeviceInformation
[
disk
];
if
(
LogicalDeviceInfo
==
NULL
)
return
0
;
return
LogicalDeviceInfo
->
ConfigurableDeviceSize
;
}
}
/*
/*
DAC960_ComputeGenericDiskInfo computes the values for the Generic Disk
DAC960_ComputeGenericDiskInfo computes the values for the Generic Disk
...
@@ -2017,59 +2034,21 @@ static void DAC960_UnregisterBlockDevice(DAC960_Controller_T *Controller)
...
@@ -2017,59 +2034,21 @@ static void DAC960_UnregisterBlockDevice(DAC960_Controller_T *Controller)
static
void
DAC960_ComputeGenericDiskInfo
(
DAC960_Controller_T
*
Controller
)
static
void
DAC960_ComputeGenericDiskInfo
(
DAC960_Controller_T
*
Controller
)
{
{
GenericDiskInfo_T
*
GenericDiskInfo
=
&
Controller
->
GenericDiskInfo
;
struct
gendisk
*
disks
=
Controller
->
disks
;
int
LogicalDriveNumber
,
i
;
int
disk
;
for
(
LogicalDriveNumber
=
0
;
for
(
disk
=
0
;
disk
<
DAC960_MaxLogicalDrives
;
disk
++
)
LogicalDriveNumber
<
DAC960_MaxLogicalDrives
;
disks
->
part
[
0
].
nr_sects
=
disk_size
(
Controller
,
disk
);
LogicalDriveNumber
++
)
{
int
MinorNumber
=
DAC960_MinorNumber
(
LogicalDriveNumber
,
0
);
if
(
Controller
->
FirmwareType
==
DAC960_V1_Controller
)
{
if
(
LogicalDriveNumber
<
Controller
->
LogicalDriveCount
)
GenericDiskInfo
->
part
[
MinorNumber
].
nr_sects
=
Controller
->
V1
.
LogicalDriveInformation
[
LogicalDriveNumber
].
LogicalDriveSize
;
else
GenericDiskInfo
->
part
[
MinorNumber
].
nr_sects
=
0
;
}
else
{
DAC960_V2_LogicalDeviceInfo_T
*
LogicalDeviceInfo
=
Controller
->
V2
.
LogicalDeviceInformation
[
LogicalDriveNumber
];
if
(
LogicalDeviceInfo
!=
NULL
)
GenericDiskInfo
->
part
[
MinorNumber
].
nr_sects
=
LogicalDeviceInfo
->
ConfigurableDeviceSize
;
else
GenericDiskInfo
->
part
[
MinorNumber
].
nr_sects
=
0
;
}
}
}
}
static
int
DAC960_revalidate
(
kdev_t
dev
)
/*
DAC960_RegisterDisk registers the DAC960 Logical Disk Device for Logical
Drive Number if it exists.
*/
static
void
DAC960_RegisterDisk
(
DAC960_Controller_T
*
Controller
,
int
LogicalDriveNumber
)
{
{
long
size
;
int
ctlr
=
DAC960_ControllerNumber
(
dev
);
if
(
Controller
->
FirmwareType
==
DAC960_V1_Controller
)
{
int
disk
=
DAC960_LogicalDriveNumber
(
dev
);
if
(
LogicalDriveNumber
>
Controller
->
LogicalDriveCount
-
1
)
return
;
DAC960_Controller_T
*
p
=
DAC960_Controllers
[
ctlr
];
size
=
Controller
->
V1
.
LogicalDriveInformation
p
->
disks
[
disk
].
part
[
0
].
nr_sects
=
disk_size
(
p
,
disk
);
[
LogicalDriveNumber
].
LogicalDriveSize
;
return
0
;
}
else
{
DAC960_V2_LogicalDeviceInfo_T
*
LogicalDeviceInfo
=
Controller
->
V2
.
LogicalDeviceInformation
[
LogicalDriveNumber
];
if
(
LogicalDeviceInfo
==
NULL
)
return
;
size
=
LogicalDeviceInfo
->
ConfigurableDeviceSize
;
}
register_disk
(
&
Controller
->
GenericDiskInfo
,
DAC960_KernelDevice
(
Controller
->
ControllerNumber
,
LogicalDriveNumber
,
0
),
DAC960_MaxPartitions
,
&
DAC960_BlockDeviceOperations
,
size
);
}
}
/*
/*
DAC960_ReportErrorStatus reports Controller BIOS Messages passed through
DAC960_ReportErrorStatus reports Controller BIOS Messages passed through
the Error Status Register when the driver performs the BIOS handshaking.
the Error Status Register when the driver performs the BIOS handshaking.
...
@@ -2642,14 +2621,15 @@ static int DAC960_Initialize(void)
...
@@ -2642,14 +2621,15 @@ static int DAC960_Initialize(void)
ControllerNumber
++
)
ControllerNumber
++
)
{
{
DAC960_Controller_T
*
Controller
=
DAC960_Controllers
[
ControllerNumber
];
DAC960_Controller_T
*
Controller
=
DAC960_Controllers
[
ControllerNumber
];
int
LogicalDriveNumber
;
int
disk
;
if
(
Controller
==
NULL
)
continue
;
if
(
Controller
==
NULL
)
continue
;
DAC960_InitializeController
(
Controller
);
DAC960_InitializeController
(
Controller
);
DAC960_ComputeGenericDiskInfo
(
Controller
);
for
(
disk
=
0
;
disk
<
DAC960_MaxLogicalDrives
;
disk
++
)
{
for
(
LogicalDriveNumber
=
0
;
long
size
=
disk_size
(
Controller
,
disk
);
LogicalDriveNumber
<
DAC960_MaxLogicalDrives
;
register_disk
(
&
Controller
->
disks
[
disk
],
LogicalDriveNumber
++
)
DAC960_KernelDevice
(
Controller
->
ControllerNumber
,
disk
,
0
),
DAC960_RegisterDisk
(
Controller
,
LogicalDriveNumber
);
DAC960_MaxPartitions
,
&
DAC960_BlockDeviceOperations
,
size
);
}
}
}
DAC960_CreateProcEntries
();
DAC960_CreateProcEntries
();
register_reboot_notifier
(
&
DAC960_NotifierBlock
);
register_reboot_notifier
(
&
DAC960_NotifierBlock
);
...
@@ -2732,17 +2712,17 @@ static void DAC960_V1_QueueReadWriteCommand(DAC960_Command_T *Command)
...
@@ -2732,17 +2712,17 @@ static void DAC960_V1_QueueReadWriteCommand(DAC960_Command_T *Command)
if
(
bio_data
(
BufferHeader
)
==
LastDataEndPointer
)
if
(
bio_data
(
BufferHeader
)
==
LastDataEndPointer
)
{
{
ScatterGatherList
[
SegmentNumber
-
1
].
SegmentByteCount
+=
ScatterGatherList
[
SegmentNumber
-
1
].
SegmentByteCount
+=
bio_size
(
BufferHeader
)
;
BufferHeader
->
bi_size
;
LastDataEndPointer
+=
bio_size
(
BufferHeader
)
;
LastDataEndPointer
+=
BufferHeader
->
bi_size
;
}
}
else
else
{
{
ScatterGatherList
[
SegmentNumber
].
SegmentDataPointer
=
ScatterGatherList
[
SegmentNumber
].
SegmentDataPointer
=
Virtual_to_Bus32
(
bio_data
(
BufferHeader
));
Virtual_to_Bus32
(
bio_data
(
BufferHeader
));
ScatterGatherList
[
SegmentNumber
].
SegmentByteCount
=
ScatterGatherList
[
SegmentNumber
].
SegmentByteCount
=
bio_size
(
BufferHeader
)
;
BufferHeader
->
bi_size
;
LastDataEndPointer
=
bio_data
(
BufferHeader
)
+
LastDataEndPointer
=
bio_data
(
BufferHeader
)
+
bio_size
(
BufferHeader
)
;
BufferHeader
->
bi_size
;
if
(
SegmentNumber
++
>
Controller
->
DriverScatterGatherLimit
)
if
(
SegmentNumber
++
>
Controller
->
DriverScatterGatherLimit
)
panic
(
"DAC960: Scatter/Gather Segment Overflow
\n
"
);
panic
(
"DAC960: Scatter/Gather Segment Overflow
\n
"
);
}
}
...
@@ -2823,17 +2803,17 @@ static void DAC960_V2_QueueReadWriteCommand(DAC960_Command_T *Command)
...
@@ -2823,17 +2803,17 @@ static void DAC960_V2_QueueReadWriteCommand(DAC960_Command_T *Command)
if
(
bio_data
(
BufferHeader
)
==
LastDataEndPointer
)
if
(
bio_data
(
BufferHeader
)
==
LastDataEndPointer
)
{
{
ScatterGatherList
[
SegmentNumber
-
1
].
SegmentByteCount
+=
ScatterGatherList
[
SegmentNumber
-
1
].
SegmentByteCount
+=
bio_size
(
BufferHeader
)
;
BufferHeader
->
bi_size
;
LastDataEndPointer
+=
bio_size
(
BufferHeader
)
;
LastDataEndPointer
+=
BufferHeader
->
bi_size
;
}
}
else
else
{
{
ScatterGatherList
[
SegmentNumber
].
SegmentDataPointer
=
ScatterGatherList
[
SegmentNumber
].
SegmentDataPointer
=
Virtual_to_Bus64
(
bio_data
(
BufferHeader
));
Virtual_to_Bus64
(
bio_data
(
BufferHeader
));
ScatterGatherList
[
SegmentNumber
].
SegmentByteCount
=
ScatterGatherList
[
SegmentNumber
].
SegmentByteCount
=
bio_size
(
BufferHeader
)
;
BufferHeader
->
bi_size
;
LastDataEndPointer
=
bio_data
(
BufferHeader
)
+
LastDataEndPointer
=
bio_data
(
BufferHeader
)
+
bio_size
(
BufferHeader
)
;
BufferHeader
->
bi_size
;
if
(
SegmentNumber
++
>
Controller
->
DriverScatterGatherLimit
)
if
(
SegmentNumber
++
>
Controller
->
DriverScatterGatherLimit
)
panic
(
"DAC960: Scatter/Gather Segment Overflow
\n
"
);
panic
(
"DAC960: Scatter/Gather Segment Overflow
\n
"
);
}
}
...
@@ -3055,7 +3035,7 @@ static void DAC960_V1_ProcessCompletedCommand(DAC960_Command_T *Command)
...
@@ -3055,7 +3035,7 @@ static void DAC960_V1_ProcessCompletedCommand(DAC960_Command_T *Command)
Command
->
CommandType
=
DAC960_WriteRetryCommand
;
Command
->
CommandType
=
DAC960_WriteRetryCommand
;
CommandMailbox
->
Type5
.
CommandOpcode
=
DAC960_V1_Write
;
CommandMailbox
->
Type5
.
CommandOpcode
=
DAC960_V1_Write
;
}
}
Command
->
BlockCount
=
bio_size
(
BufferHeader
)
>>
DAC960_BlockSizeBits
;
Command
->
BlockCount
=
BufferHeader
->
bi_size
>>
DAC960_BlockSizeBits
;
CommandMailbox
->
Type5
.
LD
.
TransferLength
=
Command
->
BlockCount
;
CommandMailbox
->
Type5
.
LD
.
TransferLength
=
Command
->
BlockCount
;
CommandMailbox
->
Type5
.
BusAddress
=
CommandMailbox
->
Type5
.
BusAddress
=
Virtual_to_Bus32
(
bio_data
(
BufferHeader
));
Virtual_to_Bus32
(
bio_data
(
BufferHeader
));
...
@@ -3104,9 +3084,9 @@ static void DAC960_V1_ProcessCompletedCommand(DAC960_Command_T *Command)
...
@@ -3104,9 +3084,9 @@ static void DAC960_V1_ProcessCompletedCommand(DAC960_Command_T *Command)
DAC960_V1_CommandMailbox_T
*
CommandMailbox
=
DAC960_V1_CommandMailbox_T
*
CommandMailbox
=
&
Command
->
V1
.
CommandMailbox
;
&
Command
->
V1
.
CommandMailbox
;
Command
->
BlockNumber
+=
Command
->
BlockNumber
+=
bio_size
(
BufferHeader
)
>>
DAC960_BlockSizeBits
;
BufferHeader
->
bi_size
>>
DAC960_BlockSizeBits
;
Command
->
BlockCount
=
Command
->
BlockCount
=
bio_size
(
NextBufferHeader
)
>>
DAC960_BlockSizeBits
;
NextBufferHeader
->
bi_size
>>
DAC960_BlockSizeBits
;
Command
->
BufferHeader
=
NextBufferHeader
;
Command
->
BufferHeader
=
NextBufferHeader
;
CommandMailbox
->
Type5
.
LD
.
TransferLength
=
Command
->
BlockCount
;
CommandMailbox
->
Type5
.
LD
.
TransferLength
=
Command
->
BlockCount
;
CommandMailbox
->
Type5
.
LogicalBlockAddress
=
Command
->
BlockNumber
;
CommandMailbox
->
Type5
.
LogicalBlockAddress
=
Command
->
BlockNumber
;
...
@@ -4152,7 +4132,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
...
@@ -4152,7 +4132,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
if
(
CommandType
==
DAC960_ReadCommand
)
if
(
CommandType
==
DAC960_ReadCommand
)
Command
->
CommandType
=
DAC960_ReadRetryCommand
;
Command
->
CommandType
=
DAC960_ReadRetryCommand
;
else
Command
->
CommandType
=
DAC960_WriteRetryCommand
;
else
Command
->
CommandType
=
DAC960_WriteRetryCommand
;
Command
->
BlockCount
=
bio_size
(
BufferHeader
)
>>
DAC960_BlockSizeBits
;
Command
->
BlockCount
=
BufferHeader
->
bi_size
>>
DAC960_BlockSizeBits
;
CommandMailbox
->
SCSI_10
.
CommandControlBits
CommandMailbox
->
SCSI_10
.
CommandControlBits
.
AdditionalScatterGatherListMemory
=
false
;
.
AdditionalScatterGatherListMemory
=
false
;
CommandMailbox
->
SCSI_10
.
DataTransferSize
=
CommandMailbox
->
SCSI_10
.
DataTransferSize
=
...
@@ -4208,9 +4188,9 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
...
@@ -4208,9 +4188,9 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
if
(
NextBufferHeader
!=
NULL
)
if
(
NextBufferHeader
!=
NULL
)
{
{
Command
->
BlockNumber
+=
Command
->
BlockNumber
+=
bio_size
(
BufferHeader
)
>>
DAC960_BlockSizeBits
;
BufferHeader
->
bi_size
>>
DAC960_BlockSizeBits
;
Command
->
BlockCount
=
Command
->
BlockCount
=
bio_size
(
NextBufferHeader
)
>>
DAC960_BlockSizeBits
;
NextBufferHeader
->
bi_size
>>
DAC960_BlockSizeBits
;
Command
->
BufferHeader
=
NextBufferHeader
;
Command
->
BufferHeader
=
NextBufferHeader
;
CommandMailbox
->
SCSI_10
.
DataTransferSize
=
CommandMailbox
->
SCSI_10
.
DataTransferSize
=
Command
->
BlockCount
<<
DAC960_BlockSizeBits
;
Command
->
BlockCount
<<
DAC960_BlockSizeBits
;
...
@@ -5289,11 +5269,15 @@ static int DAC960_Open(Inode_T *Inode, File_T *File)
...
@@ -5289,11 +5269,15 @@ static int DAC960_Open(Inode_T *Inode, File_T *File)
}
}
if
(
!
Controller
->
LogicalDriveInitiallyAccessible
[
LogicalDriveNumber
])
if
(
!
Controller
->
LogicalDriveInitiallyAccessible
[
LogicalDriveNumber
])
{
{
long
size
;
Controller
->
LogicalDriveInitiallyAccessible
[
LogicalDriveNumber
]
=
true
;
Controller
->
LogicalDriveInitiallyAccessible
[
LogicalDriveNumber
]
=
true
;
DAC960_ComputeGenericDiskInfo
(
Controller
);
size
=
disk_size
(
Controller
,
LogicalDriveNumber
);
DAC960_RegisterDisk
(
Controller
,
LogicalDriveNumber
);
/* BROKEN, same as modular ide-floppy/ide-disk; same fix - ->probe() */
register_disk
(
&
Controller
->
disks
[
LogicalDriveNumber
],
DAC960_KernelDevice
(
Controller
->
ControllerNumber
,
LogicalDriveNumber
,
0
),
DAC960_MaxPartitions
,
&
DAC960_BlockDeviceOperations
,
size
);
}
}
if
(
Controller
->
GenericDiskInfo
.
part
[
minor
(
Inode
->
i_rdev
)
].
nr_sects
==
0
)
if
(
Controller
->
disks
[
LogicalDriveNumber
].
part
[
0
].
nr_sects
==
0
)
return
-
ENXIO
;
return
-
ENXIO
;
/*
/*
Increment Controller and Logical Drive Usage Counts.
Increment Controller and Logical Drive Usage Counts.
...
@@ -5391,18 +5375,6 @@ static int DAC960_IOCTL(Inode_T *Inode, File_T *File,
...
@@ -5391,18 +5375,6 @@ static int DAC960_IOCTL(Inode_T *Inode, File_T *File,
Geometry
.
start
=
get_start_sect
(
Inode
->
i_bdev
);
Geometry
.
start
=
get_start_sect
(
Inode
->
i_bdev
);
return
(
copy_to_user
(
UserGeometry
,
&
Geometry
,
return
(
copy_to_user
(
UserGeometry
,
&
Geometry
,
sizeof
(
DiskGeometry_T
))
?
-
EFAULT
:
0
);
sizeof
(
DiskGeometry_T
))
?
-
EFAULT
:
0
);
case
BLKRRPART
:
/* Re-Read Partition Table. */
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EACCES
;
if
(
Controller
->
LogicalDriveUsageCount
[
LogicalDriveNumber
]
>
1
)
return
-
EBUSY
;
res
=
wipe_partitions
(
Inode
->
i_rdev
);
if
(
res
)
/* nothing */
return
res
;
DAC960_RegisterDisk
(
Controller
,
LogicalDriveNumber
);
return
0
;
}
}
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
@@ -5528,11 +5500,11 @@ static int DAC960_UserIOCTL(Inode_T *Inode, File_T *File,
...
@@ -5528,11 +5500,11 @@ static int DAC960_UserIOCTL(Inode_T *Inode, File_T *File,
while
(
Controller
->
V1
.
DirectCommandActive
[
DCDB
.
Channel
]
while
(
Controller
->
V1
.
DirectCommandActive
[
DCDB
.
Channel
]
[
DCDB
.
TargetID
])
[
DCDB
.
TargetID
])
{
{
spin_unlock_irq
(
&
Controller
->
RequestQueue
->
queue_lock
);
spin_unlock_irq
(
Controller
->
RequestQueue
->
queue_lock
);
__wait_event
(
Controller
->
CommandWaitQueue
,
__wait_event
(
Controller
->
CommandWaitQueue
,
!
Controller
->
V1
.
DirectCommandActive
!
Controller
->
V1
.
DirectCommandActive
[
DCDB
.
Channel
][
DCDB
.
TargetID
]);
[
DCDB
.
Channel
][
DCDB
.
TargetID
]);
spin_lock_irq
(
&
Controller
->
RequestQueue
->
queue_lock
);
spin_lock_irq
(
Controller
->
RequestQueue
->
queue_lock
);
}
}
Controller
->
V1
.
DirectCommandActive
[
DCDB
.
Channel
]
Controller
->
V1
.
DirectCommandActive
[
DCDB
.
Channel
]
[
DCDB
.
TargetID
]
=
true
;
[
DCDB
.
TargetID
]
=
true
;
...
@@ -5571,7 +5543,6 @@ static int DAC960_UserIOCTL(Inode_T *Inode, File_T *File,
...
@@ -5571,7 +5543,6 @@ static int DAC960_UserIOCTL(Inode_T *Inode, File_T *File,
ErrorCode
=
-
EFAULT
;
ErrorCode
=
-
EFAULT
;
goto
Failure1
;
goto
Failure1
;
}
}
}
if
(
CommandOpcode
==
DAC960_V1_DCDB
)
if
(
CommandOpcode
==
DAC960_V1_DCDB
)
{
{
Controller
->
V1
.
DirectCommandActive
[
DCDB
.
Channel
]
Controller
->
V1
.
DirectCommandActive
[
DCDB
.
Channel
]
...
...
drivers/block/DAC960.h
View file @
d843f16d
...
@@ -2195,7 +2195,6 @@ typedef struct bio BufferHeader_T;
...
@@ -2195,7 +2195,6 @@ typedef struct bio BufferHeader_T;
typedef
struct
file
File_T
;
typedef
struct
file
File_T
;
typedef
struct
block_device_operations
BlockDeviceOperations_T
;
typedef
struct
block_device_operations
BlockDeviceOperations_T
;
typedef
struct
completion
Completion_T
;
typedef
struct
completion
Completion_T
;
typedef
struct
gendisk
GenericDiskInfo_T
;
typedef
struct
hd_geometry
DiskGeometry_T
;
typedef
struct
hd_geometry
DiskGeometry_T
;
typedef
struct
hd_struct
DiskPartition_T
;
typedef
struct
hd_struct
DiskPartition_T
;
typedef
struct
inode
Inode_T
;
typedef
struct
inode
Inode_T
;
...
@@ -2362,11 +2361,12 @@ typedef struct DAC960_Controller
...
@@ -2362,11 +2361,12 @@ typedef struct DAC960_Controller
boolean
MonitoringAlertMode
;
boolean
MonitoringAlertMode
;
boolean
SuppressEnclosureMessages
;
boolean
SuppressEnclosureMessages
;
Timer_T
MonitoringTimer
;
Timer_T
MonitoringTimer
;
GenericDiskInfo_T
GenericDiskInfo
;
struct
gendisk
disks
[
DAC960_MaxLogicalDrives
]
;
DAC960_Command_T
*
FreeCommands
;
DAC960_Command_T
*
FreeCommands
;
unsigned
char
*
CombinedStatusBuffer
;
unsigned
char
*
CombinedStatusBuffer
;
unsigned
char
*
CurrentStatusBuffer
;
unsigned
char
*
CurrentStatusBuffer
;
RequestQueue_T
*
RequestQueue
;
RequestQueue_T
*
RequestQueue
;
spinlock_t
queue_lock
;
WaitQueue_T
CommandWaitQueue
;
WaitQueue_T
CommandWaitQueue
;
WaitQueue_T
HealthStatusWaitQueue
;
WaitQueue_T
HealthStatusWaitQueue
;
DAC960_Command_T
InitialCommand
;
DAC960_Command_T
InitialCommand
;
...
@@ -2506,7 +2506,7 @@ static inline
...
@@ -2506,7 +2506,7 @@ static inline
void
DAC960_AcquireControllerLock
(
DAC960_Controller_T
*
Controller
,
void
DAC960_AcquireControllerLock
(
DAC960_Controller_T
*
Controller
,
ProcessorFlags_T
*
ProcessorFlags
)
ProcessorFlags_T
*
ProcessorFlags
)
{
{
spin_lock_irqsave
(
&
Controller
->
RequestQueue
->
queue_lock
,
*
ProcessorFlags
);
spin_lock_irqsave
(
Controller
->
RequestQueue
->
queue_lock
,
*
ProcessorFlags
);
}
}
...
@@ -2518,7 +2518,7 @@ static inline
...
@@ -2518,7 +2518,7 @@ static inline
void
DAC960_ReleaseControllerLock
(
DAC960_Controller_T
*
Controller
,
void
DAC960_ReleaseControllerLock
(
DAC960_Controller_T
*
Controller
,
ProcessorFlags_T
*
ProcessorFlags
)
ProcessorFlags_T
*
ProcessorFlags
)
{
{
spin_unlock_irqrestore
(
&
Controller
->
RequestQueue
->
queue_lock
,
*
ProcessorFlags
);
spin_unlock_irqrestore
(
Controller
->
RequestQueue
->
queue_lock
,
*
ProcessorFlags
);
}
}
...
@@ -2555,7 +2555,7 @@ static inline
...
@@ -2555,7 +2555,7 @@ static inline
void
DAC960_AcquireControllerLockIH
(
DAC960_Controller_T
*
Controller
,
void
DAC960_AcquireControllerLockIH
(
DAC960_Controller_T
*
Controller
,
ProcessorFlags_T
*
ProcessorFlags
)
ProcessorFlags_T
*
ProcessorFlags
)
{
{
spin_lock_irqsave
(
&
Controller
->
RequestQueue
->
queue_lock
,
*
ProcessorFlags
);
spin_lock_irqsave
(
Controller
->
RequestQueue
->
queue_lock
,
*
ProcessorFlags
);
}
}
...
@@ -2568,7 +2568,7 @@ static inline
...
@@ -2568,7 +2568,7 @@ static inline
void
DAC960_ReleaseControllerLockIH
(
DAC960_Controller_T
*
Controller
,
void
DAC960_ReleaseControllerLockIH
(
DAC960_Controller_T
*
Controller
,
ProcessorFlags_T
*
ProcessorFlags
)
ProcessorFlags_T
*
ProcessorFlags
)
{
{
spin_unlock_irqrestore
(
&
Controller
->
RequestQueue
->
queue_lock
,
*
ProcessorFlags
);
spin_unlock_irqrestore
(
Controller
->
RequestQueue
->
queue_lock
,
*
ProcessorFlags
);
}
}
#error I am a non-portable driver, please convert me to use the Documentation/DMA-mapping.txt interfaces
#error I am a non-portable driver, please convert me to use the Documentation/DMA-mapping.txt interfaces
...
@@ -4230,12 +4230,4 @@ static void DAC960_Message(DAC960_MessageLevel_T, unsigned char *,
...
@@ -4230,12 +4230,4 @@ static void DAC960_Message(DAC960_MessageLevel_T, unsigned char *,
static
void
DAC960_CreateProcEntries
(
void
);
static
void
DAC960_CreateProcEntries
(
void
);
static
void
DAC960_DestroyProcEntries
(
void
);
static
void
DAC960_DestroyProcEntries
(
void
);
/*
Export the Kernel Mode IOCTL interface.
*/
EXPORT_SYMBOL
(
DAC960_KernelIOCTL
);
#endif
/* DAC960_DriverVersion */
#endif
/* DAC960_DriverVersion */
fs/partitions/check.c
View file @
d843f16d
...
@@ -142,11 +142,6 @@ char *disk_name (struct gendisk *hd, int minor, char *buf)
...
@@ -142,11 +142,6 @@ char *disk_name (struct gendisk *hd, int minor, char *buf)
hd
->
major
-
COMPAQ_CISS_MAJOR
,
unit
);
hd
->
major
-
COMPAQ_CISS_MAJOR
,
unit
);
maj
=
s
;
maj
=
s
;
break
;
break
;
case
DAC960_MAJOR
...
DAC960_MAJOR
+
7
:
sprintf
(
s
,
"rd/c%dd%d"
,
hd
->
major
-
DAC960_MAJOR
,
unit
);
maj
=
s
;
break
;
case
ATARAID_MAJOR
:
case
ATARAID_MAJOR
:
sprintf
(
s
,
"ataraid/d%d"
,
unit
);
sprintf
(
s
,
"ataraid/d%d"
,
unit
);
maj
=
s
;
maj
=
s
;
...
...
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