/*
 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: GPL-2.0-only
 */

#pragma once

struct elfloader_device;
struct elfloader_driver;

typedef int (*driver_init_t)(struct elfloader_device *dev, void *match_data);

/*
 * Each driver has an array of dtb_match_tables.
 * The last entry in the array should have compatible = NULL,
 * all others contain a compatible string that the driver accepts.
 * The match_data pointer will be passed to the driver's init() function.
 */
struct dtb_match_table {
    const char *compatible;
    void *match_data;
};

enum driver_type {
    DRIVER_INVALID = 0,
    DRIVER_SMP,
    DRIVER_UART,
    DRIVER_MAX
};

struct elfloader_driver {
    const struct dtb_match_table *match_table;
    enum driver_type type;
    driver_init_t init;
    /* ops struct, type depends on driver type. */
    const void *ops;
};


extern struct elfloader_driver *__start__driver_list[];
extern struct elfloader_driver *__stop__driver_list[];

#define ELFLOADER_DRIVER(_name) \
    const struct elfloader_driver *_driver_list_##_name \
        __attribute__((unused,section("_driver_list"))) = &_name;
