Files

111 lines
2.1 KiB
C
Raw Permalink Normal View History

2026-06-06 17:25:00 +01:00
#include "magenta/debug/util.h"
#include <magenta/debug/host.h>
#include <magenta/debug/packet.h>
#include <magenta/debug/request.h>
enum mxdbg_status mxdbg_host_handle_request(struct mxdbg_host *host)
{
struct mxdbg_packet packet = {0};
enum mxdbg_status status = mxdbg_host_recv(host, &packet);
if (status != MXDBG_SUCCESS) {
debug_printf("debug: failed to read packet");
return status;
}
if (packet.pkt_magic != MXDBG_PACKET_MAGIC) {
debug_printf(
"debug: packet is malformed (magic=%08x)",
packet.pkt_magic);
return MXDBG_ERR_BAD_FORMAT;
}
return mxdbg_handle_request(host, &packet);
}
enum mxdbg_status mxdbg_host_recv(
struct mxdbg_host *host,
struct mxdbg_packet *packet)
{
size_t r;
if (host->read_remote) {
return host->read_remote(host, packet, sizeof *packet, &r);
}
return MXDBG_ERR_NOT_SUPPORTED;
}
enum mxdbg_status mxdbg_host_recv_packet_data(
struct mxdbg_host *host,
struct mxdbg_packet *packet)
{
if (packet->pkt_magic != MXDBG_PACKET_MAGIC) {
return MXDBG_ERR_INVALID_ARGUMENT;
}
if (!packet->pkt_length) {
return MXDBG_SUCCESS;
}
size_t r;
void *dest = packet + 1;
if (host->read_remote) {
return host->read_remote(
host,
dest,
packet->pkt_length - sizeof *packet,
&r);
}
return MXDBG_ERR_NOT_SUPPORTED;
}
enum mxdbg_status mxdbg_host_send(
struct mxdbg_host *host,
const struct mxdbg_packet *packet)
{
size_t w;
if (host->write_remote) {
return host->write_remote(host, packet, packet->pkt_length, &w);
}
return MXDBG_ERR_NOT_SUPPORTED;
}
enum mxdbg_status mxdbg_host_identify(
struct mxdbg_host *host,
enum mxdbg_identity_key key,
void *out,
size_t max)
{
if (host->identify) {
return host->identify(host, key, out, max);
}
return MXDBG_ERR_NOT_SUPPORTED;
}
enum mxdbg_status mxdbg_host_identify_task(
struct mxdbg_host *host,
unsigned int tid,
enum mxdbg_identity_key key,
void *out,
size_t max)
{
if (host->identify_task) {
return host->identify_task(host, tid, key, out, max);
}
return MXDBG_ERR_NOT_SUPPORTED;
}
enum mxdbg_status mxdbg_host_resume(struct mxdbg_host *host)
{
if (host->resume) {
return host->resume(host);
}
return MXDBG_ERR_NOT_SUPPORTED;
}