summaryrefslogtreecommitdiff
path: root/shared-core
AgeCommit message (Collapse)Author
2005-06-14Adds support for PCI cards to MGA DRMIan Romanick
This patch adds serveral new ioctls and a new query to get_param query to support PCI MGA cards. Two ioctls were added to implement interrupt based waiting. With this change, the client-side driver no longer needs to map the primary DMA region or the MMIO region. Previously, end-of-frame waiting was done by busy waiting in the client-side driver until one of the MMIO registers (the current DMA pointer) matched a pointer to the end of primary DMA space. By using interrupts, the busy waiting and the extra mappings are removed. A third ioctl was added to bootstrap DMA. This ioctl, which is used by the X-server, moves a *LOT* of code from the X-server into the kernel. This allows the kernel to do whatever needs to be done to setup DMA buffers. The entire process and the locations of the buffers are hidden from user-mode. Additionally, a get_param query was added to differentiate between G4x0 cards and G550 cards. A gap was left in the numbering sequence so that, if needed, G450 cards could be distinguished from G400 cards. According to Ville Syrjälä, the G4x0 cards and the G550 cards handle anisotropic filtering differently. This seems the most compatible way to let the client-side driver know which card it's own. Doing this very small change now eliminates the need to bump the DRM minor version twice. http://marc.theaimsgroup.com/?l=dri-devel&m=106625815319773&w=2 A number of ioctl handlers in linux-core were also modified so that they could be called in-kernel. In these cases, the in-kernel callable version kept the existing name (e.g., drm_agp_acquire) and the ioctl handler added _ioctl to the name (e.g., drm_agp_acquire_ioctl). This patch also replaces the drm_agp_do_release function with drm_agp_release. drm_agp_release (drm_core_agp_release in the previous patch) is very similar to drm_agp_do_release, and I saw no reason to have both. This commit *breaks the build* on BSD. Eric said that he would make the required updates to the BSD side soon. Xorg bug: 3259 Reviewed by: Eric Anholt
2005-06-11fix up drm.h for C++ include as this can be included in user programsDave Airlie
2005-06-10add dragonfly #define from Xorg CVSDave Airlie
2005-06-09Completely re-initialize DMA settingsIan Romanick
There were two problems. First, the 'warp' and 'primary' pointers weren't cleared, so mga_do_cleanup_dma, which gets called multiple times, would try to ioremapfree them multiple times. This resulted in the new error messages to syslog. The second problem was the, since the dev_private structure isn't reallocated and cleaned out in mga_do_init_dma, when the server is reloaded idle-waits would wait for impossible values. I have given this patch some more riggorous testing. This includes: - Load module, start server, run GL app, stop server, unload module. - Load module, start server, run GL app, stop server, unload module, reload module, restart server, run GL app. - Load module, start server, run GL app, stop server, restart server, run GL app, stop server, unload module. In all three cases, everything worked as expected. Please let me know if there are any further regressions with this patch. Xorg bug: 3408 Reported by: Chris Rankin
2005-06-06fix some issues with radeon interrupt handlingDave Airlie
From: Dave Airlie + Benjamin Herrenschmidt
2005-06-06Fix copyrightsAlan Hourihane
2005-06-04Remove warnings about code mixed with declerations..Dave Airlie
2005-06-03Minor clean-ups. The drm_mga_fullscreen_t stuff has been dead for a looongIan Romanick
time. Remove it and an out-dated comment.
2005-06-03Move the deallocation of dev_private. Since dev_private is allocated whenIan Romanick
the driver is loaded and is always expected to be around, it should only be deallocated when the driver is unloaded. Xorg bug: #3408 Reported by: Chris Rankin
2005-05-28Re-implement the power management.Alan Hourihane
There's two choices when fb is or isn't loaded as we treat ourselves as a PCI driver in the latter case. If we are a PCI driver, then register the suspend/resume functions directly. If not, then we register as a sysdev and pick up the suspend/resume actions and pump them down into a generic *power function. It'll be nice when this little mess is sorted out with regard to being a real PCI driver ;-/
2005-05-27Modify drm_driver::device_is_agp to return a tri-state value to indicateIan Romanick
that a device absolutely is, absolutely is not, or may or may not be AGP. Modify the i915 DRM to use this to force all i9x5 devices to be "AGP" (even the PCI-e devices). Reported by: Lukas Hejtmanek
2005-05-27add radeon registers from VHA code these are the "unknown" registersDave Airlie
2005-05-23VIA:Thomas Hellstrom
64-bit fixes. Bumped driver date and patchlevel.
2005-05-22Refactor the routines for "calculating" the size of the WARP microcode. TheIan Romanick
two routines (one for G200 and one for G400) were replaced with static const variables and a single function that returns the correct size. The code to generate an error if the allocated WARP region is too small was refactored from mga_warp_install_{g200,g400}_microcode to mga_wrap_install_microcode. mga_warp_microcode_size is global to the MGA DRM because it will soon be used by code in another file.
2005-05-21Forgot to bump the patchlevel and driver date on last commit.Ian Romanick
2005-05-21Change the MGA initialization and cleanup a bit. The dev_private structureIan Romanick
is now allocated (and partially filled in) by the new mga_driver_preinit function. This allows the driver to detect the type of card (i.e., G200 class vs. G400 class) on its own. The chipset value passed to mga_dma_init is now ignored. This same technique is used by the radeon DRM. As a result of this, mga_driver_pretakedown was converted to mga_driver_postcleanup. This routine gets called in some other places than might be expected, and it sets the dev_private pointer to NULL. That little gem took over an hour to track down. :(
2005-05-18Add i945G pci ids to drmDave Airlie
From: Christopher Allen Wing <wingc@engin.umich.edu> Signed-off-by: Dave Airlie <airlied@linux.ie>
2005-05-16Added device_is_agp callback to drm_driver. This function is called by theIan Romanick
platform-specific drm_device_is_agp function. Added implementation of this function the the Linux-specific portion of the MGA driver to detect PCI G450 cards. Added code to the Linux-specific portion of the generic DRM layer to not initialize AGP infrastructure if the card is not AGP (this matches what already existed in BSD). Bumped the driver date and the driver patch-level for MGA. This mostly fixes bugzilla #3248. The BSD side still needs an implementation of mga_driver_device_is_agp.
2005-05-15wrap config.h include with defined for KERNELDave Airlie
2005-05-08VIA: Fix for oops when AGP ring-buffer initialization is called and thereThomas Hellstrom
is no AGP memory acquired.
2005-04-26Clean up some const qualifier cast warnings.Eric Anholt
2005-04-26Convert BSD code to mostly use bus_dma, the dma abstraction for dealingEric Anholt
with IOMMUs and such. There is one usage of the forbidden vtophys() left in drm_scatter.c which will be fixed up soon. This required a KPI change for drm_pci_alloc/free() to return/use a drm_dma_handle_t that keeps track of os-specific bits, rather than just passing around the vaddr/busaddr/size. Submitted by: Tonnerre Lombard (partially) Tested on: FreeBSD: Rage128 AGP/PCI Linux: Savage4 AGP/PCI
2005-04-26Use msleep instead of tsleep to drop the DRM device lock and avoid aEric Anholt
sleep-with- mutex held. This probably ought to be an os-independent sleep function ala DRM_USLEEP.
2005-04-20VIA: Interrupt handler bugfixes. Bumped patchlevel to 2.6.2.Thomas Hellstrom
2005-04-18VIA:Thomas Hellstrom
1) Security fix: Stopped possible MMIO access to PCI DMA area for the unichrome Pro. 2) Fixed an odd cpu usage problem by padding small AGP DMA submissions. Bumped patchlevel.
2005-03-29Missing file via_video.c commited.Thomas Hellstrom
2005-03-29Add skeletal imagine driver (but don't build it yet).Adam Jackson
2005-03-28Via updates:Thomas Hellstrom
New PCI command parser. Moved from via_dma.c to via_verifier.c so functions with similar functionality are close to eachother. Moved video related functions to via_video.c, which might be extended in the future, as new video functionality is added. New device-specific generic IRQ IOCTL, similar to the general VBLANK IOCTL, but with support for multiple device IRQ sources and functionality. Support for Unichrome Pro PM800/CN400 video DMA commands in verifier and PCI parser. Support for Unichrome Pro PM800/CN400 HQV IRQs in the new generic IRQ IOCTL. Bumped minor. New version 2.6.0.
2005-03-25Don't know who set the i915GM PCI ID incorrectly but it should be 0x2592Alan Hourihane
2005-03-25From Xorg CVS realign the i915_drv.hDave Airlie
From: Tungsten Graphics Signed-off-by: Dave Airlie <airlied@linux.ie>
2005-03-18Add support for production version of ATI RN50/ES1000. (ATI TechnologiesMichel Daenzer
Inc.)
2005-03-15add R200_EMIT_PP_TRI_PERF_CNTL packet to support brilinear filtering onRoland Scheidegger
r200
2005-03-14via changes:Thomas Hellstrom
1. Initialize futex locks to zero on device init. 2. Remove some stray defines from via_drm.h 3. Prepare via_drm.h for drm client inclusion. The goal is to share a common file with common definitions. 4. Sync shared / shared-core via_drm.h 5. Bump minor, because of the futex lock initialization.
2005-03-13Command DMA optimizations:Felix Kuehling
- don't waste DMA memory when small command buffers are flushed - minimized padding with noops - slightly simplified faked DMA flushing
2005-03-07Tracked down random lockups related to command DMA that occurred in Quake3Felix Kuehling
after ~5min: buffer aging was subtly broken. Part of this may have also affected vertex DMA buffer aging and client-side texture heap aging, though with less fatal consequences. Bumped minor version and driver date.
2005-03-07minor pointer cast typoDave Airlie
2005-03-06Added support for command DMA on Savage4-based hardware. UnfortunatelyFelix Kuehling
command and vertex DMA don't work at the same time. Command DMA performance is superior and works with all vertex formats. Bumped minor version and driver date.
2005-03-04add some idct type 3 packets for referenceDave Airlie
2005-02-23Use wrap counter to extend 16-bit hardware event tags to 32-bit logicalFelix Kuehling
event counters in the SAVAGE_EVENT_EMIT/WAIT ioctls. This is needed for reliable client-side texture heap aging. Slightly simplified DMA buffer aging while at it. Bumped minor version and driver date.
2005-02-20Fix VIA K8M800 PCI ID.Thomas Hellstrom
2005-02-19Fix a couple of gcc warnings in DRM_INFOs.Eric Anholt
2005-02-18fd.o bug #2576: Add support for ATI RN50/ES1000. (ATI Technologies Inc.)Michel Daenzer
2005-02-14Initialize kbuf to NULL to quiet the compiler about uninit variablesEric Anholt
(wasn't an issue). Don't forget to free kbuf if the copyin fails.
2005-02-13Fixed Futex release bug. Bumped driver date and patchlevel.Thomas Hellstrom
2005-02-10add support for texture micro tiling on radeon/r200. Add support for r100Roland Scheidegger
cube maps (since it also requires a version bump) at the same time.
2005-02-08Close a race which could allow for privilege escalation by users with DRIEric Anholt
privileges on Radeon hardware. Essentially, a malicious program could submit a packet containing an offset (possibly in main memory) to be rendered from/to, while a separate thread switched that offset in userspace rapidly between a valid value and an invalid one. radeon_check_and_fixup_offset() would pull the offset in from user space, check it, and spit it back out to user space to be copied in later by the emit code. It would sometimes catch the bad value, but sometimes the malicious program could modify it after the check and get an invalid offset rendered from/to. Fix this by allocating a temporary buffer and copying the data in at once. While here, make the cliprects stuff not do the VERIFYAREA_READ and COPY_FROM_USER_UNCHECKED gymnastics, avoiding a lock order reversal on FreeBSD. Performance impact is negligible -- no difference on r200 to ~1% improvement on rv200 in quake3 tests (P4 1Ghz, demofour at 1024x768, n=4 or 5).
2005-02-07fix agp detection on linuxDave Airlie
2005-02-05- Implement drm_initmap, and extend it with the resource number to helpEric Anholt
FreeBSD. Add drm_get_resource_{start|len} so linux-specific stuff doesn't need to be in shared code. - Fix mach64 build by using __DECONST to work around passing a const pointer to useracc, which is unfortunately not marked const. - Get rid of a lot of maplist code by not having dev->maplist be a pointer, and by sticking the link entries directly in drm_local_map_t rather than having a separate structure for the linked list. - Factor out map uninit and removal into its own routine, rather than duplicating in both drm_takedown() and drm_rmmap(). - Hook up more driver functions, and correct FreeBSD-specific bits of radeon_cp.c, making radeon work. - Baby steps towards using bus_space as we should.
2005-02-03Via driver: Add missing drm_poll function to via driver in core.Thomas Hellstrom
2005-02-03Declare r128_do_cleanup_pageflip static since it's only used here and itsEric Anholt
prototype went away.