示例#1
0
static void slirp_tcp_load(QEMUFile *f, struct tcpcb *tp)
{
    int i;

    tp->t_state = qemu_get_sbe16(f);
    for (i = 0; i < TCPT_NTIMERS; i++)
        tp->t_timer[i] = qemu_get_sbe16(f);
    tp->t_rxtshift = qemu_get_sbe16(f);
    tp->t_rxtcur = qemu_get_sbe16(f);
    tp->t_dupacks = qemu_get_sbe16(f);
    tp->t_maxseg = qemu_get_be16(f);
    tp->t_force = qemu_get_sbyte(f);
    tp->t_flags = qemu_get_be16(f);
    tp->snd_una = qemu_get_be32(f);
    tp->snd_nxt = qemu_get_be32(f);
    tp->snd_up = qemu_get_be32(f);
    tp->snd_wl1 = qemu_get_be32(f);
    tp->snd_wl2 = qemu_get_be32(f);
    tp->iss = qemu_get_be32(f);
    tp->snd_wnd = qemu_get_be32(f);
    tp->rcv_wnd = qemu_get_be32(f);
    tp->rcv_nxt = qemu_get_be32(f);
    tp->rcv_up = qemu_get_be32(f);
    tp->irs = qemu_get_be32(f);
    tp->rcv_adv = qemu_get_be32(f);
    tp->snd_max = qemu_get_be32(f);
    tp->snd_cwnd = qemu_get_be32(f);
    tp->snd_ssthresh = qemu_get_be32(f);
    tp->t_idle = qemu_get_sbe16(f);
    tp->t_rtt = qemu_get_sbe16(f);
    tp->t_rtseq = qemu_get_be32(f);
    tp->t_srtt = qemu_get_sbe16(f);
    tp->t_rttvar = qemu_get_sbe16(f);
    tp->t_rttmin = qemu_get_be16(f);
    tp->max_sndwnd = qemu_get_be32(f);
    tp->t_oobflags = qemu_get_byte(f);
    tp->t_iobc = qemu_get_byte(f);
    tp->t_softerror = qemu_get_sbe16(f);
    tp->snd_scale = qemu_get_byte(f);
    tp->rcv_scale = qemu_get_byte(f);
    tp->request_r_scale = qemu_get_byte(f);
    tp->requested_s_scale = qemu_get_byte(f);
    tp->ts_recent = qemu_get_be32(f);
    tp->ts_recent_age = qemu_get_be32(f);
    tp->last_ack_sent = qemu_get_be32(f);
    tcp_template(tp);
}
示例#2
0
static int smc91c111_load(QEMUFile *f, void *opaque, int version_id)
{
    smc91c111_state *s = opaque;

    if (version_id != SMC91C111_SAVE_VERSION) {
        return -1;
    }

    s->tcr = qemu_get_be16(f);
    s->rcr = qemu_get_be16(f);
    s->cr = qemu_get_be16(f);
    s->ctr = qemu_get_be16(f);
    s->gpr = qemu_get_be16(f);
    s->ptr = qemu_get_be16(f);
    s->ercv = qemu_get_be16(f);

    s->bank = qemu_get_be32(f);
    s->packet_num = qemu_get_be32(f);

    s->tx_alloc = qemu_get_be32(f);
    s->allocated = qemu_get_be32(f);
    s->tx_fifo_len = qemu_get_be32(f);
    qemu_get_buffer(f, (uint8_t*) s->tx_fifo, sizeof(s->tx_fifo));
    s->rx_fifo_len = qemu_get_be32(f);
    qemu_get_buffer(f, (uint8_t*) s->rx_fifo, sizeof(s->rx_fifo));
    s->tx_fifo_done_len = qemu_get_be32(f);
    qemu_get_buffer(f, (uint8_t*) s->tx_fifo_done, sizeof(s->tx_fifo_done));

    /* Packet buffer memory.  */
    qemu_get_buffer(f, (uint8_t*) s->data, sizeof(s->data));
    s->int_level = qemu_get_byte(f);
    s->int_mask = qemu_get_byte(f);

    return 0;
}
示例#3
0
static int eeprom_load(QEMUFile *f, void *opaque, int version_id)
{
    /* Load EEPROM data from saved data if version and EEPROM size
       of data and current EEPROM are identical. */
    eeprom_t *eeprom = (eeprom_t *)opaque;
    int result = -EINVAL;
    if (version_id == eeprom_version) {
        unsigned address;
        uint8_t size = eeprom->size;
        qemu_get_buffer(f, (uint8_t *)eeprom, sizeof(*eeprom) - 2);
        if (eeprom->size == size) {
            eeprom->data = qemu_get_be16(f);
            for (address = 0; address < eeprom->size; address++) {
                eeprom->contents[address] = qemu_get_be16(f);
            }
            result = 0;
        }
    }
    return result;
}
示例#4
0
static int slirp_socket_load(QEMUFile *f, struct socket *so)
{
    if (tcp_attach(so) < 0)
        return -ENOMEM;

    so->so_urgc = qemu_get_be32(f);
    so->so_faddr_ip = qemu_get_be32(f);
    so->so_laddr_ip = qemu_get_be32(f);
    so->so_faddr_port = qemu_get_be16(f);
    so->so_laddr_port = qemu_get_be16(f);
    so->so_iptos = qemu_get_byte(f);
    so->so_emu = qemu_get_byte(f);
    so->so_type = qemu_get_byte(f);
    so->so_state = qemu_get_be32(f);
    if (slirp_sbuf_load(f, &so->so_rcv) < 0)
        return -ENOMEM;
    if (slirp_sbuf_load(f, &so->so_snd) < 0)
        return -ENOMEM;
    slirp_tcp_load(f, so->so_tcpcb);

    return 0;
}
示例#5
0
static int virtio_audio_load(QEMUFile *f, void *opaque, int version_id)
{
    VirtIOAudio *s = opaque;
    VirtIOAudioStream *stream;
    int i;
    int mode;

    if (version_id != 1)
        return -EINVAL;

    /* FIXME: Do bad things happen if there is a transfer in progress?  */

    virtio_load(&s->vdev, f);

    for (i = 0; i < NUM_STREAMS; i++) {
        stream = &s->stream[i];

        stream->has_buffer = 0;
        stream->data_left = 0;
        if (stream->in_voice) {
            AUD_close_in(&s->card, stream->in_voice);
            stream->in_voice = NULL;
        }
        if (stream->out_voice) {
            AUD_close_out(&s->card, stream->out_voice);
            stream->out_voice = NULL;
        }
        mode = qemu_get_byte(f);
        stream->fmt.endianness = qemu_get_byte(f);
        stream->fmt.nchannels = qemu_get_be16(f);
        stream->fmt.fmt = qemu_get_be32(f);
        stream->fmt.freq = qemu_get_be32(f);
        if (mode & 2) {
            stream->in_voice = AUD_open_in(&s->card, stream->in_voice,
                                           "virtio-audio.in",
                                           stream,
                                           virtio_audio_callback,
                                           &stream->fmt);
            AUD_set_active_in(stream->in_voice, mode & 1);
        } else if (mode & 4) {
            stream->out_voice = AUD_open_out(&s->card, stream->out_voice,
                                             "virtio-audio.out",
                                             stream,
                                             virtio_audio_callback,
                                             &stream->fmt);
            AUD_set_active_out(stream->out_voice, mode & 1);
        }
    }

    return 0;
}
static int eeprom_load(QEMUFile *f, void *opaque, int version_id)
{
    /* Load EEPROM data from saved data if version and EEPROM size
       of data and current EEPROM are identical. */
    eeprom_t *eeprom = (eeprom_t *)opaque;
    int result = -EINVAL;
    if (version_id >= OLD_EEPROM_VERSION) {
        unsigned address;
        int size = eeprom->size;

        eeprom->tick = qemu_get_byte(f);
        eeprom->address = qemu_get_byte(f);
        eeprom->command = qemu_get_byte(f);
        eeprom->writeable = qemu_get_byte(f);

        eeprom->eecs = qemu_get_byte(f);
        eeprom->eesk = qemu_get_byte(f);
        eeprom->eedo = qemu_get_byte(f);

        eeprom->addrbits = qemu_get_byte(f);
        if (version_id == OLD_EEPROM_VERSION) {
            eeprom->size = qemu_get_byte(f);
            qemu_get_byte(f);
        } else {
            eeprom->size = qemu_get_be16(f);
        }

        if (eeprom->size == size) {
            eeprom->data = qemu_get_be16(f);
            for (address = 0; address < eeprom->size; address++) {
                eeprom->contents[address] = qemu_get_be16(f);
            }
            result = 0;
        }
    }
    return result;
}
示例#7
0
int TEMU_decompress_buf(TEMU_CompressState_t *s, uint8_t *buf, int len)
{
    int ret, clen;

    s->zstream.avail_out = len;
    s->zstream.next_out = buf;
    while (s->zstream.avail_out > 0) {
        if (s->zstream.avail_in == 0) {
            if (qemu_get_be16((QEMUFile *)s->f) != TEMU_CBLOCK_MAGIC)
                return -1;
            clen = qemu_get_be16((QEMUFile *)s->f);
            if (clen > IOBUF_SIZE)
                return -1;
            qemu_get_buffer((QEMUFile *)s->f, s->buf, clen);
            s->zstream.avail_in = clen;
            s->zstream.next_in = s->buf;
        }
        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
        if (ret != Z_OK && ret != Z_STREAM_END) {
            return -1;
        }
    }
    return 0;
}
示例#8
0
static int get_uint32_as_uint16(QEMUFile *f, void *pv, size_t size)
{
    uint32_t *v = pv;
    *v = qemu_get_be16(f);
    return 0;
}