#include "hw/maru_device_ids.h"
#include "maru_virtio_vmodem.h"
#include "maru_virtio_evdi.h"
-#include "debug_ch.h"
+#include "util/new_debug_ch.h"
#include "ecs/ecs.h"
-MULTI_DEBUG_CHANNEL(qemu, virtio-vmodem);
+DECLARE_DEBUG_CHANNEL(virtio-vmodem);
#define VMODEM_DEVICE_NAME "virtio-vmodem"
-enum {
- IOTYPE_INPUT = 0,
- IOTYPE_OUTPUT = 1
-};
-
#ifndef min
#define min(a,b) ((a)<(b)?(a):(b))
#endif
VirtIOVModem *vio_vmodem;
+static bool boolVmodemInitialized = false;
typedef struct MsgInfo
{
static QTAILQ_HEAD(MsgInfoRecvHead , MsgInfo) vmodem_recv_msg_queue =
QTAILQ_HEAD_INITIALIZER(vmodem_recv_msg_queue);
-typedef struct EvdiBuf {
- VirtQueueElement elem;
-
- QTAILQ_ENTRY(EvdiBuf) next;
-} EvdiBuf;
-
-static QTAILQ_HEAD(EvdiMsgHead , EvdiBuf) vmodem_in_queue =
- QTAILQ_HEAD_INITIALIZER(vmodem_in_queue);
-
bool send_to_vmodem(const uint32_t route, char *data, const uint32_t len)
{
int size;
int left = len;
int count = 0;
char *readptr = data;
+ if (!boolVmodemInitialized) {
+ LOG_TRACE("vmodem device is not initialized!\n");
+ LOG_TRACE("try execute send to evdi besides vmodem.\n");
+ return send_to_evdi(route, data, len);
+ }
while (left > 0) {
MsgInfo *_msg = (MsgInfo*) malloc(sizeof(MsgInfo));
if (!_msg) {
- ERR("malloc failed\n");
+ LOG_SEVERE("malloc failed on %s\n", __func__);
return false;
}
int index;
if (unlikely(!virtio_queue_ready(vio_vmodem->rvq))) {
- ERR("virtio queue is not ready\n");
+ LOG_SEVERE("recv virtio queue is not ready\n");
return;
}
if (unlikely(virtio_queue_empty(vio_vmodem->rvq))) {
- ERR("virtqueue is empty\n");
+ LOG_SEVERE("recv virtqueue is empty\n");
return;
}
struct msg_info _msg;
if (virtio_queue_empty(vvmodem->svq)) {
- ERR("virtqueue is empty.\n");
+ LOG_SEVERE("send virtqueue is empty.\n");
return;
}
memset(&_msg, 0x00, sizeof(_msg));
memcpy(&_msg, elem.out_sg[0].iov_base, elem.out_sg[0].iov_len);
- TRACE("vmodem send to ecp.\n");
+ LOG_TRACE("vmodem send to ecp.\n");
send_injector_ntf(_msg.buf, _msg.use);
}
static uint32_t virtio_vmodem_get_features(VirtIODevice *vdev,
uint32_t request_feature)
{
- TRACE("virtio_vmodem_get_features.\n");
+ LOG_TRACE("virtio_vmodem_get_features.\n");
return 0;
}
vio_vmodem = VIRTIO_VMODEM(vdev);
if (vio_vmodem == NULL) {
- ERR("failed to initialize vmodem device\n");
+ LOG_SEVERE("failed to initialize vmodem device\n");
return;
}
vio_vmodem->bh = qemu_bh_new(maru_vmodem_bh, vio_vmodem);
- INFO("finish the vmodem device initialization.\n");
+ LOG_INFO("finish the vmodem device initialization.\n");
+ boolVmodemInitialized = true;
}
static void virtio_vmodem_unrealize(DeviceState *dev, Error **errp)
{
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
- INFO("destroy vmodem device\n");
+ LOG_INFO("destroy vmodem device\n");
if (vio_vmodem->bh) {
qemu_bh_delete(vio_vmodem->bh);
static void virtio_vmodem_reset(VirtIODevice *vdev)
{
- INFO("virtio_vmodem_reset.\n");
+ LOG_INFO("virtio_vmodem_reset.\n");
}