Author: br
Date: Fri Jul  3 14:13:16 2015
New Revision: 285091
URL: https://svnweb.freebsd.org/changeset/base/285091

Log:
  Add 'prewrite' method allowing us to run some platform-specific
  code before each write happens, e.g. write-back caches.
  This will help booting in Bluespec simulator of CHERI processor.

Modified:
  head/sys/dev/virtio/mmio/virtio_mmio.c
  head/sys/dev/virtio/mmio/virtio_mmio_if.m

Modified: head/sys/dev/virtio/mmio/virtio_mmio.c
==============================================================================
--- head/sys/dev/virtio/mmio/virtio_mmio.c      Fri Jul  3 14:11:01 2015        
(r285090)
+++ head/sys/dev/virtio/mmio/virtio_mmio.c      Fri Jul  3 14:13:16 2015        
(r285091)
@@ -138,18 +138,24 @@ static void       vtmmio_vq_intr(void *);
  */
 #define vtmmio_write_config_1(sc, o, v)                                \
 do {                                                           \
+       if (sc->platform != NULL)                               \
+               VIRTIO_MMIO_PREWRITE(sc->platform, (o), (v));   \
        bus_write_1((sc)->res[0], (o), (v));                    \
        if (sc->platform != NULL)                               \
                VIRTIO_MMIO_NOTE(sc->platform, (o), (v));       \
 } while (0)
 #define vtmmio_write_config_2(sc, o, v)                                \
 do {                                                           \
+       if (sc->platform != NULL)                               \
+               VIRTIO_MMIO_PREWRITE(sc->platform, (o), (v));   \
        bus_write_2((sc)->res[0], (o), (v));                    \
        if (sc->platform != NULL)                               \
                VIRTIO_MMIO_NOTE(sc->platform, (o), (v));       \
 } while (0)
 #define vtmmio_write_config_4(sc, o, v)                                \
 do {                                                           \
+       if (sc->platform != NULL)                               \
+               VIRTIO_MMIO_PREWRITE(sc->platform, (o), (v));   \
        bus_write_4((sc)->res[0], (o), (v));                    \
        if (sc->platform != NULL)                               \
                VIRTIO_MMIO_NOTE(sc->platform, (o), (v));       \

Modified: head/sys/dev/virtio/mmio/virtio_mmio_if.m
==============================================================================
--- head/sys/dev/virtio/mmio/virtio_mmio_if.m   Fri Jul  3 14:11:01 2015        
(r285090)
+++ head/sys/dev/virtio/mmio/virtio_mmio_if.m   Fri Jul  3 14:13:16 2015        
(r285091)
@@ -42,6 +42,13 @@ INTERFACE virtio_mmio;
 
 CODE {
        static int
+       virtio_mmio_prewrite(device_t dev, size_t offset, int val)
+       {
+
+               return (1);
+       }
+
+       static int
        virtio_mmio_note(device_t dev, size_t offset, int val)
        {
 
@@ -58,6 +65,15 @@ CODE {
 };
 
 #
+# Inform backend we are going to write data at offset.
+#
+METHOD int prewrite {
+       device_t        dev;
+       size_t          offset;
+       int             val;
+} DEFAULT virtio_mmio_prewrite;
+
+#
 # Inform backend we have data wrotten to offset.
 #
 METHOD int note {
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to