Commit Graph

587 Commits (dcfcf1a84d400f9c1ade36a233f0a18131115921)

Author SHA1 Message Date
Thomas Hellstrom 9d24d951f7 via: fix stray error printout message. 2005-09-25 14:38:07 +00:00
Thomas Hellstrom 903e5701ff Add the via PCI DMA blit code. 2005-09-25 12:54:12 +00:00
Dave Airlie c1b7df95be add __ATTR 2005-09-25 05:19:06 +00:00
Dave Airlie 3a0230ef9c use linux kernel macros don't make our own 2005-09-25 03:09:51 +00:00
Dave Airlie cd16d96856 remove pci_find_class use for alpha 2005-09-18 09:31:06 +00:00
Dave Airlie f5c81b2620 compat for pci_pretty_name 2005-09-17 04:16:51 +00:00
Dave Airlie 3f6fcbc676 back out change as gart is now in framebuffer for PCIE 2005-09-11 09:58:19 +00:00
Dave Airlie 5565a00916 Add GART in FB support for ati pcigart, and PCIE support for r300 2005-09-11 08:51:23 +00:00
Dave Airlie 29326c1a89 fix makefile bug 2005-09-11 07:08:46 +00:00
Dave Airlie 0d346a07a8 convert ioctl flags to use flags instead of separate ints 2005-09-03 03:27:14 +00:00
Dave Airlie 80ed93c7bf check is the map containing the lock 2005-09-03 02:21:22 +00:00
Alan Hourihane 01e4364a8f remove i915_pm code as it causes too many issues with current software
suspend, and the DDX driver re-inits the board successfully anyway.
2005-08-22 09:50:12 +00:00
Dave Airlie 54947504ac allocating the PCIE table from GFP_DMA seems to stop it NMI'ing 2005-08-21 11:07:03 +00:00
Dave Airlie 5c4ce6d93c add x86_64 to the list as well 2005-08-20 07:38:11 +00:00
Dave Airlie d12768f79a remove checks that make ppc64 not work properly... also fix ppc64 check..
we should be safe doing this..
2005-08-20 07:33:07 +00:00
Dave Airlie 2e9bd9ac18 add powerpc64 to the list of archs that this test doesn't make sense on 2005-08-20 07:12:45 +00:00
Dave Airlie 7779659390 revert reversion of a part of a patch from Jon, that I did last night while
checking things in in my sleep
2005-08-17 10:48:38 +00:00
Dave Airlie 7af0186f4c add Egberts 32/64 bit patch (its in kernel already...) 2005-08-16 12:51:57 +00:00
Eric Anholt 8c21b783c3 Port the VIA DRM to FreeBSD. Original patch by Jake, with some cleanup by
me to match other drivers and avoid ifdeffing. The linux via_drv.c will
    be moved from shared-core to linux-core soon by repocopy.
Submitted by: Jake Burkholder <jake@FreeBSD.org> Tested by: unichrome
2005-08-15 18:07:12 +00:00
Thomas Hellstrom cdf49e5732 Reverting the previous via security-fix commit, since the assumption of
contexts registered with the callers filp was wrong.
2005-08-12 14:19:33 +00:00
Thomas Hellstrom 4931d785ed Missing symbol export from previous via context check commit. 2005-08-11 13:05:12 +00:00
Thomas Hellstrom d5e8ab13ff Security fix on via: Checking that the specified context belongs to the
caller on fb / agp memory alloc and free. Otherwise malicious clients
    can register allocations on other clients or free memory used by other
    clients which will lead to severe memory manager inconsistensies.
2005-08-10 19:46:46 +00:00
Dave Airlie 3a61e9f96c make some functions static in the savage drm driver 2005-08-07 05:37:25 +00:00
Dave Airlie fcdb53867d remove bus address 2005-08-07 04:38:11 +00:00
Dave Airlie 99c3f88c69 Fix bug in return to userspace resctx code
From: Egbert Eich <eich@suse.de>
2005-08-05 13:04:21 +00:00
Eric Anholt c789ea1521 Rename the driver hooks in the DRM to something a little more
understandable: preinit -> load postinit -> (removed) presetup ->
    firstopen postsetup -> (removed) open_helper -> open prerelease ->
    preclose free_filp_priv -> postclose pretakedown -> lastclose
    postcleanup -> unload release -> reclaim_buffers_locked version ->
    (removed)
postinit and version were replaced with generic code in the Linux DRM
    (drivers now set their version numbers and description in the driver
    structure, like on BSD). postsetup wasn't used at all. Fixes the savage
    hooks for initializing and tearing down mappings at the right times.
    Testing involved at least starting X, running glxgears, killing
    glxgears, exiting X, and repeating.
