Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
L
LabComm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD 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
Show more breadcrumbs
Sven Gestegård Robertz
LabComm
Commits
9ed8e370
Commit
9ed8e370
authored
11 years ago
by
Anders Blomdell
Browse files
Options
Downloads
Patches
Plain Diff
ioctl restructuring.
parent
64b9582f
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
lib/c/labcomm.c
+30
-15
30 additions, 15 deletions
lib/c/labcomm.c
lib/c/labcomm_ioctl.h
+80
-4
80 additions, 4 deletions
lib/c/labcomm_ioctl.h
with
110 additions
and
19 deletions
lib/c/labcomm.c
+
30
−
15
View file @
9ed8e370
...
@@ -446,15 +446,23 @@ int labcomm_encoder_ioctl(struct labcomm_encoder *encoder,
...
@@ -446,15 +446,23 @@ int labcomm_encoder_ioctl(struct labcomm_encoder *encoder,
int
action
,
int
action
,
...)
...)
{
{
int
result
=
-
ENOTSUP
;
int
result
;
va_list
va
;
if
(
encoder
->
writer
->
action
->
ioctl
!=
NULL
)
{
va_list
va
;
va_start
(
va
,
action
);
if
(
encoder
->
writer
->
action
->
ioctl
==
NULL
)
{
result
=
encoder
->
writer
->
action
->
ioctl
(
encoder
->
writer
,
action
,
NULL
,
va
);
result
=
-
ENOTSUP
;
va_end
(
va
);
goto
out
;
}
if
(
LABCOMM_IOC_SIG
(
action
)
!=
LABCOMM_IOC_NOSIG
)
{
result
=
-
EINVAL
;
goto
out
;
}
}
va_start
(
va
,
action
);
result
=
encoder
->
writer
->
action
->
ioctl
(
encoder
->
writer
,
action
,
NULL
,
va
);
va_end
(
va
);
out:
return
result
;
return
result
;
}
}
...
@@ -462,15 +470,22 @@ static int labcomm_writer_ioctl(struct labcomm_writer *writer,
...
@@ -462,15 +470,22 @@ static int labcomm_writer_ioctl(struct labcomm_writer *writer,
int
action
,
int
action
,
...)
...)
{
{
int
result
=
-
ENOTSUP
;
int
result
;
va_list
va
;
if
(
writer
->
action
->
ioctl
!=
NULL
)
{
va_list
va
;
if
(
writer
->
action
->
ioctl
==
NULL
)
{
result
=
-
ENOTSUP
;
va_start
(
va
,
action
);
goto
out
;
result
=
writer
->
action
->
ioctl
(
writer
,
action
,
NULL
,
va
);
}
va_end
(
va
);
if
(
LABCOMM_IOC_SIG
(
action
)
!=
LABCOMM_IOC_NOSIG
)
{
result
=
-
EINVAL
;
goto
out
;
}
}
va_start
(
va
,
action
);
result
=
writer
->
action
->
ioctl
(
writer
,
action
,
NULL
,
va
);
va_end
(
va
);
out:
return
result
;
return
result
;
}
}
...
...
This diff is collapsed.
Click to expand it.
lib/c/labcomm_ioctl.h
+
80
−
4
View file @
9ed8e370
#ifndef __LABCOMM_IOCTL_H__
#define __LABCOMM_IOCTL_H__
#include
"labcomm.h"
#include
"labcomm.h"
/*
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | | | | | |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | | | | |
* | | | | +- number (8)
* | | | +----------------- type (8)
* | | +------------------------------------------- size (13)
* | +----------------------------------------------- direction (2)
* +------------------------------------------------- signature (1)
*
* type 0-31 are reserved for labcomm library use
*/
#define LABCOMM_IOC_NRBITS 8
#define LABCOMM_IOC_TYPEBITS 8
#define LABCOMM_IOC_SIZEBITS 13
#define LABCOMM_IOC_DIRBITS 2
#define LABCOMM_IOC_SIGBITS 1
#define LABCOMM_IOC_NRMASK ((1 << LABCOMM_IOC_NRBITS)-1)
#define LABCOMM_IOC_TYPEMASK ((1 << LABCOMM_IOC_TYPEBITS)-1)
#define LABCOMM_IOC_SIZEMASK ((1 << LABCOMM_IOC_SIZEBITS)-1)
#define LABCOMM_IOC_DIRMASK ((1 << LABCOMM_IOC_DIRBITS)-1)
#define LABCOMM_IOC_SIGMASK ((1 << LABCOMM_IOC_SIGBITS)-1)
#define LABCOMM_IOC_NRSHIFT 0
#define LABCOMM_IOC_TYPESHIFT (LABCOMM_IOC_NRSHIFT+LABCOMM_IOC_NRBITS)
#define LABCOMM_IOC_SIZESHIFT (LABCOMM_IOC_TYPESHIFT+LABCOMM_IOC_TYPEBITS)
#define LABCOMM_IOC_DIRSHIFT (LABCOMM_IOC_SIZESHIFT+LABCOMM_IOC_SIZEBITS)
#define LABCOMM_IOC_SIGSHIFT (LABCOMM_IOC_DIRSHIFT+LABCOMM_IOC_DIRBITS)
#define LABCOMM_IOC_NOSIG 0U
#define LABCOMM_IOC_USESIG 1U
#define LABCOMM_IOC_NONE 0U
#define LABCOMM_IOC_WRITE 1U
#define LABCOMM_IOC_READ 2U
#define LABCOMM_IOC(signature,dir,type,nr,size) \
(((signature) << LABCOMM_IOC_SIGSHIFT) | \
((dir) << LABCOMM_IOC_DIRSHIFT) | \
((size) << LABCOMM_IOC_SIZESHIFT) | \
((type) << LABCOMM_IOC_TYPESHIFT) | \
((nr) << LABCOMM_IOC_NRSHIFT))
#define LABCOMM_IOC_SIG(nr) \
(((nr) >> LABCOMM_IOC_SIGSHIFT) & LABCOMM_IOC_SIGMASK)
#define LABCOMM_IOC_DIR(nr) \
(((nr) >> LABCOMM_IOC_DIRSHIFT) & LABCOMM_IOC_DIRMASK)
#define LABCOMM_IOC_SIZE(nr) \
(((nr) >> LABCOMM_IOC_SIZESHIFT) & LABCOMM_IOC_SIZEMASK)
#define LABCOMM_IOC_TYPE(nr) \
(((nr) >> LABCOMM_IOC_TYPESHIFT) & LABCOMM_IOC_TYPEMASK)
#define LABCOMM_IOC_NR(nr) \
(((nr) >> LABCOMM_IOC_NRSHIFT) & LABCOMM_IOC_NRMASK)
#define LABCOMM_IO(type,nr) \
LABCOMM_IOC(LABCOMM_IOC_NOSIG,LABCOMM_IOC_NONE,type,nr,0)
#define LABCOMM_IOR(type,nr,size) \
LABCOMM_IOC(LABCOMM_IOC_NOSIG,LABCOMM_IOC_READ,type,nr,sizeof(size))
#define LABCOMM_IOW(type,nr,size) \
LABCOMM_IOC(LABCOMM_IOC_NOSIG,LABCOMM_IOC_WRITE,type,nr,sizeof(size))
#define LABCOMM_IOS(type,nr) \
LABCOMM_IOC(LABCOMM_IOC_USESIG,LABCOMM_IOC_READ,type,nr,0)
#define LABCOMM_IOSR(type,nr,size) \
LABCOMM_IOC(LABCOMM_IOC_USESIG,LABCOMM_IOC_READ,type,nr,sizeof(size))
#define LABCOMM_IOSW(type,nr,size) \
LABCOMM_IOC(LABCOMM_IOC_USESIG,LABCOMM_IOC_WRITE,type,nr,sizeof(size))
struct
labcomm_ioctl_register_signature
{
struct
labcomm_ioctl_register_signature
{
int
index
;
int
index
;
struct
labcomm_signature
*
signature
;
struct
labcomm_signature
*
signature
;
};
};
#define LABCOMM_IOCTL_REGISTER_SIGNATURE 0x0001
#define LABCOMM_IOCTL_REGISTER_SIGNATURE \
#define LABCOMM_IOCTL_WRITER_GET_BYTES_WRITTEN 0x0002
LABCOMM_IOW(0,1,struct labcomm_ioctl_register_signature)
#define LABCOMM_IOCTL_WRITER_GET_BYTE_POINTER 0x0003
#define LABCOMM_IOCTL_WRITER_GET_BYTES_WRITTEN \
#define LABCOMM_IOCTL_WRITER_COPY_BYTES 0x0004
LABCOMM_IOR(0,2,int)
#define LABCOMM_IOCTL_WRITER_GET_BYTE_POINTER \
LABCOMM_IOR(0,3,void*)
#endif
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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