Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
spec-sw
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
fmc-projects
spec
spec-sw
Commits
3c1453e1
Commit
3c1453e1
authored
12 years ago
by
Alessandro Rubini
Browse files
Options
Downloads
Patches
Plain Diff
fmc: new irq-related operations
parent
a0a8c8ea
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
doc/fmc-bus.in
+11
-5
11 additions, 5 deletions
doc/fmc-bus.in
kernel/include/linux/fmc.h
+4
-0
4 additions, 0 deletions
kernel/include/linux/fmc.h
with
15 additions
and
5 deletions
doc/fmc-bus.in
+
11
−
5
View file @
3c1453e1
...
@@ -185,7 +185,10 @@ struct fmc_operations {
...
@@ -185,7 +185,10 @@ struct fmc_operations {
uint32
_
t (*readl)(struct fmc
_
device *d, int offset);
uint32
_
t (*readl)(struct fmc
_
device *d, int offset);
void (*writel)(struct fmc
_
device *d, int offset, uint32
_
t value);
void (*writel)(struct fmc
_
device *d, int offset, uint32
_
t value);
int (*reprogram)(struct fmc
_
device *d, void *data, int len);
int (*reprogram)(struct fmc
_
device *d, void *data, int len);
int (*irq
_
request)(struct fmc
_
device *d, irq
_
handler
_
t h,
char *name, int flags);
void (*irq
_
ack)(struct fmc
_
device *d);
void (*irq
_
ack)(struct fmc
_
device *d);
int (*irq
_
free)(struct fmc
_
device *d);
int (*read
_
ee)(struct fmc
_
device *d, int pos, void *data, int len);
int (*read
_
ee)(struct fmc
_
device *d, int pos, void *data, int len);
int (*write
_
ee)(struct fmc
_
device *d, int pos, void *data, int len);
int (*write
_
ee)(struct fmc
_
device *d, int pos, void *data, int len);
}
;
}
;
...
@@ -216,12 +219,15 @@ The individual methods perform the following tasks:
...
@@ -216,12 +219,15 @@ The individual methods perform the following tasks:
carrier will reprogram the golden binary -- which will happen
carrier will reprogram the golden binary -- which will happen
after @i
{
remove
}
time in any case.
after @i
{
remove
}
time in any case.
@item irq
_
ack
@item irq
_
request
@itemx irq
_
ack
@itemx irq
_
free
Interrupt acknowledge is carrier-specific, so it is abstracted
Interrupt management is carrier-specific, so it is abstracted
as an operation. Interrupts on the other hand are expected to be
as operations. The interrupt number is listed in the device
reported by normal host means, at the IRQ number stated in the
structure, but it's only informative for the mezzanine driver.
device structure.
The handler will receive the @i
{
fmc
}
pointer as @i
{
dev
_
id
}
; the
@i
{
flags
}
argument is still to be defined.
@item read
_
ee
@item read
_
ee
@itemx write
_
ee
@itemx write
_
ee
...
...
This diff is collapsed.
Click to expand it.
kernel/include/linux/fmc.h
+
4
−
0
View file @
3c1453e1
...
@@ -11,6 +11,7 @@
...
@@ -11,6 +11,7 @@
#define __LINUX_FMC_H__
#define __LINUX_FMC_H__
#include
<linux/types.h>
#include
<linux/types.h>
#include
<linux/device.h>
#include
<linux/device.h>
#include
<linux/interrupt.h>
struct
fmc_device
;
struct
fmc_device
;
struct
fmc_driver
;
struct
fmc_driver
;
...
@@ -35,7 +36,10 @@ struct fmc_operations {
...
@@ -35,7 +36,10 @@ struct fmc_operations {
uint32_t
(
*
readl
)(
struct
fmc_device
*
d
,
int
offset
);
uint32_t
(
*
readl
)(
struct
fmc_device
*
d
,
int
offset
);
void
(
*
writel
)(
struct
fmc_device
*
d
,
int
offset
,
uint32_t
value
);
void
(
*
writel
)(
struct
fmc_device
*
d
,
int
offset
,
uint32_t
value
);
int
(
*
reprogram
)(
struct
fmc_device
*
d
,
void
*
data
,
int
len
);
int
(
*
reprogram
)(
struct
fmc_device
*
d
,
void
*
data
,
int
len
);
int
(
*
irq_request
)(
struct
fmc_device
*
d
,
irq_handler_t
h
,
char
*
name
,
int
flags
);
void
(
*
irq_ack
)(
struct
fmc_device
*
d
);
void
(
*
irq_ack
)(
struct
fmc_device
*
d
);
int
(
*
irq_free
)(
struct
fmc_device
*
d
);
int
(
*
read_ee
)(
struct
fmc_device
*
d
,
int
pos
,
void
*
data
,
int
len
);
int
(
*
read_ee
)(
struct
fmc_device
*
d
,
int
pos
,
void
*
data
,
int
len
);
int
(
*
write_ee
)(
struct
fmc_device
*
d
,
int
pos
,
void
*
data
,
int
len
);
int
(
*
write_ee
)(
struct
fmc_device
*
d
,
int
pos
,
void
*
data
,
int
len
);
};
};
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment