From: Cornelia Huck <cornelia.huck@de.ibm.com>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: linux-s390 <linux-s390@vger.kernel.org>,
Anthony Liguori <aliguori@us.ibm.com>,
Marcelo Tosatti <mtosatti@redhat.com>, KVM <kvm@vger.kernel.org>,
Carsten Otte <cotte@de.ibm.com>,
Heiko Carstens <heiko.carstens@de.ibm.com>,
Rusty Russell <rusty@rustcorp.com.au>,
Sebastian Ott <sebott@linux.vnet.ibm.com>,
qemu-devel <qemu-devel@nongnu.org>,
Alexander Graf <agraf@suse.de>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Avi Kivity <avi@redhat.com>,
Martin Schwidefsky <schwidefsky@de.ibm.com>
Subject: Re: [Qemu-devel] [PATCH 2/5] s390: Virtual channel subsystem support.
Date: Wed, 8 Aug 2012 10:17:50 +0200 [thread overview]
Message-ID: <20120808101750.35800579@BR9GNB5Z> (raw)
In-Reply-To: <CAAu8pHt=yf2oh4PQ8RwxkR5-mXp_EOMqAQ9pq+w54peXk_+H-g@mail.gmail.com>
On Tue, 7 Aug 2012 21:00:59 +0000
Blue Swirl <blauwirbel@gmail.com> wrote:
> > diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> > new file mode 100644
> > index 0000000..7941c44
> > --- /dev/null
> > +++ b/hw/s390x/css.c
> > @@ -0,0 +1,440 @@
> > +/*
> > + * Channel subsystem base support.
> > + *
> > + * Copyright 2012 IBM Corp.
> > + * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> > + * your option) any later version. See the COPYING file in the top-level
> > + * directory.
> > + */
> > +
> > +#include "qemu-thread.h"
> > +#include "qemu-queue.h"
> > +#include <hw/qdev.h>
> > +#include "kvm.h"
> > +#include "cpu.h"
> > +#include "ioinst.h"
> > +#include "css.h"
> > +
> > +struct chp_info {
>
> CamelCase, please.
OK.
>
> > + uint8_t in_use;
> > + uint8_t type;
> > +};
> > +
> > +static struct chp_info chpids[MAX_CSSID + 1][MAX_CHPID + 1];
> > +
> > +static css_subch_cb_func css_subch_cb;
>
> Probably these can be put to a container structure which can be passed around.
Still trying to come up with a good model for that.
>
> > + case CCW_CMD_SENSE_ID:
> > + {
> > + uint8_t sense_bytes[256];
> > +
> > + /* Sense ID information is device specific. */
> > + memcpy(sense_bytes, &sch->id, sizeof(sense_bytes));
> > + if (check_len) {
> > + if (ccw->count != sizeof(sense_bytes)) {
> > + ret = -EINVAL;
> > + break;
> > + }
> > + }
> > + len = MIN(ccw->count, sizeof(sense_bytes));
> > + /*
> > + * Only indicate 0xff in the first sense byte if we actually
> > + * have enough place to store at least bytes 0-3.
> > + */
> > + if (len >= 4) {
> > + stb_phys(ccw->cda, 0xff);
> > + } else {
> > + stb_phys(ccw->cda, 0);
> > + }
> > + i = 1;
> > + for (i = 1; i < len - 1; i++) {
> > + stb_phys(ccw->cda + i, sense_bytes[i]);
> > + }
>
> cpu_physical_memory_write()
Hm, what's wrong with storing byte-by-byte?
>
> > + sch->curr_status.scsw.count = ccw->count - len;
> > + ret = 0;
> > + break;
> > + }
> > + case CCW_CMD_TIC:
> > + if (sch->last_cmd->cmd_code == CCW_CMD_TIC) {
> > + ret = -EINVAL;
> > + break;
> > + }
> > + if (ccw->flags & (CCW_FLAG_CC | CCW_FLAG_DC)) {
> > + ret = -EINVAL;
> > + break;
> > + }
> > + sch->channel_prog = qemu_get_ram_ptr(ccw->cda);
> > + ret = sch->channel_prog ? -EAGAIN : -EFAULT;
> > + break;
> > + default:
> > + if (sch->ccw_cb) {
> > + /* Handle device specific commands. */
> > + ret = sch->ccw_cb(sch, ccw);
> > + } else {
> > + ret = -EOPNOTSUPP;
> > + }
> > + break;
> > + }
> > + sch->last_cmd = ccw;
> > + if (ret == 0) {
> > + if (ccw->flags & CCW_FLAG_CC) {
> > + sch->channel_prog += 8;
> > + ret = -EAGAIN;
> > + }
> > + }
> > +
> > + return ret;
> > diff --git a/hw/s390x/css.h b/hw/s390x/css.h
> > new file mode 100644
> > index 0000000..b8a95cc
> > --- /dev/null
> > +++ b/hw/s390x/css.h
> > @@ -0,0 +1,62 @@
> > +/*
> > + * Channel subsystem structures and definitions.
> > + *
> > + * Copyright 2012 IBM Corp.
> > + * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> > + * your option) any later version. See the COPYING file in the top-level
> > + * directory.
> > + */
> > +
> > +#ifndef CSS_H
> > +#define CSS_H
> > +
> > +#include "ioinst.h"
> > +
> > +/* Channel subsystem constants. */
> > +#define MAX_SCHID 65535
> > +#define MAX_SSID 3
> > +#define MAX_CSSID 254 /* 255 is reserved */
> > +#define MAX_CHPID 255
> > +
> > +#define MAX_CIWS 8
> > +
> > +struct senseid {
>
> SenseID
OK.
>
> > + /* common part */
> > + uint32_t reserved:8; /* always 0x'FF' */
>
> The standard syntax calls for 'unsigned' instead of uint32_t for bit
> fields. But bit fields are not very well defined, it's better to avoid
> them.
Well, the equivalent Linux structure also looks like that :) But I can
switch this to a uint8_t/uint16_t structure.
>
> > + uint32_t cu_type:16; /* control unit type */
> > + uint32_t cu_model:8; /* control unit model */
> > + uint32_t dev_type:16; /* device type */
> > + uint32_t dev_model:8; /* device model */
> > + uint32_t unused:8; /* padding byte */
> > + /* extended part */
> > + uint32_t ciw[MAX_CIWS]; /* variable # of CIWs */
> > +};
> > +
> > diff --git a/target-s390x/ioinst.h b/target-s390x/ioinst.h
> > new file mode 100644
> > index 0000000..79628b4
> > --- /dev/null
> > +++ b/target-s390x/ioinst.h
> > @@ -0,0 +1,173 @@
> > +/*
> > + * S/390 channel I/O instructions
> > + *
> > + * Copyright 2012 IBM Corp.
> > + * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> > + * your option) any later version. See the COPYING file in the top-level
> > + * directory.
> > +*/
> > +
> > +#ifndef IOINST_S390X_H
> > +#define IOINST_S390X_H
> > +
> > +/*
> > + * Channel I/O related definitions, as defined in the Principles
> > + * Of Operation (and taken from the Linux implementation).
>
> Is this a copy and if so, is the license of original Linux file also GPLv2+?
It's not a verbatim copy.
>
> > + */
> > +
> > +/* subchannel status word (command mode only) */
> > +struct scsw {
>
> Please use more descriptive names instead of acronyms, for example SubChStatus.
I'd rather leave these at the well-known scsw, pmcw, etc. names. These
have been around for decades, and somebody familiar with channel I/O
will instantly know what a struct scsw is, but will need to look hard
at the code to figure out the meaning of SubChStatus.
>
> > + uint32_t key:4;
> > + uint32_t sctl:1;
> > + uint32_t eswf:1;
> > + uint32_t cc:2;
> > + uint32_t fmt:1;
> > + uint32_t pfch:1;
> > + uint32_t isic:1;
> > + uint32_t alcc:1;
> > + uint32_t ssi:1;
> > + uint32_t zcc:1;
> > + uint32_t ectl:1;
> > + uint32_t pno:1;
> > + uint32_t res:1;
> > + uint32_t fctl:3;
> > + uint32_t actl:7;
> > + uint32_t stctl:5;
> > + uint32_t cpa;
> > + uint32_t dstat:8;
> > + uint32_t cstat:8;
> > + uint32_t count:16;
> > +};
next prev parent reply other threads:[~2012-08-08 8:18 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-07 14:52 [Qemu-devel] [RFC PATCH 0/5] qemu: s390: virtual css and virtio-ccw Cornelia Huck
2012-08-07 14:52 ` [Qemu-devel] [PATCH 1/5] Update headers for upcoming s390 changes Cornelia Huck
2012-08-07 14:52 ` [Qemu-devel] [PATCH 2/5] s390: Virtual channel subsystem support Cornelia Huck
2012-08-07 21:00 ` Blue Swirl
2012-08-08 8:17 ` Cornelia Huck [this message]
2012-08-08 19:16 ` Blue Swirl
2012-08-08 19:34 ` Peter Maydell
2012-08-08 19:39 ` Blue Swirl
2012-08-09 7:19 ` Cornelia Huck
2012-08-08 8:27 ` Peter Maydell
2012-08-08 8:53 ` Cornelia Huck
2012-08-07 14:52 ` [Qemu-devel] [PATCH 3/5] s390: Add new channel I/O based virtio transport Cornelia Huck
2012-08-07 20:47 ` Blue Swirl
2012-08-08 8:28 ` Cornelia Huck
2012-08-08 19:03 ` Blue Swirl
2012-08-09 7:21 ` Cornelia Huck
2012-08-09 11:34 ` Stefan Hajnoczi
2012-08-09 12:12 ` Cornelia Huck
2012-08-09 12:27 ` Stefan Hajnoczi
2012-08-07 14:52 ` [Qemu-devel] [PATCH 4/5] s390: Virtual channel subsystem support for !KVM Cornelia Huck
2012-08-07 14:52 ` [Qemu-devel] [PATCH 5/5] [HACK] Handle multiple virtio aliases Cornelia Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120808101750.35800579@BR9GNB5Z \
--to=cornelia.huck@de.ibm.com \
--cc=agraf@suse.de \
--cc=aliguori@us.ibm.com \
--cc=avi@redhat.com \
--cc=blauwirbel@gmail.com \
--cc=borntraeger@de.ibm.com \
--cc=cotte@de.ibm.com \
--cc=heiko.carstens@de.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rusty@rustcorp.com.au \
--cc=schwidefsky@de.ibm.com \
--cc=sebott@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).