Tested on: FreeBSD (g200, g400, r200, r128) Linux (r200, savage4)
2005-08-05 03:50:23 +00:00
Jon Smirl 143622a987 Implement permanent sarea maps 2005-08-04 14:48:43 +00:00
Jon Smirl 28e123eb3a Tighten up AGP security. Verify that all uses of AGP are done inside
buffers that have been allocated from AGP. This includes some new
    capable(CAP_SYS_ADMIN) checks, these functions are also protected by
    the root requirement on the IOCTL macros.
2005-08-04 14:39:25 +00:00
Jon Smirl ea2c7a895d Split the control of master vs root priv. Everything is still marked as
needing root.
2005-08-04 13:15:27 +00:00
Eric Anholt ab59dd285c Add latest r300 support from r300.sf.net CVS. Patch submitted by volodya,
with BSD fix from jkim and the r300_reg.h license from Nicolai Haehnle.
    Big thanks to everyone involved!
2005-07-20 21:17:47 +00:00
Eric Anholt 026e12ea93 Add .cvsignore file. 2005-07-19 20:59:57 +00:00
Jon Smirl 7130662aa0 IRQ must be assigned and enabled or this will hang 2005-07-11 18:27:39 +00:00
Jon Smirl 04fea06002 Simplify the sysfs code 2005-07-03 18:07:03 +00:00
Jon Smirl d41af11ee3 Add sysfs attribute dri_library_name on Linux. code in share-core/via_drv.c
is ok to be shared, it will be passive on BSD.
2005-07-03 17:16:12 +00:00
Jon Smirl e2ba08d283 release can happen before dev->ctxlist is allocated 2005-06-30 16:00:35 +00:00
Ian Romanick 1b4ce02506 Remove the AGP requirement from Makefile and Kconfig for MGA. Remove the
AGP requirement from Kconfig for SIS. There never was a requirement in
    Makefile, and Eric Anholt confirms that the Makefile was correct.
2005-06-29 23:20:30 +00:00
Alan Hourihane eeaeefca54 add remaining calls 2005-06-29 13:19:47 +00:00
Alan Hourihane fc83d76e5a add i915_ioc32.c 2005-06-29 13:13:22 +00:00
Alan Hourihane 6496c5d1e7 silence warning 2005-06-29 13:00:29 +00:00
Dave Airlie 6975571c3b fix some warnings from cross compiler 2005-06-29 12:02:18 +00:00
Dave Airlie 62b55eb433 make r128/mga compile properly on sparc cross-compiler 2005-06-29 11:56:42 +00:00
Alan Hourihane 2b427bee9b Move to linux specific directory 2005-06-29 11:36:37 +00:00
Dave Airlie 964c57e71f add mga and r128 32/64 bits
This is Egberts code, ported to Pauls framework by me..
2005-06-29 11:22:39 +00:00
Dave Airlie ae7d8d8a85 these don't need reclaim buffers their release functions handle it 2005-06-29 03:06:47 +00:00
Dave Airlie 2ce5ddec83 Bug in conversion from old DRM to core DRM.... 2005-06-29 02:57:18 +00:00
Eric Anholt 5d96c74ff1 - Remove drm_initmap and replace its usage with drm_addmap. This reduces
code duplication, and it also hands you the map pointer so you don't
    need to re-find it.
- Remove the permanent maps flag. Instead, for register and framebuffer
    maps, we always check whether there's already a map of that type and
    offset around. Move the Radeon map initialization into presetup (first
    open) so it happens again after every takedown.
- Remove the split cleanup of maps between driver takedown (last close) and
    cleanup (module unload). Instead, always tear down maps on takedown,
    and drivers can recreate them on first open.
- Make MGA always use addmap, instead of allocating consistent memory in
    the PCI case and then faking up a map for it, which accomplished nearly
    the same thing, in a different order. Note that the maps are exposed to
    the user again: we may want to expose a flag to avoid this, but it's
    not a security concern, and saves us a lot of code.
- Remove rmmaps in the MGA driver. Since the function is only called during
    takedown anyway, we can let them die a natural death.
- Make removal of maps happen in one function, which is called by both
    drm_takedown and drm_rmmap_ioctl.
Reviewed by: idr (previous revision) Tested on: mga (old/new/pci dma),
    radeon, savage
