nt9856x/code/driver/source/crypto/cryptodev-linux/tests/asynchelper.h
2023-03-28 15:07:53 +08:00

55 lines
1.2 KiB
C
Executable File

#ifndef __ASYNCHELPER_H
#define __ASYNCHELPER_H
/* poll until POLLOUT, then call CIOCASYNCCRYPT */
inline int do_async_crypt(int cfd, struct crypt_op *cryp)
{
struct pollfd pfd;
pfd.fd = cfd;
pfd.events = POLLOUT;
if (poll(&pfd, 1, -1) < 1) {
perror("poll()");
return 1;
}
if (ioctl(cfd, CIOCASYNCCRYPT, cryp)) {
perror("ioctl(CIOCCRYPT)");
return 1;
}
return 0;
}
/* poll until POLLIN, then call CIOCASYNCFETCH */
inline int do_async_fetch(int cfd, struct crypt_op *cryp)
{
struct pollfd pfd;
pfd.fd = cfd;
pfd.events = POLLIN;
if (poll(&pfd, 1, -1) < 1) {
perror("poll()");
return 1;
}
if (ioctl(cfd, CIOCASYNCFETCH, cryp)) {
perror("ioctl(CIOCCRYPT)");
return 1;
}
return 0;
}
/* Check return value of stmt for identity with goodval. If they
* don't match, call return with the value of stmt. */
#define DO_OR_DIE(stmt, goodval) { \
int __rc_val; \
if ((__rc_val = stmt) != goodval) { \
perror("DO_OR_DIE(" #stmt "," #goodval ")"); \
return __rc_val; \
} \
}
#endif /* __ASYNCHELPER_H */