Ok, I just did another kernel merge to pick up the i810 compatibility bits, and decided it is time to try to merge back some of the stuff that has accumulated in the standard kernel and that makes it more painful than necessary to examine the diffs for differences.
This is mostly whitespace changes (some of it new from Dave Jones, some of it quite old), and some other minor things: moving some counter and lock initializations slightly earlier to where the data structure they are in are allocated and initialized, so that interrupts can't even by mistake see them partially done. It also removes the printk() for the AGP version, since that is actually done by the AGP layer anyway. I'd appreciate it if all (or even most) of this could find itself back into the DRI CVS tree, to make it easier to read the code and merge it (some of the whitespace fixes are literally broken whitespace in the DRI tree - comments that end up being in strange columns etc). Apart from moving some initializations around and the aforementioned printk removal, this should not actually affect semantics at all. Oh, and the thing will apply with a few offsets, since I edited the patch to remove stuff that you don't want at this point. My tree doesn't contain all of the 2.4.x compatibility crud etc. You can apply (or not apply) everything independently, so feel free to cherry-pick the patches. I did edit out anything that looked even remotely like it could cause discussion (ie this does _not_ contain the "cpu_relax()" stuff that I have in my tree, for example). Thanks, Linus ----- diff -u --recursive /home/torvalds/dri-kernel/Kconfig ./Kconfig --- /home/torvalds/dri-kernel/Kconfig 2003-04-22 14:30:23.000000000 -0700 +++ ./Kconfig 2003-08-14 13:05:45.137737925 -0700 @@ -24,10 +24,10 @@ config DRM_GAMMA tristate "3dlabs GMX 2000" - depends on DRM && n + depends on DRM help - This is the old gamma driver, disabled for now unless somebody - tells me it actually might work. + This is the old gamma driver, please tell me if it might actually + work. config DRM_R128 tristate "ATI Rage 128" @@ -49,7 +49,7 @@ config DRM_I810 tristate "Intel I810" - depends on DRM && AGP + depends on DRM && AGP && AGP_INTEL help Choose this option if you have an Intel I810 graphics card. If M is selected, the module will be called i810. AGP support is required @@ -57,7 +57,7 @@ config DRM_I830 tristate "Intel 830M, 845G, 852GM, 855GM, 865G" - depends on DRM && AGP + depends on DRM && AGP && AGP_INTEL help Choose this option if you have a system that has Intel 830M, 845G, 852GM, 855GM or 865G integrated graphics. If M is selected, the @@ -72,3 +72,12 @@ Choose this option if you have a Matrox G200, G400 or G450 graphics card. If M is selected, the module will be called mga. AGP support is required for this driver to work. + +config DRM_SIS + tristate "SiS video cards" + depends on DRM && AGP && FB_SIS + help + Choose this option if you have a SiS 630 or compatibel video + chipset. If M is selected the module will be called sis. AGP + and SiS FB support is required for this driver to work. + diff -u --recursive /home/torvalds/dri-kernel/drm_agpsupport.h ./drm_agpsupport.h --- /home/torvalds/dri-kernel/drm_agpsupport.h 2003-07-25 20:04:22.000000000 -0700 +++ ./drm_agpsupport.h 2003-08-14 13:05:45.361704630 -0700 @@ -106,7 +105,8 @@ if ( dev->agp->cant_use_aperture ) return -EINVAL; #endif - if ((retcode = drm_agp->acquire())) return retcode; + if ((retcode = drm_agp->acquire())) + return retcode; dev->agp->acquired = 1; return 0; } @@ -147,7 +143,8 @@ */ void DRM(agp_do_release)(void) { - if (drm_agp->release) drm_agp->release(); + if (drm_agp->release) + drm_agp->release(); } /** @@ -201,7 +198,8 @@ unsigned long pages; u32 type; - if (!dev->agp || !dev->agp->acquired) return -EINVAL; + if (!dev->agp || !dev->agp->acquired) + return -EINVAL; if (copy_from_user(&request, (drm_agp_buffer_t *)arg, sizeof(request))) return -EFAULT; if (!(entry = DRM(alloc)(sizeof(*entry), DRM_MEM_AGPLISTS))) @@ -227,11 +225,12 @@ entry->pages = pages; entry->prev = NULL; entry->next = dev->agp->memory; - if (dev->agp->memory) dev->agp->memory->prev = entry; + if (dev->agp->memory) + dev->agp->memory->prev = entry; dev->agp->memory = entry; request.handle = entry->handle; - request.physical = memory->physical; + request.physical = memory->physical; if (copy_to_user((drm_agp_buffer_t *)arg, &request, sizeof(request))) { dev->agp->memory = entry->next; @@ -258,7 +257,8 @@ drm_agp_mem_t *entry; for (entry = dev->agp->memory; entry; entry = entry->next) { - if (entry->handle == handle) return entry; + if (entry->handle == handle) + return entry; } return NULL; } @@ -284,12 +284,14 @@ drm_agp_mem_t *entry; int ret; - if (!dev->agp || !dev->agp->acquired) return -EINVAL; + if (!dev->agp || !dev->agp->acquired) + return -EINVAL; if (copy_from_user(&request, (drm_agp_binding_t *)arg, sizeof(request))) return -EFAULT; if (!(entry = DRM(agp_lookup_entry)(dev, request.handle))) return -EINVAL; - if (!entry->bound) return -EINVAL; + if (!entry->bound) + return -EINVAL; ret = DRM(unbind_agp)(entry->memory); if (ret == 0) entry->bound = 0; @@ -325,9 +327,11 @@ return -EFAULT; if (!(entry = DRM(agp_lookup_entry)(dev, request.handle))) return -EINVAL; - if (entry->bound) return -EINVAL; + if (entry->bound) + return -EINVAL; page = (request.offset + PAGE_SIZE - 1) / PAGE_SIZE; - if ((retcode = DRM(bind_agp)(entry->memory, page))) return retcode; + if ((retcode = DRM(bind_agp)(entry->memory, page))) + return retcode; entry->bound = dev->agp->base + (page << PAGE_SHIFT); DRM_DEBUG("base = 0x%lx entry->bound = 0x%lx\n", dev->agp->base, entry->bound); @@ -356,16 +360,23 @@ drm_agp_buffer_t request; drm_agp_mem_t *entry; - if (!dev->agp || !dev->agp->acquired) return -EINVAL; + if (!dev->agp || !dev->agp->acquired) + return -EINVAL; if (copy_from_user(&request, (drm_agp_buffer_t *)arg, sizeof(request))) return -EFAULT; if (!(entry = DRM(agp_lookup_entry)(dev, request.handle))) return -EINVAL; - if (entry->bound) DRM(unbind_agp)(entry->memory); + if (entry->bound) + DRM(unbind_agp)(entry->memory); + + if (entry->prev) + entry->prev->next = entry->next; + else + dev->agp->memory = entry->next; + + if (entry->next) + entry->next->prev = entry->prev; - if (entry->prev) entry->prev->next = entry->next; - else dev->agp->memory = entry->next; - if (entry->next) entry->next->prev = entry->prev; DRM(free_agp)(entry->memory, entry->pages); DRM(free)(entry, sizeof(*entry), DRM_MEM_AGPLISTS); return 0; @@ -402,12 +413,6 @@ head->cant_use_aperture = head->agp_info.cant_use_aperture; head->page_mask = head->agp_info.page_mask; #endif - - DRM_INFO("AGP %d.%d aperture @ 0x%08lx %ZuMB\n", - head->agp_info.version.major, - head->agp_info.version.minor, - head->agp_info.aper_base, - head->agp_info.aper_size); } return head; } @@ -426,14 +431,16 @@ /** Calls drm_agp->allocate_memory() */ DRM_AGP_MEM *DRM(agp_allocate_memory)(size_t pages, u32 type) { - if (!drm_agp->allocate_memory) return NULL; + if (!drm_agp->allocate_memory) + return NULL; return drm_agp->allocate_memory(pages, type); } /** Calls drm_agp->free_memory() */ int DRM(agp_free_memory)(DRM_AGP_MEM *handle) { - if (!handle || !drm_agp->free_memory) return 0; + if (!handle || !drm_agp->free_memory) + return 0; drm_agp->free_memory(handle); return 1; } @@ -441,14 +448,16 @@ /** Calls drm_agp->bind_memory() */ int DRM(agp_bind_memory)(DRM_AGP_MEM *handle, off_t start) { - if (!handle || !drm_agp->bind_memory) return -EINVAL; + if (!handle || !drm_agp->bind_memory) + return -EINVAL; return drm_agp->bind_memory(handle, start); } /** Calls drm_agp->unbind_memory() */ int DRM(agp_unbind_memory)(DRM_AGP_MEM *handle) { - if (!handle || !drm_agp->unbind_memory) return -EINVAL; + if (!handle || !drm_agp->unbind_memory) + return -EINVAL; return drm_agp->unbind_memory(handle); } diff -u --recursive /home/torvalds/dri-kernel/drm_dma.h ./drm_dma.h --- /home/torvalds/dri-kernel/drm_dma.h 2003-06-02 11:13:17.000000000 -0700 +++ ./drm_dma.h 2003-08-14 13:05:45.142737181 -0700 @@ -239,7 +238,7 @@ down( &dev->struct_sem ); - /* Driver must have been initialized */ + /* Driver must have been initialized */ if ( !dev->dev_private ) { up( &dev->struct_sem ); return -EINVAL; diff -u --recursive /home/torvalds/dri-kernel/drm_drv.h ./drm_drv.h --- /home/torvalds/dri-kernel/drm_drv.h 2003-08-06 20:04:30.000000000 -0700 +++ ./drm_drv.h 2003-08-14 13:05:45.142737181 -0700 @@ -344,7 +344,6 @@ dev->last_context = 0; dev->last_switch = 0; dev->last_checked = 0; - init_timer( &dev->timer ); init_waitqueue_head( &dev->context_wait ); dev->ctx_start = 0; @@ -624,6 +623,7 @@ dev = &(DRM(device)[i]); memset( (void *)dev, 0, sizeof(*dev) ); dev->count_lock = SPIN_LOCK_UNLOCKED; + init_timer( &dev->timer ); sema_init( &dev->struct_sem, 1 ); if ((DRM(minor)[i] = DRM(stub_register)(DRIVER_NAME, &DRM(fops),dev)) < 0) diff -u --recursive /home/torvalds/dri-kernel/drm_vm.h ./drm_vm.h --- /home/torvalds/dri-kernel/drm_vm.h 2003-06-02 11:13:18.000000000 -0700 +++ ./drm_vm.h 2003-08-14 13:05:45.143737033 -0700 @@ -510,7 +509,7 @@ if (map->size != vma->vm_end - vma->vm_start) return -EINVAL; if (!capable(CAP_SYS_ADMIN) && (map->flags & _DRM_READ_ONLY)) { - vma->vm_flags &= (VM_READ | VM_MAYREAD); + vma->vm_flags &= ~(VM_WRITE | VM_MAYWRITE); #if defined(__i386__) || defined(__x86_64__) pgprot_val(vma->vm_page_prot) &= ~_PAGE_RW; #else diff -u --recursive /home/torvalds/dri-kernel/i810_dma.c ./i810_dma.c --- /home/torvalds/dri-kernel/i810_dma.c 2003-08-13 20:04:10.000000000 -0700 +++ ./i810_dma.c 2003-08-14 13:05:45.146736587 -0700 @@ -62,7 +55,7 @@ { drm_device_dma_t *dma = dev->dma; drm_i810_private_t *dev_priv = dev->dev_private; - u32 *temp = (u32 *)dev_priv->hw_status_page; + u32 *temp = dev_priv->hw_status_page; int i; DRM_DEBUG( "hw_status: Interrupt Status : %x\n", temp[0]); @@ -465,7 +458,7 @@ { /* Get v1.1 init data */ - if(copy_from_user(init, (drm_i810_pre12_init_t *)arg, + if (copy_from_user(init, (drm_i810_pre12_init_t *)arg, sizeof(drm_i810_pre12_init_t))) { return -EFAULT; } @@ -503,9 +496,8 @@ int retcode = 0; /* Get only the init func */ - if (copy_from_user(&init, (void *)arg, sizeof(drm_i810_init_func_t))) { + if (copy_from_user(&init, (void *)arg, sizeof(drm_i810_init_func_t))) return -EFAULT; - } switch(init.func) { case I810_INIT_DMA: @@ -515,30 +507,34 @@ * It will someday go away. */ retcode = i810_dma_init_compat(&init, arg); - if(retcode) { + if (retcode) return retcode; - } + dev_priv = DRM(alloc)(sizeof(drm_i810_private_t), DRM_MEM_DRIVER); - if(dev_priv == NULL) return -ENOMEM; + if (dev_priv == NULL) + return -ENOMEM; retcode = i810_dma_initialize(dev, dev_priv, &init); - break; + break; + default: case I810_INIT_DMA_1_4: DRM_INFO("Using v1.4 init.\n"); - if(copy_from_user(&init, (drm_i810_init_t *)arg, + if (copy_from_user(&init, (drm_i810_init_t *)arg, sizeof(drm_i810_init_t))) { return -EFAULT; } dev_priv = DRM(alloc)(sizeof(drm_i810_private_t), DRM_MEM_DRIVER); - if(dev_priv == NULL) return -ENOMEM; + if (dev_priv == NULL) + return -ENOMEM; retcode = i810_dma_initialize(dev, dev_priv, &init); - break; + break; + case I810_CLEANUP_DMA: DRM_INFO("DMA Cleanup\n"); retcode = i810_dma_cleanup(dev); - break; + break; } return retcode; @@ -1052,7 +1048,7 @@ drm_device_t *dev = priv->dev; drm_device_dma_t *dma = dev->dma; drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private; - u32 *hw_status = (u32 *)dev_priv->hw_status_page; + u32 *hw_status = dev_priv->hw_status_page; drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *) dev_priv->sarea_priv; drm_i810_vertex_t vertex; @@ -1133,7 +1129,7 @@ drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private; - u32 *hw_status = (u32 *)dev_priv->hw_status_page; + u32 *hw_status = dev_priv->hw_status_page; drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *) dev_priv->sarea_priv; @@ -1149,7 +1145,7 @@ int retcode = 0; drm_i810_dma_t d; drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private; - u32 *hw_status = (u32 *)dev_priv->hw_status_page; + u32 *hw_status = dev_priv->hw_status_page; drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *) dev_priv->sarea_priv; @@ -1261,7 +1257,7 @@ drm_device_t *dev = priv->dev; drm_device_dma_t *dma = dev->dma; drm_i810_private_t *dev_priv = (drm_i810_private_t *)dev->dev_private; - u32 *hw_status = (u32 *)dev_priv->hw_status_page; + u32 *hw_status = dev_priv->hw_status_page; drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *) dev_priv->sarea_priv; drm_i810_mc_t mc; diff -u --recursive /home/torvalds/dri-kernel/i830_irq.c ./i830_irq.c --- /home/torvalds/dri-kernel/i830_irq.c 2003-07-29 20:05:12.000000000 -0700 +++ ./i830_irq.c 2003-08-14 13:05:45.148736290 -0700 @@ -186,6 +185,9 @@ I830_WRITE16( I830REG_HWSTAM, 0xffff ); I830_WRITE16( I830REG_INT_MASK_R, 0x0 ); I830_WRITE16( I830REG_INT_ENABLE_R, 0x0 ); + atomic_set(&dev_priv->irq_received, 0); + atomic_set(&dev_priv->irq_emitted, 0); + init_waitqueue_head(&dev_priv->irq_queue); } void DRM(driver_irq_postinstall)( drm_device_t *dev ) { @@ -193,9 +195,6 @@ (drm_i830_private_t *)dev->dev_private; I830_WRITE16( I830REG_INT_ENABLE_R, 0x2 ); - atomic_set(&dev_priv->irq_received, 0); - atomic_set(&dev_priv->irq_emitted, 0); - init_waitqueue_head(&dev_priv->irq_queue); } void DRM(driver_irq_uninstall)( drm_device_t *dev ) { ------------------------------------------------------- This SF.Net email sponsored by: Free pre-built ASP.NET sites including Data Reports, E-commerce, Portals, and Forums are available now. Download today and enter to win an XBOX or Visual Studio .NET. http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01 _______________________________________________ Dri-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dri-devel