2005-06-28 20:58:34 +00:00
Dave Airlie 6397722f19 add compat code from Paul Mackerras 2005-06-28 13:02:20 +00:00
Dave Airlie 827806f697 Add compat to Makefile 2005-06-28 12:52:41 +00:00
Dave Airlie 170bf94a36 Add drm and radeon 32/64-bit compat code from Paul Mackerras 2005-06-28 12:50:15 +00:00
Alan Hourihane b6b270a260 Given that BenH says using the sysdev approach for DRM is bogus, I'll yank
the code for it, rather than introducing something that isn't going to
    work 100% of the time.
2005-06-28 08:03:33 +00:00
Alan Hourihane 75ba453365 Comment out the .resume function as without programming their dependent
registers things tend to lock up in certain situations.
The BIOS repost will fix things up.
2005-06-28 07:34:49 +00:00
Alan Hourihane e2d76b0642 Reverse the pm_message_t patch for now, it appears that the 2.6.12 release
didn't have it.
2005-06-27 15:17:12 +00:00
Alan Hourihane 1a6780348c Check for 2.6.12 suspend/resume changes (pm_message_t) 2005-06-27 12:39:02 +00:00
Jon Smirl afdabdabf5 removed dev->sysdev_registered 2005-06-26 13:31:15 +00:00
Jon Smirl 9deb276a06 Ref count the sysdev class to support multiple DRM cards 2005-06-24 22:48:16 +00:00
Jon Smirl 2b845f25c5 Make sysdev class only register when fbdev detected 2005-06-24 21:50:40 +00:00
Jon Smirl 5b0e93de32 More err path clean up for drm_pm Add mandatory sysdev shutdown function 2005-06-24 19:31:06 +00:00
Alan Hourihane fe42d43a63 Fix the sysdev approach for power management.
We need to use the container_of() call to access our device private.
2005-06-24 09:28:50 +00:00
Jon Smirl 7586a655fc Fix drm_memory_debug.c to compile, doesn't seem to be working Clean up
error return path in drm_stub.c
2005-06-23 05:29:16 +00:00
Jon Smirl 4152605ea1 Get the power management hooks into the right place so that everything gets
freed correctly.
2005-06-22 05:49:56 +00:00
Jon Smirl ae2264d3c9 Remove I2C support from radeon driver. Same support is available from
radeonfb.
2005-06-19 04:15:58 +00:00
Dave Airlie 71df0eed34 fix up drm_alloc_agp to take a dev arg and not pass crappy agpgart around 2005-06-17 09:09:17 +00:00
Jon Smirl 0569fe7a52 Fix 810/830 build 2005-06-17 04:47:30 +00:00
Alan Hourihane 53e950b344 Force AGP always for Intel chipsets.
Fixes bug #3552
2005-06-16 19:58:00 +00:00
Ian Romanick 72cfc797b5 Adds support for PCI cards to MGA DRM
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-14 22:34:11 +00:00
Ian Romanick dfc650bd80 Completely re-initialize DMA settings
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-09 21:18:56 +00:00
Jon Smirl 1252890ff1 drm_mem_init should be done at core load, not driver init 2005-06-09 13:22:12 +00:00
Alan Hourihane 246c617c87 Fix copyrights 2005-06-06 09:18:44 +00:00
Dave Airlie 805a07714f misc cleanup patch from Adrian Bunk 2005-06-04 06:18:11 +00:00
Eric Anholt 9cad6fb4e0 Bugzilla #3217: Create a new __drm_pci_free which is used internally in
linux-core to free pci memory without freeing the structure. Linux-core
    internals often create pci dma handle structures on the stack due to
    the lack of a drm_local_map_t to store them in properly. Fix the
    original drm_pci_free to actually free the dma handle structure instead
    of leaking it.
Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
2005-05-28 20:36:22 +00:00
Eric Anholt d7756397d6 Bugzilla #3217: The size field in the new dma handle structure was
uninitialized, and its use in drm_pci_free later resulted in panics.
Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
2005-05-28 20:25:04 +00:00
Alan Hourihane 54fbf85125 Actually check for drm_fb_loaded before trying to initialize the sysdev
approach.
2005-05-28 00:08:53 +00:00
Alan Hourihane 45f1db8db9 Re-implement the power management.
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-28 00:00:08 +00:00
Ian Romanick 4a84416c45 Modify drm_driver::device_is_agp to return a tri-state value to indicate
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-27 23:42:11 +00:00
Ian Romanick a686be5bc8 Change the MGA initialization and cleanup a bit. The dev_private structure
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-21 02:27:51 +00:00
Ian Romanick fced784140 Refactor common, boilerplate ioctl code from drm_addbufs_* functions into
drm_addbufs. This makes the code more like the BSD code, and makes the
    drm_addbufs_* functions callable in-kernel.
