On Thu, 28 Jan 2021 at 16:54, Alex Bennée <alex.ben...@linaro.org> wrote:
> > Shreyansh Chouhan <chouhan.shreyansh2...@gmail.com> writes: > > > Thanks a lot Alex! > > > >> All QEMU devices have two parts, a frontend (which the guest sees) and a > >> backend (which is how the data gets to somewhere in the host). Some of > >> the command line options in QEMU elide the details for convenience (-nic > >> and -drive are examples). The -netdev device is all about configuring > >> the backend of the network part for a paired -device front end. There is > >> a similar setup for audio (-audiodev) although I'll defer to Gerd's > >> expertise on how the two interact. > > > > This helped me understand a bit more about how the devices work. In the > > source > > code, I found the `virtio-net-pci.c` and `virtio-net.c` files, I think > the > > pci device is what is visible to the guest. > > So `virtio-net-pci.c` should be the front end? > > No - they are both front-ends. In VirtIO you have two transports. The > first is virtio-mmio which is a simple set of memory mapped IO > registers. There is no discovery (well there is some but the guest needs > to find where in memory the mmio bus is via some method like hardcoded > address or DTB). > > The second is virtio-pci. Here the virtio devices are encapsulated in a > PCI bus so you get the benefits of discovery and bus enumeration. > So I am a bit confused here. First of there are two parts to a virtio device in general. One is the front end that the guest sees, and one is where the processing happens, which could be either in QEMU or as a separate daemon. In case of an in QEMU virtio device, the QEMU front end is replaced by the virtio-front end. Is that true? That's what I think should happen if both of those files are front ends. When you said earlier that all QEMU devices have two parts, I somehow thought that the in-QEMU backend for the audio device will itself have two parts. > > > For the realize function, I saw that the `virtio_net_device_realize` > > function initializes > > the `net_conf` for the device. So I am guessing that the > > `virtio_snd_device_realize` function > > should initialize the number of jacks and streams a device has, along > with > > the configuration > > for all these jacks and streams? > > No those are all front-end configuration knobs. > I am assuming these are set from the command-line or the configuration files. > > > The thing is I do not understand `net` devices all that well so I get a > bit > > confused with > > what is specific to a net device and what should I actually be worried > > about :) > > > > The device initalization step mentions that the jack and streams should > be > > read and > > a query should be made for the config of all jacks and streams. What > should > > be the > > default values of these configurations? I think the realize function is > > responsible > > for setting these up. > > Gerd? > > > > -- > Alex Bennée > -- Shreyansh