Files
cdba/device.h
T
Bjorn Andersson 48efa3096e cdba-server: Provide QDL access control list
The newly introduced support for QDL-based remote flashing of devices is
powerful, but provides an easy way to alter shared boards in unwanted
ways.

Introduce an optional "qdl_access" entry to the device configuration,
which allows to specify a list of entries each one defining a set of
users and their accepted flash targets.

A special target "all" can be used to give e.g. administrators
unrestricted access to the flash.

Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
2026-06-14 22:14:26 +00:00

139 lines
3.5 KiB
C

#ifndef __DEVICE_H__
#define __DEVICE_H__
#include <termios.h>
#include "cdba.h"
#include "list.h"
struct cdb_assist;
struct edl;
struct fastboot;
struct fastboot_ops;
struct device;
struct device_parser;
struct control_ops {
void *(*parse_options)(struct device_parser *dp);
void *(*open)(struct device *dev);
void (*close)(struct device *dev);
int (*power)(struct device *dev, bool on);
void (*usb)(struct device *dev, bool on);
void (*key)(struct device *device, int key, bool asserted);
void (*status_enable)(struct device *dev);
};
struct console_ops {
void *(*open)(struct device *dev);
int (*write)(struct device *dev, const void *buf, size_t len);
void (*send_break)(struct device *dev);
};
struct device {
char *board;
char *control_dev;
void *control_options;
char *console_dev;
char *name;
char *serial;
char *description;
char *ppps_path;
char *ppps3_path;
struct list_head *users;
unsigned voltage;
bool tickle_mmc;
bool usb_always_on;
bool power_always_on;
struct edl *edl;
struct fastboot *fastboot;
unsigned int fastboot_key_timeout;
unsigned int power_key_press_ms;
int state;
enum power_on_mode power_on_mode;
bool has_power_key;
bool status_enabled;
void (*boot)(struct device *);
const struct control_ops *control_ops;
const struct console_ops *console_ops;
const char *set_active;
void *cdb;
void *console;
char *qdl_programmer;
char *qdl_serial;
char *qdl_storage;
struct list_head *qdl_access;
char *status_cmd;
struct list_head node;
};
struct device_user {
const char *username;
struct list_head node;
};
struct device_qdl_target {
const char *target;
struct list_head node;
};
struct device_qdl_user {
const char *username;
struct list_head targets;
struct list_head node;
};
void device_add(struct device *device);
struct device *device_open(const char *board,
const char *username);
void device_close(struct device *dev);
int device_power_on(struct device *device, enum power_on_mode mode);
int device_power_off(struct device *device);
void device_key(struct device *device, int key, bool asserted);
void device_status_enable(struct device *device);
void device_usb(struct device *device, bool on);
int device_write(struct device *device, const void *buf, size_t len);
void device_boot(struct device *device, const void *data, size_t len);
void device_edl_open(struct device *device, void (*edl_present)(bool present));
void device_fastboot_open(struct device *device,
struct fastboot_ops *fastboot_ops);
void device_fastboot_boot(struct device *device);
void device_fastboot_flash_reboot(struct device *device);
void device_send_break(struct device *device);
void device_list_devices(const char *username);
void device_info(const char *username, const void *data, size_t dlen);
void device_fastboot_continue(struct device *device);
bool device_is_running(struct device *device);
bool device_qdl_access_allowed(struct device *device,
const char *username,
const char *target);
extern const struct control_ops alpaca_ops;
extern const struct control_ops cdb_assist_ops;
extern const struct control_ops conmux_ops;
extern const struct control_ops ftdi_gpio_ops;
extern const struct control_ops local_gpio_ops;
extern const struct control_ops external_ops;
extern const struct control_ops qcomlt_dbg_ops;
extern const struct control_ops laurent_ops;
extern const struct control_ops pic32cx_ops;
extern const struct console_ops conmux_console_ops;
extern const struct console_ops console_ops;
#endif