Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
scsi
aacraid
rkt.c
Go to the documentation of this file.
1
/*
2
* Adaptec AAC series RAID controller driver
3
* (c) Copyright 2001 Red Hat Inc.
4
*
5
* based on the old aacraid driver that is..
6
* Adaptec aacraid device driver for Linux.
7
*
8
* Copyright (c) 2000-2010 Adaptec, Inc.
9
* 2010 PMC-Sierra, Inc. (
[email protected]
)
10
*
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation; either version 2, or (at your option)
14
* any later version.
15
*
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with this program; see the file COPYING. If not, write to
23
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24
*
25
* Module Name:
26
* rkt.c
27
*
28
* Abstract: Hardware miniport for Drawbridge specific hardware functions.
29
*
30
*/
31
32
#include <
linux/blkdev.h
>
33
34
#include <
scsi/scsi_host.h
>
35
36
#include "
aacraid.h
"
37
38
#define AAC_NUM_IO_FIB_RKT (246 - AAC_NUM_MGT_FIB)
39
46
static
int
aac_rkt_select_comm(
struct
aac_dev
*
dev
,
int
comm)
47
{
48
int
retval
;
49
retval =
aac_rx_select_comm
(dev, comm);
50
if
(comm ==
AAC_COMM_MESSAGE
) {
51
/*
52
* FIB Setup has already been done, but we can minimize the
53
* damage by at least ensuring the OS never issues more
54
* commands than we can handle. The Rocket adapters currently
55
* can only handle 246 commands and 8 AIFs at the same time,
56
* and in fact do notify us accordingly if we negotiate the
57
* FIB size. The problem that causes us to add this check is
58
* to ensure that we do not overdo it with the adapter when a
59
* hard coded FIB override is being utilized. This special
60
* case warrants this half baked, but convenient, check here.
61
*/
62
if
(dev->
scsi_host_ptr
->can_queue >
AAC_NUM_IO_FIB_RKT
) {
63
dev->
init
->MaxIoCommands =
64
cpu_to_le32
(
AAC_NUM_IO_FIB_RKT
+
AAC_NUM_MGT_FIB
);
65
dev->
scsi_host_ptr
->can_queue =
AAC_NUM_IO_FIB_RKT
;
66
}
67
}
68
return
retval
;
69
}
70
76
static
int
aac_rkt_ioremap(
struct
aac_dev
*
dev
,
u32
size
)
77
{
78
if
(!size) {
79
iounmap
(dev->
regs
.
rkt
);
80
return
0;
81
}
82
dev->
base
= dev->
regs
.
rkt
=
ioremap
(dev->
base_start
, size);
83
if
(dev->
base
==
NULL
)
84
return
-1;
85
dev->
IndexRegs
= &dev->
regs
.
rkt
->IndexRegs;
86
return
0;
87
}
88
98
int
aac_rkt_init
(
struct
aac_dev
*dev)
99
{
100
/*
101
* Fill in the function dispatch table.
102
*/
103
dev->
a_ops
.adapter_ioremap = aac_rkt_ioremap;
104
dev->
a_ops
.adapter_comm = aac_rkt_select_comm;
105
106
return
_aac_rx_init
(dev);
107
}
Generated on Thu Jan 10 2013 14:18:44 for Linux Kernel by
1.8.2