Reviewed by: Dave Airlie
2005-05-20 00:17:40 +00:00
Felix Kuehling 6d4b9a830b Savage doesn't require AGP any more. Enable build even without CONFIG_AGP. 2005-05-17 02:08:02 +00:00
Ian Romanick e051cd19c0 Added device_is_agp callback to drm_driver. This function is called by the
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-16 17:37:10 +00:00
Eric Anholt ec111d70fe Convert BSD code to mostly use bus_dma, the dma abstraction for dealing
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-26 05:19:11 +00:00
Thomas Hellstrom 699d4ad53a A fix for a locking bug which is triggered when a client tries to lock with
flag DMA_QUIESCENT (typically the X server), but gets interrupted by a
    signal. The locking IOCTL should then return an error, but if
    DMA_QUIESCENT succeeds it returns 0, and the client falsely thinks it
    has the lock. In addition The client waits for DMA_QUISCENT and
    possibly DMA_READY without having the lock.
2005-04-20 18:50:49 +00:00
Dave Airlie b0c461c8e3 Revert last commit, it affect via things 2005-04-19 00:31:16 +00:00
Adam Jackson 0a5e02c7b5 Add skeletal imagine driver (but don't build it yet). 2005-03-29 01:47:38 +00:00
Thomas Hellstrom 532ccb98b5 Via updates:
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-28 21:21:42 +00:00
Dave Airlie c6161eff86 Description: Rather than use custom code in DRM_WAIT_ON() to do exactly
what wait_event_interruptible_timeout() does, use the function and just
    change the return values appropriately.
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
2005-03-27 07:05:28 +00:00
Dave Airlie 385f927692 Some ia64 platforms may not support write combining on all type of memory,
so we need to consult the EFI memory map before we try to set the write
    combine attribute of a page. This patch will try to map a page write
    combined if it's not an AGP page and the EFI memory map says it's ok,
    otherwise it falls back to a regular, uncached mapping. Can someone
    please apply this to the drm tree?
From: Jesse Barnes
2005-03-27 06:58:12 +00:00
Dave Airlie 956a701544 fix up AGP multi-head support for kernel 2.6.12 2005-03-25 09:48:34 +00:00
Dave Airlie 2ad8387428 verify_area is deprecated, replaced by access_ok. Seems I missed this one
when I did the big overall conversion.
Signed-off-by: Jesper Juhl <juhl-lkml@dif.dk>
2005-03-25 09:47:36 +00:00
Dave Airlie ca04fbc7ba fix bug with XFree86 4.3 on core drm
Signed-off-by: Dave Airlie <airlied@linux.ie>
2005-03-25 09:05:10 +00:00
Dave Airlie c8d2d5d419 3dfx DRM depends on PCI
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
2005-03-25 09:02:20 +00:00
Dave Airlie df6ef4836e For 2.6.12 and 2.6.11.x:
Remove incorrect "drm_"-prefix from parameter description.
Signed-off-by: Magnus Damm <damm@opensource.se>
2005-03-25 09:01:27 +00:00
Dave Airlie 7d3c42b589 Fix for bug 2673 from Egbert Eich - memset the version 2005-03-08 23:47:11 +00:00
Eric Anholt 81459d6e50 Close a race which could allow for privilege escalation by users with DRI
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-08 04:17:14 +00:00
Dave Airlie dc4defe742 Invalid bound check of driver defined ioctls in drm_ioctl
Bug 2489 Reporter: Aapo Tahkola <aet@rasterburn.org>
2005-02-07 22:55:54 +00:00
Dave Airlie 03ddea5b27 change DRIVER_ to CORE_ makes things look nicer, also change it so the
driver name is marked on resource allocations
2005-02-07 11:20:43 +00:00
Dave Airlie 300e0866d6 fix agp detection on linux 2005-02-07 10:44:28 +00:00
Eric Anholt 080a547d4d - Implement drm_initmap, and extend it with the resource number to help
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-05 08:00:14 +00:00
Dave Airlie 1dd948f280 make functions static in i915, remove unused functions 2005-02-01 10:43:42 +00:00
Dave Airlie 62e0a58ecf update i830 similiar to the kernel, add statics 2005-02-01 10:33:51 +00:00
Dave Airlie 8d4c731aa1 make more functions static in i810 and fix pageflip cleanup 2005-02-01 10:18:27 +00:00
Dave Airlie 41cbbb47af fix radeon drv 2005-01-29 23:05:35 +00:00