Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
Simple VME FMC Carrier SVEC - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Simple VME FMC Carrier SVEC - Software
Commits
dce08ccb
Commit
dce08ccb
authored
Mar 01, 2013
by
Luis Fernando Ruiz
Committed by
Juan David González Cobas
Mar 27, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cambios a .c's
parent
711d935b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
23 additions
and
23 deletions
+23
-23
svec-fmc.c
kernel/svec-fmc.c
+12
-13
svec_drv.c
kernel/svec_drv.c
+11
-10
No files found.
kernel/svec-fmc.c
View file @
dce08ccb
...
...
@@ -151,14 +151,13 @@ static struct fmc_operations svec_fmc_operations = {
.
validate
=
svec_validate
,
};
int
svec_fmc_prepare
(
struct
svec_dev
*
svec
,
unsigned
int
carrier
_slot
)
int
svec_fmc_prepare
(
struct
svec_dev
*
svec
,
unsigned
int
fmc
_slot
)
{
struct
fmc_device
*
fmc
=
svec
->
fmcs
+
carrier_slot
;
unsigned
long
vme_slot
=
(
svec
->
vmebase1
>>
19
);
struct
fmc_device
*
fmc
=
svec
->
fmcs
+
fmc_slot
;
int
ret
=
0
;
/* FIXME: For now, only two mezzanines carrier */
if
(
carrier_slot
<
0
||
carrier_slot
>
1
)
if
(
fmc_slot
<
0
||
fmc_slot
>
1
)
return
-
EINVAL
;
fmc
->
version
=
FMC_VERSION
;
...
...
@@ -172,13 +171,13 @@ int svec_fmc_prepare(struct svec_dev *svec, unsigned int carrier_slot)
fmc
->
op
=
&
svec_fmc_operations
;
fmc
->
hwdev
=
svec
->
dev
;
/* for messages */
fmc
->
slot_id
=
carrier
_slot
;
fmc
->
device_id
=
(
vme_slot
<<
6
)
|
carrier
_slot
;
fmc
->
eeprom_addr
=
0x50
+
2
*
carrier
_slot
;
fmc
->
slot_id
=
fmc
_slot
;
fmc
->
device_id
=
(
svec
->
slot
<<
6
)
|
fmc
_slot
;
fmc
->
eeprom_addr
=
0x50
+
2
*
fmc
_slot
;
fmc
->
memlen
=
0x100000
;
ret
=
svec_i2c_init
(
fmc
,
carrier
_slot
);
ret
=
svec_i2c_init
(
fmc
,
fmc
_slot
);
if
(
ret
)
{
dev_err
(
svec
->
dev
,
"Error %d on svec i2c init"
,
ret
);
return
ret
;
...
...
@@ -196,19 +195,19 @@ int svec_fmc_create(struct svec_dev *svec)
int
error
=
0
;
/* fmc structures filling */
for
(
i
=
0
;
i
<
svec
->
slot
_n
;
i
++
)
{
for
(
i
=
0
;
i
<
svec
->
fmcs
_n
;
i
++
)
{
error
=
svec_fmc_prepare
(
svec
,
i
);
if
(
error
)
goto
failed
;
}
/* fmc device creation */
error
=
fmc_device_register_n
(
svec
->
fmcs
,
svec
->
slot
_n
);
error
=
fmc_device_register_n
(
svec
->
fmcs
,
svec
->
fmcs
_n
);
if
(
error
)
{
dev_err
(
svec
->
dev
,
"Error registering fmc devices
\n
"
);
goto
failed
;
}
dev_info
(
svec
->
dev
,
"%d fmc devices registered
\n
"
,
svec
->
slot
_n
);
dev_info
(
svec
->
dev
,
"%d fmc devices registered
\n
"
,
svec
->
fmcs
_n
);
failed:
return
error
;
...
...
@@ -218,9 +217,9 @@ failed:
void
svec_fmc_destroy
(
struct
svec_dev
*
svec
)
{
if
(
svec
->
fmcs
)
{
fmc_device_unregister_n
(
svec
->
fmcs
,
svec
->
slot
_n
);
fmc_device_unregister_n
(
svec
->
fmcs
,
svec
->
fmcs
_n
);
kfree
(
svec
->
fmcs
);
dev_info
(
svec
->
dev
,
"%d fmc devices unregistered
\n
"
,
svec
->
slot
_n
);
svec
->
fmcs
_n
);
}
}
kernel/svec_drv.c
View file @
dce08ccb
...
...
@@ -23,8 +23,8 @@
char
*
svec_fw_name
=
"fmc/svec_golden.bin"
;
/* Module parameters */
static
long
vmebase1
[
SVEC_MAX_DEVICES
];
static
unsigned
int
vmebase1
_num
;
static
int
slot
[
SVEC_MAX_DEVICES
];
static
unsigned
int
slot
_num
;
static
long
vmebase2
[
SVEC_MAX_DEVICES
];
static
unsigned
int
vmebase2_num
;
static
char
*
fw_name
[
SVEC_MAX_DEVICES
];
...
...
@@ -35,10 +35,10 @@ static int lun[SVEC_MAX_DEVICES] = SVEC_DEFAULT_IDX;
static
unsigned
int
lun_num
;
module_param_array
(
vmebase1
,
ulong
,
&
vmebase1
_num
,
S_IRUGO
);
MODULE_PARM_DESC
(
vmebase1
,
"VME Base Adress #1 of the SVEC car
d"
);
module_param_array
(
slot
,
ulong
,
&
slot
_num
,
S_IRUGO
);
MODULE_PARM_DESC
(
slot
,
"Slot where SVEC card is installe
d"
);
module_param_array
(
vmebase2
,
ulong
,
&
vmebase2_num
,
S_IRUGO
);
MODULE_PARM_DESC
(
vmebase2
,
"VME Base
Adress #2 of the SVEC card
"
);
MODULE_PARM_DESC
(
vmebase2
,
"VME Base
address of the SVEC card registers
"
);
module_param_array_named
(
fw_name
,
fw_name
,
charp
,
&
fw_name_num
,
S_IRUGO
);
MODULE_PARM_DESC
(
fw_name
,
"firmware file"
);
module_param_array
(
vector
,
int
,
&
vector_num
,
S_IRUGO
);
...
...
@@ -55,7 +55,7 @@ int svec_map_window(struct svec_dev *svec, enum svec_map_win map_type)
struct
device
*
dev
=
svec
->
dev
;
enum
vme_address_modifier
am
=
VME_CR_CSR
;
enum
vme_data_width
dw
=
VME_D32
;
unsigned
long
base
=
svec
->
vmebase1
;
unsigned
long
base
=
svec
->
slot
*
0x80000
;
unsigned
int
size
=
0x80000
;
int
rval
;
...
...
@@ -353,7 +353,7 @@ static int __devinit svec_probe(struct device *pdev, unsigned int ndev)
/* Initialize struct fields*/
svec
->
lun
=
lun
[
ndev
];
svec
->
vmebase1
=
vmebase1
[
ndev
];
svec
->
slot
=
slot
[
ndev
];
svec
->
vmebase2
=
vmebase2
[
ndev
];
svec
->
vector
=
vector
[
ndev
];
svec
->
level
=
SVEC_IRQ_LEVEL
;
/* Default value */
...
...
@@ -387,8 +387,9 @@ static int __devinit svec_probe(struct device *pdev, unsigned int ndev)
#endif
strlcpy
(
svec
->
driver
,
DRIVER_NAME
,
sizeof
(
svec
->
driver
));
snprintf
(
svec
->
description
,
sizeof
(
svec
->
description
),
"SVEC at VME-A32 0x%08lx - 0x%08lx irqv %d irql %d"
,
svec
->
vmebase1
,
svec
->
vmebase2
,
vector
[
ndev
],
svec
->
level
);
"SVEC at VME-A32 slot %d 0x%08x - 0x%08lx irqv %d irql %d"
,
svec
->
slot
,
svec
->
slot
<<
19
,
svec
->
vmebase2
,
vector
[
ndev
],
svec
->
level
);
dev_info
(
pdev
,
"%s
\n
"
,
svec
->
description
);
...
...
@@ -445,7 +446,7 @@ static int __init svec_init(void)
int
error
=
0
;
/* Check that all insmod argument vectors are the same length */
if
(
lun_num
!=
vmebase1
_num
||
lun_num
!=
vmebase2_num
||
if
(
lun_num
!=
slot
_num
||
lun_num
!=
vmebase2_num
||
lun_num
!=
vector_num
)
{
pr_err
(
"%s: The number of parameters doesn't match
\n
"
,
__func__
);
return
-
EINVAL
;
...
...
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