File pf.c changed (mode: 100644) (index 32aa9c7..9daad25) |
... |
... |
int main(int argc, char *argv[]) |
34 |
34 |
return EXIT_FAILURE; |
return EXIT_FAILURE; |
35 |
35 |
} |
} |
36 |
36 |
|
|
37 |
|
uint8_t idx=strtoul(argv[1],NULL,10); |
|
38 |
|
unsignedl req=_IOW('d',SI_DCE_PF,idx); |
|
39 |
|
errno=0; |
|
40 |
|
int r=ioctl(d_fd,req,&idx); |
|
41 |
|
if(r==-1){ |
|
42 |
|
e("pf failed:%s",strerror(errno)); |
|
43 |
|
return EXIT_FAILURE; |
|
44 |
|
} |
|
45 |
|
|
|
46 |
37 |
errno=0; |
errno=0; |
47 |
38 |
int efd=epoll_create1(0); |
int efd=epoll_create1(0); |
48 |
39 |
if(efd==-1){ |
if(efd==-1){ |
|
... |
... |
int main(int argc, char *argv[]) |
54 |
45 |
evt.events=EPOLLIN; |
evt.events=EPOLLIN; |
55 |
46 |
evt.data.fd=d_fd; |
evt.data.fd=d_fd; |
56 |
47 |
errno=0; |
errno=0; |
57 |
|
r=epoll_ctl(efd,EPOLL_CTL_ADD,d_fd,&evt); |
|
|
48 |
|
int r=epoll_ctl(efd,EPOLL_CTL_ADD,d_fd,&evt); |
58 |
49 |
if(r==-1){ |
if(r==-1){ |
59 |
50 |
e("epoll_ctl:add driver file descriptor:%s",strerror(errno)); |
e("epoll_ctl:add driver file descriptor:%s",strerror(errno)); |
60 |
51 |
return EXIT_FAILURE; |
return EXIT_FAILURE; |
61 |
52 |
} |
} |
62 |
53 |
|
|
63 |
|
struct epoll_event evts[EVTS_MAX]; |
|
64 |
|
memset(&evts,0,sizeof(evts)); |
|
65 |
|
errno=0; |
|
66 |
|
int fds_n=epoll_wait(efd,&evts[0],EVTS_MAX,-1); |
|
67 |
|
if(fds_n==-1){ |
|
68 |
|
e("epoll_wait:%s",strerror(errno)); |
|
69 |
|
return EXIT_FAILURE; |
|
70 |
|
} |
|
|
54 |
|
while (1) { |
|
55 |
|
uint8_t idx=strtoul(argv[1],NULL,10); |
|
56 |
|
unsignedl req=_IOW('d',SI_DCE_PF,idx); |
|
57 |
|
errno=0; |
|
58 |
|
r=ioctl(d_fd,req,&idx); |
|
59 |
|
if(r==-1){ |
|
60 |
|
e("pf failed:%s",strerror(errno)); |
|
61 |
|
return EXIT_FAILURE; |
|
62 |
|
} |
|
63 |
|
|
|
64 |
|
struct epoll_event evts[EVTS_MAX]; |
|
65 |
|
memset(&evts,0,sizeof(evts)); |
|
66 |
|
errno=0; |
|
67 |
|
int fds_n=epoll_wait(efd,&evts[0],EVTS_MAX,-1); |
|
68 |
|
if(fds_n==-1){ |
|
69 |
|
e("epoll_wait:%s",strerror(errno)); |
|
70 |
|
return EXIT_FAILURE; |
|
71 |
|
} |
|
72 |
|
|
|
73 |
|
o("fds_n=%u",fds_n); |
71 |
74 |
|
|
72 |
|
o("fds_n=%u",fds_n); |
|
|
75 |
|
int fd=0; |
|
76 |
|
while(1){ |
|
77 |
|
if(fd==fds_n) break; |
|
78 |
|
if(evts[fd].data.fd==d_fd){ |
|
79 |
|
struct si_evt si_evt; |
73 |
80 |
|
|
74 |
|
int fd=0; |
|
75 |
|
while(1){ |
|
76 |
|
if(fd==fds_n) break; |
|
77 |
|
if(evts[fd].data.fd==d_fd){ |
|
78 |
|
struct si_evt si_evt; |
|
79 |
|
|
|
80 |
|
o("found driver fd"); |
|
|
81 |
|
o("found driver fd"); |
81 |
82 |
|
|
82 |
|
//XXX:the driver file has no end and read will block if there is no |
|
83 |
|
//event available. |
|
84 |
|
errno=0; |
|
85 |
|
ssize_t rd=read(d_fd,&si_evt,sizeof(si_evt)); |
|
86 |
|
o("read one event of %ld bytes",(long)rd); |
|
87 |
|
if(rd==-1){ |
|
88 |
|
e("read:%s",strerror(errno)); |
|
89 |
|
return EXIT_FAILURE; |
|
|
83 |
|
//XXX:the driver file has no end and read will block if there is no |
|
84 |
|
//event available. |
|
85 |
|
errno=0; |
|
86 |
|
ssize_t rd=read(d_fd,&si_evt,sizeof(si_evt)); |
|
87 |
|
o("read one event of %ld bytes",(long)rd); |
|
88 |
|
if(rd==-1){ |
|
89 |
|
e("read:%s",strerror(errno)); |
|
90 |
|
return EXIT_FAILURE; |
|
91 |
|
} |
|
92 |
|
struct si_evt_pf *si_evt_pf=&si_evt.params.pf; |
|
93 |
|
struct timespec *tp=&si_evt.params.pf.monotonic_raw_tp; |
|
94 |
|
o("pf event on dp%u vblanks_n=0x%08x sec=%lu nsec=%lu",si_evt_pf->idx, |
|
95 |
|
si_evt_pf->vblanks_n,tp->tv_sec,tp->tv_nsec); |
90 |
96 |
} |
} |
91 |
|
struct si_evt_pf *si_evt_pf=&si_evt.params.pf; |
|
92 |
|
struct timespec *tp=&si_evt.params.pf.monotonic_raw_tp; |
|
93 |
|
o("pf event on dp%u vblanks_n=0x%08x sec=%lu nsec=%lu",si_evt_pf->idx, |
|
94 |
|
si_evt_pf->vblanks_n,tp->tv_sec,tp->tv_nsec); |
|
|
97 |
|
++fd; |
95 |
98 |
} |
} |
96 |
|
++fd; |
|
97 |
99 |
} |
} |
98 |
100 |
return EXIT_SUCCESS; |
return EXIT_SUCCESS; |
99 |
101 |
} |
} |