Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC DEL 1ns 4cha - 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
FMC DEL 1ns 4cha - Software
Commits
d7a00892
Commit
d7a00892
authored
Jan 22, 2013
by
Alessandro Rubini
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel/fd-zio.c: ported to v1.0
Signed-off-by:
Alessandro Rubini
<
rubini@gnudd.com
>
parent
0e5990c6
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
71 additions
and
72 deletions
+71
-72
fd-zio.c
kernel/fd-zio.c
+71
-72
No files found.
kernel/fd-zio.c
View file @
d7a00892
...
...
@@ -33,51 +33,51 @@
/* The sample size. Mandatory, device-wide */
DEFINE_ZATTR_STD
(
Z
DEV
,
fd_zattr_dev_std
)
=
{
Z
ATTR_REG
(
zdev
,
Z
ATTR_NBITS
,
S_IRUGO
,
0
,
32
),
/* 32 bits. Really? */
ZIO_ATTR_DEFINE_STD
(
ZIO_
DEV
,
fd_zattr_dev_std
)
=
{
Z
IO_ATTR
(
zdev
,
ZIO_
ATTR_NBITS
,
S_IRUGO
,
0
,
32
),
/* 32 bits. Really? */
};
/* Extended attributes for the device */
static
struct
zio_attribute
fd_zattr_dev
[]
=
{
Z
ATTR_EXT_REG
(
"version"
,
S_IRUGO
,
FD_ATTR_DEV_VERSION
,
Z
IO_ATTR_EXT
(
"version"
,
S_IRUGO
,
FD_ATTR_DEV_VERSION
,
FDELAY_VERSION
),
Z
ATTR_EXT_REG
(
"utc-h"
,
_RW_
,
FD_ATTR_DEV_UTC_H
,
0
),
Z
ATTR_EXT_REG
(
"utc-l"
,
_RW_
,
FD_ATTR_DEV_UTC_L
,
0
),
Z
ATTR_EXT_REG
(
"coarse"
,
_RW_
,
FD_ATTR_DEV_COARSE
,
0
),
Z
ATTR_EXT_REG
(
"command"
,
S_IWUGO
,
FD_ATTR_DEV_COMMAND
,
0
),
Z
ATTR_EXT_REG
(
"temperature"
,
_RW_
,
FD_ATTR_DEV_TEMP
,
0
),
Z
IO_ATTR_EXT
(
"utc-h"
,
_RW_
,
FD_ATTR_DEV_UTC_H
,
0
),
Z
IO_ATTR_EXT
(
"utc-l"
,
_RW_
,
FD_ATTR_DEV_UTC_L
,
0
),
Z
IO_ATTR_EXT
(
"coarse"
,
_RW_
,
FD_ATTR_DEV_COARSE
,
0
),
Z
IO_ATTR_EXT
(
"command"
,
S_IWUGO
,
FD_ATTR_DEV_COMMAND
,
0
),
Z
IO_ATTR_EXT
(
"temperature"
,
_RW_
,
FD_ATTR_DEV_TEMP
,
0
),
};
/* Extended attributes for the TDC (== input) cset */
static
struct
zio_attribute
fd_zattr_input
[]
=
{
Z
ATTR_EXT_REG
(
"utc-h"
,
S_IRUGO
,
FD_ATTR_TDC_UTC_H
,
0
),
Z
ATTR_EXT_REG
(
"utc-l"
,
S_IRUGO
,
FD_ATTR_TDC_UTC_L
,
0
),
Z
ATTR_EXT_REG
(
"coarse"
,
S_IRUGO
,
FD_ATTR_TDC_COARSE
,
0
),
Z
ATTR_EXT_REG
(
"frac"
,
S_IRUGO
,
FD_ATTR_TDC_FRAC
,
0
),
Z
ATTR_EXT_REG
(
"seq"
,
S_IRUGO
,
FD_ATTR_TDC_SEQ
,
0
),
Z
ATTR_EXT_REG
(
"chan"
,
S_IRUGO
,
FD_ATTR_TDC_CHAN
,
0
),
Z
ATTR_EXT_REG
(
"flags"
,
_RW_
,
FD_ATTR_TDC_FLAGS
,
0
),
Z
ATTR_EXT_REG
(
"offset"
,
_RW_
,
FD_ATTR_TDC_OFFSET
,
0
),
Z
ATTR_EXT_REG
(
"user-offset"
,
_RW_
,
FD_ATTR_TDC_USER_OFF
,
0
),
Z
IO_ATTR_EXT
(
"utc-h"
,
S_IRUGO
,
FD_ATTR_TDC_UTC_H
,
0
),
Z
IO_ATTR_EXT
(
"utc-l"
,
S_IRUGO
,
FD_ATTR_TDC_UTC_L
,
0
),
Z
IO_ATTR_EXT
(
"coarse"
,
S_IRUGO
,
FD_ATTR_TDC_COARSE
,
0
),
Z
IO_ATTR_EXT
(
"frac"
,
S_IRUGO
,
FD_ATTR_TDC_FRAC
,
0
),
Z
IO_ATTR_EXT
(
"seq"
,
S_IRUGO
,
FD_ATTR_TDC_SEQ
,
0
),
Z
IO_ATTR_EXT
(
"chan"
,
S_IRUGO
,
FD_ATTR_TDC_CHAN
,
0
),
Z
IO_ATTR_EXT
(
"flags"
,
_RW_
,
FD_ATTR_TDC_FLAGS
,
0
),
Z
IO_ATTR_EXT
(
"offset"
,
_RW_
,
FD_ATTR_TDC_OFFSET
,
0
),
Z
IO_ATTR_EXT
(
"user-offset"
,
_RW_
,
FD_ATTR_TDC_USER_OFF
,
0
),
};
/* Extended attributes for the output csets (most not-read-nor-write mode) */
static
struct
zio_attribute
fd_zattr_output
[]
=
{
Z
ATTR_EXT_REG
(
"mode"
,
S_IRUGO
,
FD_ATTR_OUT_MODE
,
0
),
Z
ATTR_EXT_REG
(
"rep"
,
0
,
FD_ATTR_OUT_REP
,
0
),
Z
ATTR_EXT_REG
(
"start-h"
,
0
,
FD_ATTR_OUT_START_H
,
0
),
Z
ATTR_EXT_REG
(
"start-l"
,
0
,
FD_ATTR_OUT_START_L
,
0
),
Z
ATTR_EXT_REG
(
"start-coarse"
,
0
,
FD_ATTR_OUT_START_COARSE
,
0
),
Z
ATTR_EXT_REG
(
"start-fine"
,
0
,
FD_ATTR_OUT_START_FINE
,
0
),
Z
ATTR_EXT_REG
(
"end-h"
,
0
,
FD_ATTR_OUT_END_H
,
0
),
Z
ATTR_EXT_REG
(
"end-l"
,
0
,
FD_ATTR_OUT_END_L
,
0
),
Z
ATTR_EXT_REG
(
"end-coarse"
,
0
,
FD_ATTR_OUT_END_COARSE
,
0
),
Z
ATTR_EXT_REG
(
"end-fine"
,
0
,
FD_ATTR_OUT_END_FINE
,
0
),
Z
ATTR_EXT_REG
(
"delta-l"
,
0
,
FD_ATTR_OUT_DELTA_L
,
0
),
Z
ATTR_EXT_REG
(
"delta-coarse"
,
0
,
FD_ATTR_OUT_DELTA_COARSE
,
0
),
Z
ATTR_EXT_REG
(
"delta-fine"
,
0
,
FD_ATTR_OUT_DELTA_FINE
,
0
),
Z
ATTR_EXT_REG
(
"delay-offset"
,
_RW_
,
FD_ATTR_OUT_DELAY_OFF
,
0
),
Z
ATTR_EXT_REG
(
"user-offset"
,
_RW_
,
FD_ATTR_OUT_USER_OFF
,
0
),
Z
IO_ATTR_EXT
(
"mode"
,
S_IRUGO
,
FD_ATTR_OUT_MODE
,
0
),
Z
IO_ATTR_EXT
(
"rep"
,
0
,
FD_ATTR_OUT_REP
,
0
),
Z
IO_ATTR_EXT
(
"start-h"
,
0
,
FD_ATTR_OUT_START_H
,
0
),
Z
IO_ATTR_EXT
(
"start-l"
,
0
,
FD_ATTR_OUT_START_L
,
0
),
Z
IO_ATTR_EXT
(
"start-coarse"
,
0
,
FD_ATTR_OUT_START_COARSE
,
0
),
Z
IO_ATTR_EXT
(
"start-fine"
,
0
,
FD_ATTR_OUT_START_FINE
,
0
),
Z
IO_ATTR_EXT
(
"end-h"
,
0
,
FD_ATTR_OUT_END_H
,
0
),
Z
IO_ATTR_EXT
(
"end-l"
,
0
,
FD_ATTR_OUT_END_L
,
0
),
Z
IO_ATTR_EXT
(
"end-coarse"
,
0
,
FD_ATTR_OUT_END_COARSE
,
0
),
Z
IO_ATTR_EXT
(
"end-fine"
,
0
,
FD_ATTR_OUT_END_FINE
,
0
),
Z
IO_ATTR_EXT
(
"delta-l"
,
0
,
FD_ATTR_OUT_DELTA_L
,
0
),
Z
IO_ATTR_EXT
(
"delta-coarse"
,
0
,
FD_ATTR_OUT_DELTA_COARSE
,
0
),
Z
IO_ATTR_EXT
(
"delta-fine"
,
0
,
FD_ATTR_OUT_DELTA_FINE
,
0
),
Z
IO_ATTR_EXT
(
"delay-offset"
,
_RW_
,
FD_ATTR_OUT_DELAY_OFF
,
0
),
Z
IO_ATTR_EXT
(
"user-offset"
,
_RW_
,
FD_ATTR_OUT_USER_OFF
,
0
),
};
...
...
@@ -93,7 +93,7 @@ static enum fd_devtype __fd_get_type(struct device *dev)
struct
zio_obj_head
*
head
=
to_zio_head
(
dev
);
struct
zio_cset
*
cset
;
if
(
head
->
zobj_type
==
ZDEV
)
if
(
head
->
zobj_type
==
Z
IO_
DEV
)
return
FD_TYPE_WHOLEDEV
;
cset
=
to_zio_cset
(
dev
);
if
(
cset
->
index
==
0
)
...
...
@@ -109,9 +109,9 @@ static int fd_zio_info_tdc(struct device *dev, struct zio_attribute *zattr,
struct
fd_dev
*
fd
;
cset
=
to_zio_cset
(
dev
);
fd
=
cset
->
zdev
->
priv
ate_data
;
fd
=
cset
->
zdev
->
priv
_d
;
if
(
zattr
->
priv
.
addr
==
FD_ATTR_TDC_USER_OFF
)
{
if
(
zattr
->
id
==
FD_ATTR_TDC_USER_OFF
)
{
*
usr_val
=
fd
->
calib
.
tdc_user_offset
;
return
0
;
}
...
...
@@ -121,7 +121,7 @@ static int fd_zio_info_tdc(struct device *dev, struct zio_attribute *zattr,
* array of integers instead of filling attributes, so here
* pick the values from our array.
*/
*
usr_val
=
fd
->
tdc_attrs
[
FD_CSET_INDEX
(
zattr
->
priv
.
addr
)];
*
usr_val
=
fd
->
tdc_attrs
[
FD_CSET_INDEX
(
zattr
->
id
)];
return
0
;
}
...
...
@@ -136,18 +136,18 @@ static int fd_zio_info_output(struct device *dev, struct zio_attribute *zattr,
cset
=
to_zio_cset
(
dev
);
ch
=
cset
->
index
-
1
;
fd
=
cset
->
zdev
->
priv
ate_data
;
fd
=
cset
->
zdev
->
priv
_d
;
if
(
zattr
->
priv
.
addr
==
FD_ATTR_OUT_DELAY_OFF
)
{
if
(
zattr
->
id
==
FD_ATTR_OUT_DELAY_OFF
)
{
*
usr_val
=
fd
->
calib
.
zero_offset
[
ch
];
return
0
;
}
if
(
zattr
->
priv
.
addr
==
FD_ATTR_OUT_USER_OFF
)
{
if
(
zattr
->
id
==
FD_ATTR_OUT_USER_OFF
)
{
*
usr_val
=
fd
->
calib
.
ch_user_offset
[
ch
];
return
0
;
}
/* Reading the mode tells wether it triggered or not */
if
(
zattr
->
priv
.
addr
==
FD_ATTR_OUT_MODE
)
{
if
(
zattr
->
id
==
FD_ATTR_OUT_MODE
)
{
int
t
=
fd_ch_readl
(
fd
,
ch
,
FD_REG_DCR
)
&
FD_DCR_PG_TRIG
;
*
usr_val
=
t
?
0x80
:
0
;
/* low bits will return mode */
return
0
;
...
...
@@ -197,18 +197,18 @@ static int fd_zio_info_get(struct device *dev, struct zio_attribute *zattr,
if
(
__fd_get_type
(
dev
)
==
FD_TYPE_OUTPUT
)
return
fd_zio_info_output
(
dev
,
zattr
,
usr_val
);
/* reading temperature */
zdev
=
to_zio_dev
(
dev
);
attr
=
zdev
->
zattr_set
.
ext_zattr
;
fd
=
zdev
->
private_data
;
/* reading temperature */
zdev
=
to_zio_dev
(
dev
);
attr
=
zdev
->
zattr_set
.
ext_zattr
;
fd
=
zdev
->
priv_d
;
if
(
zattr
->
priv
.
addr
==
FD_ATTR_DEV_TEMP
)
{
attr
[
FD_ATTR_DEV_TEMP
].
value
=
fd_read_temp
(
fd
,
0
);
return
0
;
}
if
(
zattr
->
id
==
FD_ATTR_DEV_TEMP
)
{
attr
[
FD_ATTR_DEV_TEMP
].
value
=
fd_read_temp
(
fd
,
0
);
return
0
;
}
/* following is whole-dev */
if
(
zattr
->
priv
.
addr
!=
FD_ATTR_DEV_UTC_H
)
if
(
zattr
->
id
!=
FD_ATTR_DEV_UTC_H
)
return
0
;
/* reading utc-h calls an atomic get-time */
fd_time_get
(
fd
,
&
t
,
NULL
);
...
...
@@ -228,10 +228,9 @@ static int fd_zio_conf_tdc(struct device *dev, struct zio_attribute *zattr,
int
change
;
cset
=
to_zio_cset
(
dev
);
fd
=
cset
->
zdev
->
private_data
;
fd
=
cset
->
zdev
->
priv_d
;
switch
(
zattr
->
priv
.
addr
)
{
switch
(
zattr
->
id
)
{
case
FD_ATTR_TDC_OFFSET
:
fd
->
calib
.
tdc_zero_offset
=
usr_val
;
goto
out
;
...
...
@@ -290,14 +289,14 @@ static int fd_zio_conf_output(struct device *dev, struct zio_attribute *zattr,
int
ch
;
cset
=
to_zio_cset
(
dev
);
fd
=
cset
->
zdev
->
priv
ate_data
;
fd
=
cset
->
zdev
->
priv
_d
;
ch
=
cset
->
index
-
1
;
if
(
zattr
->
priv
.
addr
==
FD_ATTR_OUT_DELAY_OFF
)
{
if
(
zattr
->
id
==
FD_ATTR_OUT_DELAY_OFF
)
{
fd
->
calib
.
zero_offset
[
ch
]
=
usr_val
;
return
0
;
}
if
(
zattr
->
priv
.
addr
==
FD_ATTR_OUT_USER_OFF
)
{
if
(
zattr
->
id
==
FD_ATTR_OUT_USER_OFF
)
{
fd
->
calib
.
ch_user_offset
[
ch
]
=
usr_val
;
return
0
;
}
...
...
@@ -321,9 +320,9 @@ static int fd_zio_conf_set(struct device *dev, struct zio_attribute *zattr,
/* Remains: wholedev */
zdev
=
to_zio_dev
(
dev
);
attr
=
zdev
->
zattr_set
.
ext_zattr
;
fd
=
zdev
->
priv
ate_data
;
fd
=
zdev
->
priv
_d
;
if
(
zattr
->
priv
.
addr
==
FD_ATTR_DEV_UTC_H
)
{
if
(
zattr
->
id
==
FD_ATTR_DEV_UTC_H
)
{
/* writing utc-h calls an atomic set-time */
t
.
utc
=
(
uint64_t
)
attr
[
FD_ATTR_DEV_UTC_H
].
value
<<
32
;
t
.
utc
|=
attr
[
FD_ATTR_DEV_UTC_L
].
value
;
...
...
@@ -333,7 +332,7 @@ static int fd_zio_conf_set(struct device *dev, struct zio_attribute *zattr,
}
/* Not command, nothing to do */
if
(
zattr
->
priv
.
addr
!=
FD_ATTR_DEV_COMMAND
)
if
(
zattr
->
id
!=
FD_ATTR_DEV_COMMAND
)
return
0
;
switch
(
usr_val
)
{
...
...
@@ -493,7 +492,7 @@ static int fd_zio_output(struct zio_cset *cset)
struct
fd_dev
*
fd
;
struct
zio_control
*
ctrl
;
fd
=
cset
->
zdev
->
priv
ate_data
;
fd
=
cset
->
zdev
->
priv
_d
;
ctrl
=
zio_get_ctrl
(
cset
->
chan
->
active_block
);
if
(
fd
->
verbose
>
1
)
{
...
...
@@ -514,7 +513,7 @@ static int fd_zio_output(struct zio_cset *cset)
static
int
fd_zio_input
(
struct
zio_cset
*
cset
)
{
struct
fd_dev
*
fd
;
fd
=
cset
->
zdev
->
priv
ate_data
;
fd
=
cset
->
zdev
->
priv
_d
;
/* Configure the device for input */
if
(
!
test_bit
(
FD_FLAG_DO_INPUT
,
&
fd
->
flags
))
{
...
...
@@ -542,7 +541,7 @@ static int fd_zio_probe(struct zio_device *zdev)
struct
fd_dev
*
fd
;
/* link the new device from the fd structure */
fd
=
zdev
->
priv
ate_data
;
fd
=
zdev
->
priv
_d
;
fd
->
zdev
=
zdev
;
fd
->
tdc_attrs
[
FD_CSET_INDEX
(
FD_ATTR_TDC_OFFSET
)]
=
\
...
...
@@ -561,55 +560,55 @@ static const struct zio_sysfs_operations fd_zio_s_op = {
/* We have 5 csets, since each output triggers separately */
static
struct
zio_cset
fd_cset
[]
=
{
{
SET_OBJECT
_NAME
(
"fd-input"
),
ZIO_SET_OBJ
_NAME
(
"fd-input"
),
.
raw_io
=
fd_zio_input
,
.
n_chan
=
1
,
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_INPUT
|
ZCSET_TYPE_TIME
,
.
flags
=
ZIO_DIR_INPUT
|
Z
IO_
CSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
fd_zattr_input
,
.
n_ext_attr
=
ARRAY_SIZE
(
fd_zattr_input
),
},
},
{
SET_OBJECT
_NAME
(
"fd-ch1"
),
ZIO_SET_OBJ
_NAME
(
"fd-ch1"
),
.
raw_io
=
fd_zio_output
,
.
n_chan
=
1
,
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_OUTPUT
|
ZCSET_TYPE_TIME
,
.
flags
=
ZIO_DIR_OUTPUT
|
Z
IO_
CSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
fd_zattr_output
,
.
n_ext_attr
=
ARRAY_SIZE
(
fd_zattr_output
),
},
},
{
SET_OBJECT
_NAME
(
"fd-ch2"
),
ZIO_SET_OBJ
_NAME
(
"fd-ch2"
),
.
raw_io
=
fd_zio_output
,
.
n_chan
=
1
,
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_OUTPUT
|
ZCSET_TYPE_TIME
,
.
flags
=
ZIO_DIR_OUTPUT
|
Z
IO_
CSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
fd_zattr_output
,
.
n_ext_attr
=
ARRAY_SIZE
(
fd_zattr_output
),
},
},
{
SET_OBJECT
_NAME
(
"fd-ch3"
),
ZIO_SET_OBJ
_NAME
(
"fd-ch3"
),
.
raw_io
=
fd_zio_output
,
.
n_chan
=
1
,
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_OUTPUT
|
ZCSET_TYPE_TIME
,
.
flags
=
ZIO_DIR_OUTPUT
|
Z
IO_
CSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
fd_zattr_output
,
.
n_ext_attr
=
ARRAY_SIZE
(
fd_zattr_output
),
},
},
{
SET_OBJECT
_NAME
(
"fd-ch4"
),
ZIO_SET_OBJ
_NAME
(
"fd-ch4"
),
.
raw_io
=
fd_zio_output
,
.
n_chan
=
1
,
.
ssize
=
4
,
/* FIXME: 0? */
.
flags
=
ZIO_DIR_OUTPUT
|
ZCSET_TYPE_TIME
,
.
flags
=
ZIO_DIR_OUTPUT
|
Z
IO_
CSET_TYPE_TIME
,
.
zattr_set
=
{
.
ext_zattr
=
fd_zattr_output
,
.
n_ext_attr
=
ARRAY_SIZE
(
fd_zattr_output
),
...
...
@@ -675,7 +674,7 @@ int fd_zio_init(struct fd_dev *fd)
/* Mandatory fields */
fd
->
hwzdev
->
owner
=
THIS_MODULE
;
fd
->
hwzdev
->
priv
ate_data
=
fd
;
fd
->
hwzdev
->
priv
_d
=
fd
;
dev_id
=
fd
->
fmc
->
device_id
;
...
...
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