···3838 Choose this option if you have an ATI Radeon graphics card. There3939 are both PCI and AGP versions. You don't need to choose this to4040 run the Radeon in plain VGA mode.4141-4141+4242 If M is selected, the module will be called radeon.43434444config DRM_I810···7171 852GM, 855GM 865G or 915G integrated graphics. If M is selected, the7272 module will be called i915. AGP support is required for this driver7373 to work. This driver is used by the Intel driver in X.org 6.8 and7474- XFree86 4.4 and above. If unsure, build this and i830 as modules and 7474+ XFree86 4.4 and above. If unsure, build this and i830 as modules and7575 the X server will load the correct one.7676-7676+7777endchoice78787979config DRM_MGA···8888 tristate "SiS video cards"8989 depends on DRM && AGP9090 help9191- Choose this option if you have a SiS 630 or compatible video 9191+ Choose this option if you have a SiS 630 or compatible video9292 chipset. If M is selected the module will be called sis. AGP9393 support is required for this driver to work.9494···105105 help106106 Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister107107 chipset. If M is selected the module will be called savage.108108-
···8080 }8181}82828383-static struct hlist_node *drm_ht_find_key(struct drm_open_hash *ht, 8383+static struct hlist_node *drm_ht_find_key(struct drm_open_hash *ht,8484 unsigned long key)8585{8686 struct drm_hash_item *entry;···129129}130130131131/*132132- * Just insert an item and return any "bits" bit key that hasn't been 132132+ * Just insert an item and return any "bits" bit key that hasn't been133133 * used before.134134 */135135int drm_ht_just_insert_please(struct drm_open_hash *ht, struct drm_hash_item *item,···200200 ht->table = NULL;201201 }202202}203203-
···4545#endif46464747/** Maximum number of drawables in the SAREA */4848-#define SAREA_MAX_DRAWABLES 2564848+#define SAREA_MAX_DRAWABLES 25649495050#define SAREA_DRAWABLE_CLAIMED_ENTRY 0x800000005151
+1-1
drivers/char/drm/drm_stub.c
···224224 }225225 if ((ret = drm_get_head(dev, &dev->primary)))226226 goto err_g2;227227-227227+228228 DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",229229 driver->name, driver->major, driver->minor, driver->patchlevel,230230 driver->date, dev->primary.minor);
···1212#define _I830_DEFINES_13131414#define I830_DMA_BUF_ORDER 121515-#define I830_DMA_BUF_SZ (1<<I830_DMA_BUF_ORDER)1616-#define I830_DMA_BUF_NR 2561717-#define I830_NR_SAREA_CLIPRECTS 81515+#define I830_DMA_BUF_SZ (1<<I830_DMA_BUF_ORDER)1616+#define I830_DMA_BUF_NR 2561717+#define I830_NR_SAREA_CLIPRECTS 818181919/* Each region is a minimum of 64k, and there are at most 64 of them.2020 */···5858#define I830_UPLOAD_TEXBLEND_MASK 0xf000005959#define I830_UPLOAD_TEX_PALETTE_N(n) (0x1000000 << (n))6060#define I830_UPLOAD_TEX_PALETTE_SHARED 0x40000006161-#define I830_UPLOAD_STIPPLE 0x80000006161+#define I830_UPLOAD_STIPPLE 0x800000062626363/* Indices into buf.Setup where various bits of state are mirrored per6464 * context and per buffer. These can be fired at the card as a unit,
···853853# define R300_TX_FORMAT_W8Z8Y8X8 0xC854854# define R300_TX_FORMAT_W2Z10Y10X10 0xD855855# define R300_TX_FORMAT_W16Z16Y16X16 0xE856856-# define R300_TX_FORMAT_DXT1 0xF857857-# define R300_TX_FORMAT_DXT3 0x10858858-# define R300_TX_FORMAT_DXT5 0x11856856+# define R300_TX_FORMAT_DXT1 0xF857857+# define R300_TX_FORMAT_DXT3 0x10858858+# define R300_TX_FORMAT_DXT5 0x11859859# define R300_TX_FORMAT_D3DMFT_CxV8U8 0x12 /* no swizzle */860860-# define R300_TX_FORMAT_A8R8G8B8 0x13 /* no swizzle */861861-# define R300_TX_FORMAT_B8G8_B8G8 0x14 /* no swizzle */862862-# define R300_TX_FORMAT_G8R8_G8B8 0x15 /* no swizzle */860860+# define R300_TX_FORMAT_A8R8G8B8 0x13 /* no swizzle */861861+# define R300_TX_FORMAT_B8G8_B8G8 0x14 /* no swizzle */862862+# define R300_TX_FORMAT_G8R8_G8B8 0x15 /* no swizzle */863863 /* 0x16 - some 16 bit green format.. ?? */864864# define R300_TX_FORMAT_UNK25 (1 << 25) /* no swizzle */865865# define R300_TX_FORMAT_CUBIC_MAP (1 << 26)···867867 /* gap */868868 /* Floating point formats */869869 /* Note - hardware supports both 16 and 32 bit floating point */870870-# define R300_TX_FORMAT_FL_I16 0x18871871-# define R300_TX_FORMAT_FL_I16A16 0x19870870+# define R300_TX_FORMAT_FL_I16 0x18871871+# define R300_TX_FORMAT_FL_I16A16 0x19872872# define R300_TX_FORMAT_FL_R16G16B16A16 0x1A873873-# define R300_TX_FORMAT_FL_I32 0x1B874874-# define R300_TX_FORMAT_FL_I32A32 0x1C873873+# define R300_TX_FORMAT_FL_I32 0x1B874874+# define R300_TX_FORMAT_FL_I32A32 0x1C875875# define R300_TX_FORMAT_FL_R32G32B32A32 0x1D876876 /* alpha modes, convenience mostly */877877 /* if you have alpha, pick constant appropriate to the878878 number of channels (1 for I8, 2 for I8A8, 4 for R8G8B8A8, etc */879879-# define R300_TX_FORMAT_ALPHA_1CH 0x000880880-# define R300_TX_FORMAT_ALPHA_2CH 0x200881881-# define R300_TX_FORMAT_ALPHA_4CH 0x600882882-# define R300_TX_FORMAT_ALPHA_NONE 0xA00879879+# define R300_TX_FORMAT_ALPHA_1CH 0x000880880+# define R300_TX_FORMAT_ALPHA_2CH 0x200881881+# define R300_TX_FORMAT_ALPHA_4CH 0x600882882+# define R300_TX_FORMAT_ALPHA_NONE 0xA00883883 /* Swizzling */884884 /* constants */885885# define R300_TX_FORMAT_X 0···13601360# define R300_RB3D_Z_DISABLED_2 0x0000001413611361# define R300_RB3D_Z_TEST 0x0000001213621362# define R300_RB3D_Z_TEST_AND_WRITE 0x0000001613631363-# define R300_RB3D_Z_WRITE_ONLY 0x0000000613631363+# define R300_RB3D_Z_WRITE_ONLY 0x000000061364136413651365# define R300_RB3D_Z_TEST 0x0000001213661366# define R300_RB3D_Z_TEST_AND_WRITE 0x0000001613671367-# define R300_RB3D_Z_WRITE_ONLY 0x0000000613671367+# define R300_RB3D_Z_WRITE_ONLY 0x0000000613681368# define R300_RB3D_STENCIL_ENABLE 0x000000011369136913701370#define R300_RB3D_ZSTENCIL_CNTL_1 0x4F04
+4-4
drivers/char/drm/radeon_cp.c
···11271127{11281128 u32 ring_start, cur_read_ptr;11291129 u32 tmp;11301130-11301130+11311131 /* Initialize the memory controller. With new memory map, the fb location11321132 * is not changed, it should have been properly initialized already. Part11331133 * of the problem is that the code below is bogus, assuming the GART is···13581358 return;13591359 }1360136013611361- tmp = RADEON_READ(RADEON_AIC_CNTL);13611361+ tmp = RADEON_READ(RADEON_AIC_CNTL);1362136213631363 if (on) {13641364 RADEON_WRITE(RADEON_AIC_CNTL,···1583158315841584 dev_priv->fb_location = (RADEON_READ(RADEON_MC_FB_LOCATION)15851585 & 0xffff) << 16;15861586- dev_priv->fb_size = 15861586+ dev_priv->fb_size =15871587 ((RADEON_READ(RADEON_MC_FB_LOCATION) & 0xffff0000u) + 0x10000)15881588 - dev_priv->fb_location;15891589···16301630 ((base + dev_priv->gart_size) & 0xfffffffful) < base)16311631 base = dev_priv->fb_location16321632 - dev_priv->gart_size;16331633- } 16331633+ }16341634 dev_priv->gart_vm_start = base & 0xffc00000u;16351635 if (dev_priv->gart_vm_start != base)16361636 DRM_INFO("GART aligned down from 0x%08x to 0x%08x\n",
···11/* via_dmablit.c -- PCI DMA BitBlt support for the VIA Unichrome/Pro22- * 22+ *33 * Copyright (C) 2005 Thomas Hellstrom, All Rights Reserved.44 *55 * Permission is hereby granted, free of charge, to any person obtaining a···1616 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1717 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1818 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL1919- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 2020- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2121- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 1919+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,2020+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR2121+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE2222 * USE OR OTHER DEALINGS IN THE SOFTWARE.2323 *2424- * Authors: 2424+ * Authors:2525 * Thomas Hellstrom.2626 * Partially based on code obtained from Digeo Inc.2727 */282829293030/*3131- * Unmaps the DMA mappings. 3232- * FIXME: Is this a NoOp on x86? Also 3333- * FIXME: What happens if this one is called and a pending blit has previously done 3434- * the same DMA mappings? 3131+ * Unmaps the DMA mappings.3232+ * FIXME: Is this a NoOp on x86? Also3333+ * FIXME: What happens if this one is called and a pending blit has previously done3434+ * the same DMA mappings?3535 */36363737#include "drmP.h"···6565 int num_desc = vsg->num_desc;6666 unsigned cur_descriptor_page = num_desc / vsg->descriptors_per_page;6767 unsigned descriptor_this_page = num_desc % vsg->descriptors_per_page;6868- drm_via_descriptor_t *desc_ptr = vsg->desc_pages[cur_descriptor_page] + 6868+ drm_via_descriptor_t *desc_ptr = vsg->desc_pages[cur_descriptor_page] +6969 descriptor_this_page;7070 dma_addr_t next = vsg->chain_start;7171···7373 if (descriptor_this_page-- == 0) {7474 cur_descriptor_page--;7575 descriptor_this_page = vsg->descriptors_per_page - 1;7676- desc_ptr = vsg->desc_pages[cur_descriptor_page] + 7676+ desc_ptr = vsg->desc_pages[cur_descriptor_page] +7777 descriptor_this_page;7878 }7979 dma_unmap_single(&pdev->dev, next, sizeof(*desc_ptr), DMA_TO_DEVICE);···9393static void9494via_map_blit_for_device(struct pci_dev *pdev,9595 const drm_via_dmablit_t *xfer,9696- drm_via_sg_info_t *vsg, 9696+ drm_via_sg_info_t *vsg,9797 int mode)9898{9999 unsigned cur_descriptor_page = 0;···110110 dma_addr_t next = 0 | VIA_DMA_DPR_EC;111111 drm_via_descriptor_t *desc_ptr = NULL;112112113113- if (mode == 1) 113113+ if (mode == 1)114114 desc_ptr = vsg->desc_pages[cur_descriptor_page];115115116116 for (cur_line = 0; cur_line < xfer->num_lines; ++cur_line) {···118118 line_len = xfer->line_length;119119 cur_fb = fb_addr;120120 cur_mem = mem_addr;121121-121121+122122 while (line_len > 0) {123123124124 remaining_len = min(PAGE_SIZE-VIA_PGOFF(cur_mem), line_len);125125 line_len -= remaining_len;126126127127 if (mode == 1) {128128- desc_ptr->mem_addr = 129129- dma_map_page(&pdev->dev, 130130- vsg->pages[VIA_PFN(cur_mem) - 128128+ desc_ptr->mem_addr =129129+ dma_map_page(&pdev->dev,130130+ vsg->pages[VIA_PFN(cur_mem) -131131 VIA_PFN(first_addr)],132132- VIA_PGOFF(cur_mem), remaining_len, 132132+ VIA_PGOFF(cur_mem), remaining_len,133133 vsg->direction);134134 desc_ptr->dev_addr = cur_fb;135135-135135+136136 desc_ptr->size = remaining_len;137137 desc_ptr->next = (uint32_t) next;138138- next = dma_map_single(&pdev->dev, desc_ptr, sizeof(*desc_ptr), 138138+ next = dma_map_single(&pdev->dev, desc_ptr, sizeof(*desc_ptr),139139 DMA_TO_DEVICE);140140 desc_ptr++;141141 if (++num_descriptors_this_page >= vsg->descriptors_per_page) {···143143 desc_ptr = vsg->desc_pages[++cur_descriptor_page];144144 }145145 }146146-146146+147147 num_desc++;148148 cur_mem += remaining_len;149149 cur_fb += remaining_len;150150 }151151-151151+152152 mem_addr += xfer->mem_stride;153153 fb_addr += xfer->fb_stride;154154 }···161161}162162163163/*164164- * Function that frees up all resources for a blit. It is usable even if the 164164+ * Function that frees up all resources for a blit. It is usable even if the165165 * blit info has only been partially built as long as the status enum is consistent166166 * with the actual status of the used resources.167167 */168168169169170170static void171171-via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_t *vsg) 171171+via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_t *vsg)172172{173173 struct page *page;174174 int i;···185185 case dr_via_pages_locked:186186 for (i=0; i<vsg->num_pages; ++i) {187187 if ( NULL != (page = vsg->pages[i])) {188188- if (! PageReserved(page) && (DMA_FROM_DEVICE == vsg->direction)) 188188+ if (! PageReserved(page) && (DMA_FROM_DEVICE == vsg->direction))189189 SetPageDirty(page);190190 page_cache_release(page);191191 }···200200 vsg->bounce_buffer = NULL;201201 }202202 vsg->free_on_sequence = 0;203203-} 203203+}204204205205/*206206 * Fire a blit engine.···213213214214 VIA_WRITE(VIA_PCI_DMA_MAR0 + engine*0x10, 0);215215 VIA_WRITE(VIA_PCI_DMA_DAR0 + engine*0x10, 0);216216- VIA_WRITE(VIA_PCI_DMA_CSR0 + engine*0x04, VIA_DMA_CSR_DD | VIA_DMA_CSR_TD | 216216+ VIA_WRITE(VIA_PCI_DMA_CSR0 + engine*0x04, VIA_DMA_CSR_DD | VIA_DMA_CSR_TD |217217 VIA_DMA_CSR_DE);218218 VIA_WRITE(VIA_PCI_DMA_MR0 + engine*0x04, VIA_DMA_MR_CM | VIA_DMA_MR_TDIE);219219 VIA_WRITE(VIA_PCI_DMA_BCR0 + engine*0x10, 0);···233233{234234 int ret;235235 unsigned long first_pfn = VIA_PFN(xfer->mem_addr);236236- vsg->num_pages = VIA_PFN(xfer->mem_addr + (xfer->num_lines * xfer->mem_stride -1)) - 236236+ vsg->num_pages = VIA_PFN(xfer->mem_addr + (xfer->num_lines * xfer->mem_stride -1)) -237237 first_pfn + 1;238238-238238+239239 if (NULL == (vsg->pages = vmalloc(sizeof(struct page *) * vsg->num_pages)))240240 return -ENOMEM;241241 memset(vsg->pages, 0, sizeof(struct page *) * vsg->num_pages);···248248249249 up_read(¤t->mm->mmap_sem);250250 if (ret != vsg->num_pages) {251251- if (ret < 0) 251251+ if (ret < 0)252252 return ret;253253 vsg->state = dr_via_pages_locked;254254 return -EINVAL;···264264 * quite large for some blits, and pages don't need to be contingous.265265 */266266267267-static int 267267+static int268268via_alloc_desc_pages(drm_via_sg_info_t *vsg)269269{270270 int i;271271-271271+272272 vsg->descriptors_per_page = PAGE_SIZE / sizeof( drm_via_descriptor_t);273273- vsg->num_desc_pages = (vsg->num_desc + vsg->descriptors_per_page - 1) / 273273+ vsg->num_desc_pages = (vsg->num_desc + vsg->descriptors_per_page - 1) /274274 vsg->descriptors_per_page;275275276276 if (NULL == (vsg->desc_pages = kcalloc(vsg->num_desc_pages, sizeof(void *), GFP_KERNEL)))277277 return -ENOMEM;278278-278278+279279 vsg->state = dr_via_desc_pages_alloc;280280 for (i=0; i<vsg->num_desc_pages; ++i) {281281- if (NULL == (vsg->desc_pages[i] = 281281+ if (NULL == (vsg->desc_pages[i] =282282 (drm_via_descriptor_t *) __get_free_page(GFP_KERNEL)))283283 return -ENOMEM;284284 }···286286 vsg->num_desc);287287 return 0;288288}289289-289289+290290static void291291via_abort_dmablit(struct drm_device *dev, int engine)292292{···300300{301301 drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;302302303303- VIA_WRITE(VIA_PCI_DMA_CSR0 + engine*0x04, VIA_DMA_CSR_TD | VIA_DMA_CSR_DD); 303303+ VIA_WRITE(VIA_PCI_DMA_CSR0 + engine*0x04, VIA_DMA_CSR_TD | VIA_DMA_CSR_DD);304304}305305306306···311311 * task. Basically the task of the interrupt handler is to submit a new blit to the engine, while312312 * the workqueue task takes care of processing associated with the old blit.313313 */314314-314314+315315void316316via_dmablit_handler(struct drm_device *dev, int engine, int from_irq)317317{···331331 spin_lock_irqsave(&blitq->blit_lock, irqsave);332332 }333333334334- done_transfer = blitq->is_active && 334334+ done_transfer = blitq->is_active &&335335 (( status = VIA_READ(VIA_PCI_DMA_CSR0 + engine*0x04)) & VIA_DMA_CSR_TD);336336- done_transfer = done_transfer || ( blitq->aborting && !(status & VIA_DMA_CSR_DE)); 336336+ done_transfer = done_transfer || ( blitq->aborting && !(status & VIA_DMA_CSR_DE));337337338338 cur = blitq->cur;339339 if (done_transfer) {340340341341 blitq->blits[cur]->aborted = blitq->aborting;342342 blitq->done_blit_handle++;343343- DRM_WAKEUP(blitq->blit_queue + cur); 343343+ DRM_WAKEUP(blitq->blit_queue + cur);344344345345 cur++;346346- if (cur >= VIA_NUM_BLIT_SLOTS) 346346+ if (cur >= VIA_NUM_BLIT_SLOTS)347347 cur = 0;348348 blitq->cur = cur;349349···355355356356 blitq->is_active = 0;357357 blitq->aborting = 0;358358- schedule_work(&blitq->wq); 358358+ schedule_work(&blitq->wq);359359360360 } else if (blitq->is_active && time_after_eq(jiffies, blitq->end)) {361361···367367 blitq->aborting = 1;368368 blitq->end = jiffies + DRM_HZ;369369 }370370-370370+371371 if (!blitq->is_active) {372372 if (blitq->num_outstanding) {373373 via_fire_dmablit(dev, blitq->blits[cur], engine);···383383 }384384 via_dmablit_engine_off(dev, engine);385385 }386386- } 386386+ }387387388388 if (from_irq) {389389 spin_unlock(&blitq->blit_lock);390390 } else {391391 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);392392 }393393-} 393393+}394394395395396396···426426427427 return active;428428}429429-429429+430430/*431431 * Sync. Wait for at least three seconds for the blit to be performed.432432 */433433434434static int435435-via_dmablit_sync(struct drm_device *dev, uint32_t handle, int engine) 435435+via_dmablit_sync(struct drm_device *dev, uint32_t handle, int engine)436436{437437438438 drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;···441441 int ret = 0;442442443443 if (via_dmablit_active(blitq, engine, handle, &queue)) {444444- DRM_WAIT_ON(ret, *queue, 3 * DRM_HZ, 444444+ DRM_WAIT_ON(ret, *queue, 3 * DRM_HZ,445445 !via_dmablit_active(blitq, engine, handle, NULL));446446 }447447 DRM_DEBUG("DMA blit sync handle 0x%x engine %d returned %d\n",448448 handle, engine, ret);449449-449449+450450 return ret;451451}452452···468468 struct drm_device *dev = blitq->dev;469469 int engine = (int)470470 (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues);471471-472472- DRM_DEBUG("Polling timer called for engine %d, jiffies %lu\n", engine, 471471+472472+ DRM_DEBUG("Polling timer called for engine %d, jiffies %lu\n", engine,473473 (unsigned long) jiffies);474474475475 via_dmablit_handler(dev, engine, 0);476476-476476+477477 if (!timer_pending(&blitq->poll_timer)) {478478 mod_timer(&blitq->poll_timer, jiffies + 1);479479···497497 */498498499499500500-static void 500500+static void501501via_dmablit_workqueue(struct work_struct *work)502502{503503 drm_via_blitq_t *blitq = container_of(work, drm_via_blitq_t, wq);···505505 unsigned long irqsave;506506 drm_via_sg_info_t *cur_sg;507507 int cur_released;508508-509509-510510- DRM_DEBUG("Workqueue task called for blit engine %ld\n",(unsigned long) 508508+509509+510510+ DRM_DEBUG("Workqueue task called for blit engine %ld\n",(unsigned long)511511 (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues));512512513513 spin_lock_irqsave(&blitq->blit_lock, irqsave);514514-514514+515515 while(blitq->serviced != blitq->cur) {516516517517 cur_released = blitq->serviced++;518518519519 DRM_DEBUG("Releasing blit slot %d\n", cur_released);520520521521- if (blitq->serviced >= VIA_NUM_BLIT_SLOTS) 521521+ if (blitq->serviced >= VIA_NUM_BLIT_SLOTS)522522 blitq->serviced = 0;523523-523523+524524 cur_sg = blitq->blits[cur_released];525525 blitq->num_free++;526526-526526+527527 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);528528-528528+529529 DRM_WAKEUP(&blitq->busy_queue);530530-530530+531531 via_free_sg_info(dev->pdev, cur_sg);532532 kfree(cur_sg);533533-533533+534534 spin_lock_irqsave(&blitq->blit_lock, irqsave);535535 }536536537537 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);538538}539539-539539+540540541541/*542542 * Init all blit engines. Currently we use two, but some hardware have 4.···550550 drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;551551 drm_via_blitq_t *blitq;552552553553- pci_set_master(dev->pdev); 554554-553553+ pci_set_master(dev->pdev);554554+555555 for (i=0; i< VIA_NUM_BLIT_ENGINES; ++i) {556556 blitq = dev_priv->blit_queues + i;557557 blitq->dev = dev;···572572 INIT_WORK(&blitq->wq, via_dmablit_workqueue);573573 setup_timer(&blitq->poll_timer, via_dmablit_timer,574574 (unsigned long)blitq);575575- } 575575+ }576576}577577578578/*579579 * Build all info and do all mappings required for a blit.580580 */581581-581581+582582583583static int584584via_build_sg_info(struct drm_device *dev, drm_via_sg_info_t *vsg, drm_via_dmablit_t *xfer)585585{586586 int draw = xfer->to_fb;587587 int ret = 0;588588-588588+589589 vsg->direction = (draw) ? DMA_TO_DEVICE : DMA_FROM_DEVICE;590590 vsg->bounce_buffer = NULL;591591···599599 /*600600 * Below check is a driver limitation, not a hardware one. We601601 * don't want to lock unused pages, and don't want to incoporate the602602- * extra logic of avoiding them. Make sure there are no. 602602+ * extra logic of avoiding them. Make sure there are no.603603 * (Not a big limitation anyway.)604604 */605605···625625 if (xfer->num_lines > 2048 || (xfer->num_lines*xfer->mem_stride > (2048*2048*4))) {626626 DRM_ERROR("Too large PCI DMA bitblt.\n");627627 return -EINVAL;628628- } 628628+ }629629630630- /* 630630+ /*631631 * we allow a negative fb stride to allow flipping of images in632632- * transfer. 632632+ * transfer.633633 */634634635635 if (xfer->mem_stride < xfer->line_length ||···653653#else654654 if ((((unsigned long)xfer->mem_addr & 15) ||655655 ((unsigned long)xfer->fb_addr & 3)) ||656656- ((xfer->num_lines > 1) && 656656+ ((xfer->num_lines > 1) &&657657 ((xfer->mem_stride & 15) || (xfer->fb_stride & 3)))) {658658 DRM_ERROR("Invalid DRM bitblt alignment.\n");659659 return -EINVAL;660660- } 660660+ }661661#endif662662663663 if (0 != (ret = via_lock_all_dma_pages(vsg, xfer))) {···673673 return ret;674674 }675675 via_map_blit_for_device(dev->pdev, xfer, vsg, 1);676676-676676+677677 return 0;678678}679679-679679+680680681681/*682682 * Reserve one free slot in the blit queue. Will wait for one second for one683683 * to become available. Otherwise -EBUSY is returned.684684 */685685686686-static int 686686+static int687687via_dmablit_grab_slot(drm_via_blitq_t *blitq, int engine)688688{689689 int ret=0;···698698 if (ret) {699699 return (-EINTR == ret) ? -EAGAIN : ret;700700 }701701-701701+702702 spin_lock_irqsave(&blitq->blit_lock, irqsave);703703 }704704-704704+705705 blitq->num_free--;706706 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);707707···712712 * Hand back a free slot if we changed our mind.713713 */714714715715-static void 715715+static void716716via_dmablit_release_slot(drm_via_blitq_t *blitq)717717{718718 unsigned long irqsave;···728728 */729729730730731731-static int 732732-via_dmablit(struct drm_device *dev, drm_via_dmablit_t *xfer) 731731+static int732732+via_dmablit(struct drm_device *dev, drm_via_dmablit_t *xfer)733733{734734 drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;735735 drm_via_sg_info_t *vsg;···760760 spin_lock_irqsave(&blitq->blit_lock, irqsave);761761762762 blitq->blits[blitq->head++] = vsg;763763- if (blitq->head >= VIA_NUM_BLIT_SLOTS) 763763+ if (blitq->head >= VIA_NUM_BLIT_SLOTS)764764 blitq->head = 0;765765 blitq->num_outstanding++;766766- xfer->sync.sync_handle = ++blitq->cur_blit_handle; 766766+ xfer->sync.sync_handle = ++blitq->cur_blit_handle;767767768768 spin_unlock_irqrestore(&blitq->blit_lock, irqsave);769769 xfer->sync.engine = engine;770770771771- via_dmablit_handler(dev, engine, 0);771771+ via_dmablit_handler(dev, engine, 0);772772773773 return 0;774774}···776776/*777777 * Sync on a previously submitted blit. Note that the X server use signals extensively, and778778 * that there is a very big probability that this IOCTL will be interrupted by a signal. In that779779- * case it returns with -EAGAIN for the signal to be delivered. 779779+ * case it returns with -EAGAIN for the signal to be delivered.780780 * The caller should then reissue the IOCTL. This is similar to what is being done for drmGetLock().781781 */782782···786786 drm_via_blitsync_t *sync = data;787787 int err;788788789789- if (sync->engine >= VIA_NUM_BLIT_ENGINES) 789789+ if (sync->engine >= VIA_NUM_BLIT_ENGINES)790790 return -EINVAL;791791792792 err = via_dmablit_sync(dev, sync->sync_handle, sync->engine);···796796797797 return err;798798}799799-799799+800800801801/*802802 * Queue a blit and hand back a handle to be used for sync. This IOCTL may be interrupted by a signal803803- * while waiting for a free slot in the blit queue. In that case it returns with -EAGAIN and should 803803+ * while waiting for a free slot in the blit queue. In that case it returns with -EAGAIN and should804804 * be reissued. See the above IOCTL code.805805 */806806807807-int 807807+int808808via_dma_blit( struct drm_device *dev, void *data, struct drm_file *file_priv )809809{810810 drm_via_dmablit_t *xfer = data;
+35-35
drivers/char/drm/via_dmablit.h
···11/* via_dmablit.h -- PCI DMA BitBlt support for the VIA Unichrome/Pro22- * 22+ *33 * Copyright 2005 Thomas Hellstrom.44 * All Rights Reserved.55 *···1717 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1818 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1919 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL2020- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 2121- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2222- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 2020+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,2121+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR2222+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE2323 * USE OR OTHER DEALINGS IN THE SOFTWARE.2424 *2525- * Authors: 2525+ * Authors:2626 * Thomas Hellstrom.2727 * Register info from Digeo Inc.2828 */···6767 unsigned cur;6868 unsigned num_free;6969 unsigned num_outstanding;7070- unsigned long end; 7070+ unsigned long end;7171 int aborting;7272 int is_active;7373 drm_via_sg_info_t *blits[VIA_NUM_BLIT_SLOTS];···7777 struct work_struct wq;7878 struct timer_list poll_timer;7979} drm_via_blitq_t;8080-81808282-/* 8181+8282+/*8383 * PCI DMA Registers8484 * Channels 2 & 3 don't seem to be implemented in hardware.8585 */8686-8787-#define VIA_PCI_DMA_MAR0 0xE40 /* Memory Address Register of Channel 0 */ 8888-#define VIA_PCI_DMA_DAR0 0xE44 /* Device Address Register of Channel 0 */ 8989-#define VIA_PCI_DMA_BCR0 0xE48 /* Byte Count Register of Channel 0 */ 9090-#define VIA_PCI_DMA_DPR0 0xE4C /* Descriptor Pointer Register of Channel 0 */ 91869292-#define VIA_PCI_DMA_MAR1 0xE50 /* Memory Address Register of Channel 1 */ 9393-#define VIA_PCI_DMA_DAR1 0xE54 /* Device Address Register of Channel 1 */ 9494-#define VIA_PCI_DMA_BCR1 0xE58 /* Byte Count Register of Channel 1 */ 9595-#define VIA_PCI_DMA_DPR1 0xE5C /* Descriptor Pointer Register of Channel 1 */ 8787+#define VIA_PCI_DMA_MAR0 0xE40 /* Memory Address Register of Channel 0 */8888+#define VIA_PCI_DMA_DAR0 0xE44 /* Device Address Register of Channel 0 */8989+#define VIA_PCI_DMA_BCR0 0xE48 /* Byte Count Register of Channel 0 */9090+#define VIA_PCI_DMA_DPR0 0xE4C /* Descriptor Pointer Register of Channel 0 */96919797-#define VIA_PCI_DMA_MAR2 0xE60 /* Memory Address Register of Channel 2 */ 9898-#define VIA_PCI_DMA_DAR2 0xE64 /* Device Address Register of Channel 2 */ 9999-#define VIA_PCI_DMA_BCR2 0xE68 /* Byte Count Register of Channel 2 */ 100100-#define VIA_PCI_DMA_DPR2 0xE6C /* Descriptor Pointer Register of Channel 2 */ 9292+#define VIA_PCI_DMA_MAR1 0xE50 /* Memory Address Register of Channel 1 */9393+#define VIA_PCI_DMA_DAR1 0xE54 /* Device Address Register of Channel 1 */9494+#define VIA_PCI_DMA_BCR1 0xE58 /* Byte Count Register of Channel 1 */9595+#define VIA_PCI_DMA_DPR1 0xE5C /* Descriptor Pointer Register of Channel 1 */10196102102-#define VIA_PCI_DMA_MAR3 0xE70 /* Memory Address Register of Channel 3 */ 103103-#define VIA_PCI_DMA_DAR3 0xE74 /* Device Address Register of Channel 3 */ 104104-#define VIA_PCI_DMA_BCR3 0xE78 /* Byte Count Register of Channel 3 */ 105105-#define VIA_PCI_DMA_DPR3 0xE7C /* Descriptor Pointer Register of Channel 3 */ 9797+#define VIA_PCI_DMA_MAR2 0xE60 /* Memory Address Register of Channel 2 */9898+#define VIA_PCI_DMA_DAR2 0xE64 /* Device Address Register of Channel 2 */9999+#define VIA_PCI_DMA_BCR2 0xE68 /* Byte Count Register of Channel 2 */100100+#define VIA_PCI_DMA_DPR2 0xE6C /* Descriptor Pointer Register of Channel 2 */106101107107-#define VIA_PCI_DMA_MR0 0xE80 /* Mode Register of Channel 0 */ 108108-#define VIA_PCI_DMA_MR1 0xE84 /* Mode Register of Channel 1 */ 109109-#define VIA_PCI_DMA_MR2 0xE88 /* Mode Register of Channel 2 */ 110110-#define VIA_PCI_DMA_MR3 0xE8C /* Mode Register of Channel 3 */ 102102+#define VIA_PCI_DMA_MAR3 0xE70 /* Memory Address Register of Channel 3 */103103+#define VIA_PCI_DMA_DAR3 0xE74 /* Device Address Register of Channel 3 */104104+#define VIA_PCI_DMA_BCR3 0xE78 /* Byte Count Register of Channel 3 */105105+#define VIA_PCI_DMA_DPR3 0xE7C /* Descriptor Pointer Register of Channel 3 */111106112112-#define VIA_PCI_DMA_CSR0 0xE90 /* Command/Status Register of Channel 0 */ 113113-#define VIA_PCI_DMA_CSR1 0xE94 /* Command/Status Register of Channel 1 */ 114114-#define VIA_PCI_DMA_CSR2 0xE98 /* Command/Status Register of Channel 2 */ 115115-#define VIA_PCI_DMA_CSR3 0xE9C /* Command/Status Register of Channel 3 */ 107107+#define VIA_PCI_DMA_MR0 0xE80 /* Mode Register of Channel 0 */108108+#define VIA_PCI_DMA_MR1 0xE84 /* Mode Register of Channel 1 */109109+#define VIA_PCI_DMA_MR2 0xE88 /* Mode Register of Channel 2 */110110+#define VIA_PCI_DMA_MR3 0xE8C /* Mode Register of Channel 3 */116111117117-#define VIA_PCI_DMA_PTR 0xEA0 /* Priority Type Register */ 112112+#define VIA_PCI_DMA_CSR0 0xE90 /* Command/Status Register of Channel 0 */113113+#define VIA_PCI_DMA_CSR1 0xE94 /* Command/Status Register of Channel 1 */114114+#define VIA_PCI_DMA_CSR2 0xE98 /* Command/Status Register of Channel 2 */115115+#define VIA_PCI_DMA_CSR3 0xE9C /* Command/Status Register of Channel 3 */118116119119-/* Define for DMA engine */ 117117+#define VIA_PCI_DMA_PTR 0xEA0 /* Priority Type Register */118118+119119+/* Define for DMA engine */120120/* DPR */121121#define VIA_DMA_DPR_EC (1<<1) /* end of chain */122122#define VIA_DMA_DPR_DDIE (1<<2) /* descriptor done interrupt enable */