summaryrefslogtreecommitdiffhomepage
path: root/include/sofort/sofort.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/sofort/sofort.h')
-rw-r--r--include/sofort/sofort.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/include/sofort/sofort.h b/include/sofort/sofort.h
new file mode 100644
index 0000000..ee5072f
--- /dev/null
+++ b/include/sofort/sofort.h
@@ -0,0 +1,93 @@
+#ifndef SFRT_H
+#define SFRT_H
+
+#include <stdint.h>
+#include <stdio.h>
+
+#include "sofort_api.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* pre-alpha */
+#ifndef SFRT_APP
+#ifndef SFRT_PRE_ALPHA
+#error libsofort: pre-alpha: ABI is not final!
+#error to use the library, please pass -DSFRT_PRE_ALPHA to the compiler.
+#endif
+#endif
+
+/* status codes */
+#define SFRT_OK 0x00
+#define SFRT_USAGE 0x01
+#define SFRT_BAD_OPT 0x02
+#define SFRT_BAD_OPT_VAL 0x03
+#define SFRT_IO_ERROR 0xA0
+#define SFRT_MAP_ERROR 0xA1
+
+/* driver flags */
+#define SFRT_DRIVER_VERBOSITY_NONE 0x0000
+#define SFRT_DRIVER_VERBOSITY_ERRORS 0x0001
+#define SFRT_DRIVER_VERBOSITY_STATUS 0x0002
+#define SFRT_DRIVER_VERBOSITY_USAGE 0x0004
+#define SFRT_DRIVER_CLONE_VECTOR 0x0008
+
+#define SFRT_DRIVER_VERSION 0x0010
+#define SFRT_DRIVER_DRY_RUN 0x0020
+
+/* unit action flags */
+#define SFRT_OUTPUT_NAME 0x0001
+#define SFRT_OUTPUT_ADDRESS 0x0002
+
+struct sfrt_input {
+ void * addr;
+ size_t size;
+};
+
+struct sfrt_common_ctx {
+ uint64_t drvflags;
+ uint64_t actflags;
+ uint64_t fmtflags;
+ const char * anystring;
+};
+
+struct sfrt_driver_ctx {
+ const char ** units;
+ const char * program;
+ const char * module;
+ const struct sfrt_common_ctx * cctx;
+ void * any;
+ int status;
+ int nerrors;
+};
+
+struct sfrt_unit_ctx {
+ const char * const * path;
+ const struct sfrt_input * map;
+ const struct sfrt_common_ctx * cctx;
+ void * any;
+ int status;
+ int nerrors;
+};
+
+/* driver api */
+sfrt_api int sfrt_get_driver_ctx (const char ** argv, const char ** envp, uint32_t flags, struct sfrt_driver_ctx **);
+sfrt_api void sfrt_free_driver_ctx (struct sfrt_driver_ctx *);
+
+sfrt_api int sfrt_get_unit_ctx (const struct sfrt_driver_ctx *, const char * path, struct sfrt_unit_ctx **);
+sfrt_api void sfrt_free_unit_ctx (struct sfrt_unit_ctx *);
+
+sfrt_api int sfrt_map_input (int fd, const char * path, int prot, struct sfrt_input *);
+sfrt_api int sfrt_unmap_input (struct sfrt_input *);
+
+/* utility api */
+sfrt_api int sfrt_output_dummy (const struct sfrt_common_ctx *, FILE *);
+sfrt_api int sfrt_output_name (const struct sfrt_unit_ctx *, FILE *);
+sfrt_api int sfrt_output_address (const struct sfrt_unit_ctx *, FILE *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif