new file mode 100644
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+// Copyright (c) 2020 Takashi Sakamoto
+#include <stdio.h>
+#include <errno.h>
+#include <time.h>
+
+#include "efw-commands.h"
+
+// Categories in Echo Audio Fireworks protocol.
+#define CATEGORY_HW 0
+
+// Commands in hardware category.
+#define HW_CMD_INFO 0
+
+#define TIMEOUT 200
+
+#define CAP_HAS_DSP 0x00000010
+#define CAP_HAS_FPGA 0x00000020
+
+void efw_hw_info(EfwProto *proto, struct hw_info *info, GError **error)
+{
+ gsize param_count = sizeof(*info) / sizeof(guint32);
+ efw_proto_transaction(proto, CATEGORY_HW, HW_CMD_INFO, NULL, 0,
+ (guint32 *const *)&info, ¶m_count, TIMEOUT, error);
+}
+
+void efw_hw_info_has_fpga(struct hw_info *info, gboolean *has_fpga)
+{
+ *has_fpga = !!(info->flags & CAP_HAS_FPGA);
+}
new file mode 100644
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+// Copyright (c) 2020 Takashi Sakamoto
+#ifndef __EFW_CMDS_H__
+#define __EFW_CMDS_H__
+
+#include "efw-proto.h"
+
+struct hw_info {
+ guint32 flags;
+ guint32 guid_hi;
+ guint32 guid_lo;
+ guint32 type;
+ guint32 version;
+ guint32 vendor_name[8];
+ guint32 model_name[8];
+ guint32 supported_clocks;
+ guint32 amdtp_rx_pcm_channels;
+ guint32 amdtp_tx_pcm_channels;
+ guint32 phys_out;
+ guint32 phys_in;
+ guint32 phys_out_grp_count;
+ guint32 phys_out_grp[4];
+ guint32 phys_in_grp_count;
+ guint32 phys_in_grp[4];
+ guint32 midi_out_ports;
+ guint32 midi_in_ports;
+ guint32 max_sample_rate;
+ guint32 min_sample_rate;
+ guint32 dsp_version;
+ guint32 arm_version;
+ guint32 mixer_playback_channels;
+ guint32 mixer_capture_channels;
+ guint32 fpga_version;
+ guint32 amdtp_rx_pcm_channels_2x;
+ guint32 amdtp_tx_pcm_channels_2x;
+ guint32 amdtp_rx_pcm_channels_4x;
+ guint32 amdtp_tx_pcm_channels_4x;
+ guint32 reserved[16];
+};
+
+void efw_hw_info(EfwProto *proto, struct hw_info *info, GError **error);
+
+void efw_hw_info_has_fpga(struct hw_info *info, gboolean *has_fpga);
+
+#endif
@@ -16,6 +16,7 @@ sources = [
'efw-proto.c',
'config-rom.c',
'node-dispatcher.c',
+ 'efw-commands.c',
'subcmd-device.c',
]
@@ -23,6 +24,7 @@ headers = [
'efw-proto.h',
'config-rom.h',
'node-dispatcher.h',
+ 'efw-commands.h',
'subcmds.h',
]
Fireworks protocol includes command to retrieve information about hardware. This commit implements the command and local helper functions. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> --- efw-downloader/src/efw-commands.c | 30 +++++++++++++++++++++ efw-downloader/src/efw-commands.h | 45 +++++++++++++++++++++++++++++++ efw-downloader/src/meson.build | 2 ++ 3 files changed, 77 insertions(+) create mode 100644 efw-downloader/src/efw-commands.c create mode 100644 efw-downloader/src/efw-commands.h