Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5180d5b4 authored by Jerry Zhang's avatar Jerry Zhang Committed by Gerrit Code Review
Browse files

Merge "Make libasyncio headers usable from C"

parents d555e082 c3d4e722
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -317,6 +317,8 @@ bool init_functionfs(struct usb_handle* h) {
        goto err;
    }

    memset(&h->read_aiob.ctx, 0, sizeof(h->read_aiob.ctx));
    memset(&h->write_aiob.ctx, 0, sizeof(h->write_aiob.ctx));
    if (io_setup(USB_FFS_NUM_BUFS, &h->read_aiob.ctx) ||
        io_setup(USB_FFS_NUM_BUFS, &h->write_aiob.ctx)) {
        D("[ aio: got error on io_setup (%d) ]", errno);
+10 −1
Original line number Diff line number Diff line
@@ -17,9 +17,10 @@
#include <asyncio/AsyncIO.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <cstdint>
#include <cstring>

int io_setup(unsigned nr, aio_context_t* ctxp) {
    memset(ctxp, 0, sizeof(*ctxp));
    return syscall(__NR_io_setup, nr, ctxp);
}

@@ -48,3 +49,11 @@ void io_prep(iocb* iocb, int fd, const void* buf, uint64_t count, int64_t offset
    iocb->aio_nbytes = count;
    iocb->aio_offset = offset;
}

void io_prep_pread(struct iocb* iocb, int fd, void* buf, size_t count, long long offset) {
    io_prep(iocb, fd, buf, count, offset, true);
}

void io_prep_pwrite(struct iocb* iocb, int fd, void* buf, size_t count, long long offset) {
    io_prep(iocb, fd, buf, count, offset, false);
}
+10 −6
Original line number Diff line number Diff line
@@ -17,9 +17,9 @@
#ifndef _ASYNCIO_H
#define _ASYNCIO_H

#include <cstring>
#include <cstdint>
#include <linux/aio_abi.h>
#include <stdbool.h>
#include <stdint.h>
#include <sys/cdefs.h>
#include <sys/types.h>
#include <time.h>
@@ -35,10 +35,14 @@ extern "C" {

int io_setup(unsigned nr, aio_context_t* ctxp);
int io_destroy(aio_context_t ctx);
int io_submit(aio_context_t ctx, long nr, iocb** iocbpp);
int io_getevents(aio_context_t ctx, long min_nr, long max_nr, io_event* events, timespec* timeout);
int io_cancel(aio_context_t ctx, iocb*, io_event* result);
void io_prep(iocb* iocb, int fd, const void* buf, uint64_t count, int64_t offset, bool read);
int io_submit(aio_context_t ctx, long nr, struct iocb** iocbpp);
int io_getevents(aio_context_t ctx, long min_nr, long max_nr, struct io_event* events,
                 struct timespec* timeout);
int io_cancel(aio_context_t ctx, struct iocb*, struct io_event* result);

void io_prep_pread(struct iocb* iocb, int fd, void* buf, size_t count, long long offset);
void io_prep_pwrite(struct iocb* iocb, int fd, void* buf, size_t count, long long offset);
void io_prep(struct iocb* iocb, int fd, const void* buf, uint64_t count, int64_t offset, bool read);

#ifdef __cplusplus
};