VirtualBox

儲存庫 vbox 的更動 67402


忽略:
時間撮記:
2017-6-14 下午01:13:07 (7 年 以前)
作者:
vboxsync
訊息:

bugref:8524: Additions/linux: play nicely with distribution-installed Additions
Additions: linux/drm: Change vbox_irq.c to kernel coding style

This is the result of running linux/scripts/Lindent + manual cleanups.
After this the file passes linux/scripts/checkpatch -f
except for the LINUX_VERSION_CODE checks.

This patch contains no functional changes, only coding style fixes,
including changing uintXX_t types to uXX.

Signed-off-by: Hans de Goede <hdegoede@…>

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Additions/linux/drm/vbox_irq.c

    r67175 r67402  
    4141static void vbox_clear_irq(void)
    4242{
    43     outl((uint32_t)~0, VGA_PORT_HGSMI_HOST);
    44 }
    45 
    46 static uint32_t vbox_get_flags(struct vbox_private *vbox)
     43        outl((u32)~0, VGA_PORT_HGSMI_HOST);
     44}
     45
     46static u32 vbox_get_flags(struct vbox_private *vbox)
    4747{
    4848        return readl(vbox->guest_heap + HOST_FLAGS_OFFSET);
     
    5151void vbox_report_hotplug(struct vbox_private *vbox)
    5252{
    53     schedule_work(&vbox->hotplug_work);
     53        schedule_work(&vbox->hotplug_work);
    5454}
    5555
    5656irqreturn_t vbox_irq_handler(int irq, void *arg)
    5757{
    58     struct drm_device *dev = (struct drm_device *) arg;
    59     struct vbox_private *vbox = (struct vbox_private *)dev->dev_private;
    60     uint32_t host_flags = vbox_get_flags(vbox);
    61 
    62     if (!(host_flags & HGSMIHOSTFLAGS_IRQ))
    63         return IRQ_NONE;
    64 
    65     /* Due to a bug in the initial host implementation of hot-plug interrupts,
    66      * the hot-plug and cursor capability flags were never cleared.  Fortunately
    67      * we can tell when they would have been set by checking that the VSYNC flag
    68      * is not set. */
    69     if (   host_flags & (HGSMIHOSTFLAGS_HOTPLUG | HGSMIHOSTFLAGS_CURSOR_CAPABILITIES)
    70         && !(host_flags & HGSMIHOSTFLAGS_VSYNC))
    71         vbox_report_hotplug(vbox);
    72     vbox_clear_irq();
    73     return IRQ_HANDLED;
    74 }
    75 
    76 /** Check that the position hints provided by the host are suitable for GNOME
     58        struct drm_device *dev = (struct drm_device *)arg;
     59        struct vbox_private *vbox = (struct vbox_private *)dev->dev_private;
     60        u32 host_flags = vbox_get_flags(vbox);
     61
     62        if (!(host_flags & HGSMIHOSTFLAGS_IRQ))
     63                return IRQ_NONE;
     64
     65        /*
     66         * Due to a bug in the initial host implementation of hot-plug irqs,
     67         * the hot-plug and cursor capability flags were never cleared.
     68         * Fortunately we can tell when they would have been set by checking
     69         * that the VSYNC flag is not set.
     70         */
     71        if (host_flags &
     72            (HGSMIHOSTFLAGS_HOTPLUG | HGSMIHOSTFLAGS_CURSOR_CAPABILITIES) &&
     73            !(host_flags & HGSMIHOSTFLAGS_VSYNC))
     74                vbox_report_hotplug(vbox);
     75
     76        vbox_clear_irq();
     77
     78        return IRQ_HANDLED;
     79}
     80
     81/**
     82 * Check that the position hints provided by the host are suitable for GNOME
    7783 * shell (i.e. all screens disjoint and hints for all enabled screens) and if
    7884 * not replace them with default ones.  Providing valid hints improves the
    79  * chances that we will get a known screen layout for pointer mapping. */
     85 * chances that we will get a known screen layout for pointer mapping.
     86 */
    8087static void validate_or_set_position_hints(struct vbox_private *vbox)
    8188{
    82     int i, j;
    83     uint16_t currentx = 0;
    84     bool valid = true;
    85 
    86     for (i = 0; i < vbox->num_crtcs; ++i) {
    87         for (j = 0; j < i; ++j) {
    88             struct VBVAMODEHINT *hintsi = &vbox->last_mode_hints[i];
    89             struct VBVAMODEHINT *hintsj = &vbox->last_mode_hints[j];
    90 
    91             if (hintsi->fEnabled && hintsj->fEnabled) {
    92                 if ((hintsi->dx >= 0xffff || hintsi->dy >= 0xffff ||
    93                      hintsj->dx >= 0xffff || hintsj->dy >= 0xffff) ||
    94                     (hintsi->dx < hintsj->dx + (hintsj->cx & 0x8fff) &&
    95                      hintsi->dx + (hintsi->cx & 0x8fff) > hintsj->dx) ||
    96                     (hintsi->dy < hintsj->dy + (hintsj->cy & 0x8fff) &&
    97                      hintsi->dy + (hintsi->cy & 0x8fff) > hintsj->dy))
    98                     valid = false;
    99             }
    100         }
    101     }
    102     if (!valid)
    103         for (i = 0; i < vbox->num_crtcs; ++i) {
    104             if (vbox->last_mode_hints[i].fEnabled) {
    105                 vbox->last_mode_hints[i].dx = currentx;
    106                 vbox->last_mode_hints[i].dy = 0;
    107                 currentx += vbox->last_mode_hints[i].cx & 0x8fff;
    108             }
    109         }
     89        int i, j;
     90        u16 currentx = 0;
     91        bool valid = true;
     92
     93        for (i = 0; i < vbox->num_crtcs; ++i) {
     94                for (j = 0; j < i; ++j) {
     95                        struct VBVAMODEHINT *hintsi = &vbox->last_mode_hints[i];
     96                        struct VBVAMODEHINT *hintsj = &vbox->last_mode_hints[j];
     97
     98                        if (hintsi->fEnabled && hintsj->fEnabled) {
     99                                if (hintsi->dx >= 0xffff ||
     100                                    hintsi->dy >= 0xffff ||
     101                                    hintsj->dx >= 0xffff ||
     102                                    hintsj->dy >= 0xffff ||
     103                                    (hintsi->dx <
     104                                        hintsj->dx + (hintsj->cx & 0x8fff) &&
     105                                     hintsi->dx + (hintsi->cx & 0x8fff) >
     106                                        hintsj->dx) ||
     107                                    (hintsi->dy <
     108                                        hintsj->dy + (hintsj->cy & 0x8fff) &&
     109                                     hintsi->dy + (hintsi->cy & 0x8fff) >
     110                                        hintsj->dy))
     111                                        valid = false;
     112                        }
     113                }
     114        }
     115        if (!valid)
     116                for (i = 0; i < vbox->num_crtcs; ++i) {
     117                        if (vbox->last_mode_hints[i].fEnabled) {
     118                                vbox->last_mode_hints[i].dx = currentx;
     119                                vbox->last_mode_hints[i].dy = 0;
     120                                currentx +=
     121                                    vbox->last_mode_hints[i].cx & 0x8fff;
     122                        }
     123                }
    110124}
    111125
     
    115129static void vbox_update_mode_hints(struct vbox_private *vbox)
    116130{
    117     struct drm_device *dev = vbox->dev;
    118     struct drm_connector *connector;
    119     struct vbox_connector *vbox_connector;
    120     struct VBVAMODEHINT *hints;
    121     uint16_t flags;
    122     bool disconnected;
    123     unsigned crtc_id;
    124     int rc;
    125 
    126     rc = VBoxHGSMIGetModeHints(vbox->guest_pool, vbox->num_crtcs,
    127                                vbox->last_mode_hints);
    128     if (RT_FAILURE(rc)) {
    129         printk("vboxvideo: VBoxHGSMIGetModeHints failed, rc=%i.\n", rc);
    130         return;
    131     }
    132     validate_or_set_position_hints(vbox);
     131        struct drm_device *dev = vbox->dev;
     132        struct drm_connector *connector;
     133        struct vbox_connector *vbox_connector;
     134        struct VBVAMODEHINT *hints;
     135        u16 flags;
     136        bool disconnected;
     137        unsigned int crtc_id;
     138        int rc;
     139
     140        rc = VBoxHGSMIGetModeHints(vbox->guest_pool, vbox->num_crtcs,
     141                                   vbox->last_mode_hints);
     142        if (RT_FAILURE(rc)) {
     143                DRM_ERROR("vboxvideo: VBoxHGSMIGetModeHints failed, rc=%i.\n",
     144                          rc);
     145                return;
     146        }
     147        validate_or_set_position_hints(vbox);
    133148#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
    134     drm_modeset_lock_all(dev);
     149        drm_modeset_lock_all(dev);
    135150#else
    136     mutex_lock(&dev->mode_config.mutex);
     151        mutex_lock(&dev->mode_config.mutex);
    137152#endif
    138     list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
    139         vbox_connector = to_vbox_connector(connector);
    140         hints = &vbox->last_mode_hints[vbox_connector->vbox_crtc->crtc_id];
    141         if (hints->magic == VBVAMODEHINT_MAGIC) {
    142             disconnected = !(hints->fEnabled);
    143             crtc_id = vbox_connector->vbox_crtc->crtc_id;
    144             flags =   VBVA_SCREEN_F_ACTIVE
    145                     | (disconnected ? VBVA_SCREEN_F_DISABLED : VBVA_SCREEN_F_BLANK);
    146             vbox_connector->mode_hint.width = hints->cx & 0x8fff;
    147             vbox_connector->mode_hint.height = hints->cy & 0x8fff;
    148             vbox_connector->vbox_crtc->x_hint = hints->dx;
    149             vbox_connector->vbox_crtc->y_hint = hints->dy;
    150             vbox_connector->mode_hint.disconnected = disconnected;
    151             if (vbox_connector->vbox_crtc->disconnected != disconnected) {
    152                 VBoxHGSMIProcessDisplayInfo(vbox->guest_pool, crtc_id,
    153                                             0, 0, 0, hints->cx * 4, hints->cx,
    154                                             hints->cy, 0, flags);
    155                 vbox_connector->vbox_crtc->disconnected = disconnected;
    156             }
    157         }
    158     }
     153        list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
     154                vbox_connector = to_vbox_connector(connector);
     155                hints =
     156                    &vbox->last_mode_hints[vbox_connector->vbox_crtc->crtc_id];
     157                if (hints->magic == VBVAMODEHINT_MAGIC) {
     158                        disconnected = !(hints->fEnabled);
     159                        crtc_id = vbox_connector->vbox_crtc->crtc_id;
     160                        flags = VBVA_SCREEN_F_ACTIVE
     161                            | (disconnected ? VBVA_SCREEN_F_DISABLED :
     162                               VBVA_SCREEN_F_BLANK);
     163                        vbox_connector->mode_hint.width = hints->cx & 0x8fff;
     164                        vbox_connector->mode_hint.height = hints->cy & 0x8fff;
     165                        vbox_connector->vbox_crtc->x_hint = hints->dx;
     166                        vbox_connector->vbox_crtc->y_hint = hints->dy;
     167                        vbox_connector->mode_hint.disconnected = disconnected;
     168                        if (vbox_connector->vbox_crtc->disconnected !=
     169                            disconnected) {
     170                                VBoxHGSMIProcessDisplayInfo(vbox->guest_pool,
     171                                                            crtc_id, 0, 0, 0,
     172                                                            hints->cx * 4,
     173                                                            hints->cx,
     174                                                            hints->cy, 0,
     175                                                            flags);
     176                                vbox_connector->vbox_crtc->disconnected =
     177                                    disconnected;
     178                        }
     179                }
     180        }
    159181#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
    160     drm_modeset_unlock_all(dev);
     182        drm_modeset_unlock_all(dev);
    161183#else
    162     mutex_unlock(&dev->mode_config.mutex);
     184        mutex_unlock(&dev->mode_config.mutex);
    163185#endif
    164186}
     
    166188static void vbox_hotplug_worker(struct work_struct *work)
    167189{
    168     struct vbox_private *vbox = container_of(work, struct vbox_private,
    169                                             hotplug_work);
    170 
    171     vbox_update_mode_hints(vbox);
    172     drm_kms_helper_hotplug_event(vbox->dev);
     190        struct vbox_private *vbox = container_of(work, struct vbox_private,
     191                                                hotplug_work);
     192
     193        vbox_update_mode_hints(vbox);
     194        drm_kms_helper_hotplug_event(vbox->dev);
    173195}
    174196
    175197int vbox_irq_init(struct vbox_private *vbox)
    176198{
    177     int ret;
    178 
    179     vbox_update_mode_hints(vbox);
     199        int ret;
     200
     201        vbox_update_mode_hints(vbox);
    180202#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)
    181     ret = drm_irq_install(vbox->dev, vbox->dev->pdev->irq);
     203        ret = drm_irq_install(vbox->dev, vbox->dev->pdev->irq);
    182204#else
    183     ret = drm_irq_install(vbox->dev);
     205        ret = drm_irq_install(vbox->dev);
    184206#endif
    185     if (unlikely(ret != 0)) {
    186         vbox_irq_fini(vbox);
    187         DRM_ERROR("Failed installing irq: %d\n", ret);
    188         return 1;
    189     }
    190     INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker);
    191     vbox->isr_installed = true;
    192     return 0;
     207        if (unlikely(ret != 0)) {
     208                vbox_irq_fini(vbox);
     209                DRM_ERROR("Failed installing irq: %d\n", ret);
     210                return 1;
     211        }
     212        INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker);
     213        vbox->isr_installed = true;
     214        return 0;
    193215}
    194216
    195217void vbox_irq_fini(struct vbox_private *vbox)
    196218{
    197     if (vbox->isr_installed) {
    198         drm_irq_uninstall(vbox->dev);
    199         flush_work(&vbox->hotplug_work);
    200         vbox->isr_installed = false;
    201     }
    202 }
     219        if (vbox->isr_installed) {
     220                drm_irq_uninstall(vbox->dev);
     221                flush_work(&vbox->hotplug_work);
     222                vbox->isr_installed = false;
     223        }
     224}
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette