Commit Graph

210 Commits (2a6f555053bd404e7e5721c40990da2d9db53d19)

Author SHA1 Message Date
Dave Airlie 93bd67ef62 centralise pci ids into one place and use scripts to generate files for
kernel
2004-04-21 12:13:31 +00:00
Eric Anholt fb7b802dda Fix some misuse of NULL where 0 is intended.
Obtained from: FreeBSD CVS
2004-01-06 04:54:25 +00:00
Eric Anholt 9fb6986e83 Don't ioremap the framebuffer area. The ioremapped area wasn't used by
anything, and took up valuable KVA. While I'm in the area, clean up BSD
    MTRR stuff some more.
Suggested by: jonsmirl
2003-12-16 08:57:08 +00:00
Eric Anholt 6e56c39371 Fix a locking nit, and add asserts in some things that should be called
with locks held.
2003-11-12 20:30:51 +00:00
Eric Anholt 1f7598245a Return EBUSY when attempting to addmap a DRM_SHM area with a lock in it if
dev->lock.hw_lock is already set. This fixes the case of two X Servers
    running on the same head on different VTs with interface 1.1, by making
    the 2nd head fail to inizialize like before.
2003-11-06 04:48:06 +00:00
Eric Anholt 2c1172a317 Remove unused variable. 2003-11-06 04:35:08 +00:00
Eric Anholt 66c9e3053f - Tie the DRM to a specific device: setunique no longer succeeds when given
a busid that doesn't correspond to the device the DRM is attached to.
    This is a breaking of backwards-compatibility only for the
    multiple-DRI-head case with X Servers that don't use interface 1.1.
- Move irq_busid to drm_irq.h and make it only return the IRQ for the
    current device. Retains compatibility with previous X Servers, cleans
    up unnecessary code. This means no irq_busid on !__HAVE_IRQ, but can be
    changed if necessary.
- Bump interface version to 1.2. This version when set signifies that the
    control ioctl should ignore the irq number passed in and enable the
    interrupt handler for the attached device. Otherwise it errors out when
    the passed-in irq is not equal to the device's.
- Store the highest version the interface has been set to in the device.
- Fix a recursion on DRM_LOCK in irq_uninstall on FreeBSD. This leaves
    irq_uninstall being done without the lock in some cases, but it was
    racey anyways.
2003-11-05 08:13:52 +00:00
Eric Anholt 8feb046d8c Args for the BSD DRM_PUT_USER_UNCHECKED were swapped. 2003-11-05 02:41:50 +00:00
Eric Anholt e5cad7fced Remove buf_alloc which is unused since the locking commit. 2003-11-05 00:49:35 +00:00
Michel Daenzer 2655ccddf4 Memory layout transition:
the 2D driver initializes MC_FB_LOCATION and related registers sanely
the DRM deduces the layout from these registers
clients use the new SETPARAM ioctl to tell the DRM where they think the
    framebuffer is located in the card's address space
the DRM uses all this information to check client state and fix it up if
    necessary
This is a prerequisite for things like direct rendering with IGP chips and
    video capturing.
2003-11-04 00:46:05 +00:00
Eric Anholt 3f7279cb8e Add a DRM_PUT_USER_UNCHECKED, which will be used by an upcoming radeon
change.
2003-10-27 22:05:38 +00:00
Eric Anholt 2423fedcc8 Don't try to use dev->dma_lock unless dma is initialized (dev->dma != NULL)
in bufs_info sysctl handler. dev->dma and dev->dma_lock existence are
    protected by DRM_LOCK(). Fixes panic on sysctl hw.dri when the device
    is uninitialied (when you aren't in X).
2003-10-24 21:49:28 +00:00
Eric Anholt 451a1d3f69 Move the REALLY_HAVE_AGP endif above the mtrr functions. Broke tdfx module. 2003-10-24 00:59:31 +00:00
Eric Anholt 06cb132e86 - Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the
server or client to notify the DRM that it expects a certain version of
    the device dependent or device independent interface. If the major
    doesn't match or minor is too large, EINVAL is returned. A major of -1
    means that the requestor doesn't care about that portion of the
    interface. The ioctl returns the actual versions in the same struct.
- Introduce DRM DI interface version 1.1. If the server requests version
    1.1, then the DRM sets the unique itself according to the busid of the
    device it probed, which may then be accessed as normal using getunique.
- Request version 1.1 in libdrm's drmOpenByBusID, allowing the X Server to
    request based on a BusID. Introduce a wrapper for DRM_IOCTL_SET_VERSION
    and bump libdrm minor version.
- Pass the busid in DRIScreenInit if libdrm can handle both a busid and
    name. This allows drmOpenByBusID to be used to find the DRM instead of
    just the driver name, which allows us in the future to tie a DRM more
    strongly to the device it probed to. Introduce a function
    DRICreatePCIBusID which creates a busid in the form pci:oooo:bb:dd.f
    similar to linux's pci_name() function. This matches the format used by
    the DRM in version 1.1. libdrm knows how to match both this format and
    the old PCI🅱️d:f format.
- Use the new DRICreatePCIBusID function in the *_dri.c to request the new,
    more exact busid format.
2003-10-23 02:23:31 +00:00
Eric Anholt 86e6325e5a - Add DRM_GET_PRIV_WITH_RETURN macro. This can be used in shared code to
get the drm_file_t * based on the filp passed in ioctl handlers.
- Use this macro on BSD for simplification and improve its error reporting.
    Make failure to find the drm_file_t * print as an error, not debug.
    This failure may be part of the problem with KDE.
- Make debug and error print macros include the pid on BSD.
2003-10-22 22:08:53 +00:00
Eric Anholt 4e6ddcbb69 Fix warning about static DRM(bufs_info) defined but not used in the
!__HAVE_DMA case.
2003-10-22 21:50:09 +00:00
Eric Anholt ea7b4fdc22 Fix the possibility of sleeping with locks held in sysctls by copying the
data into temporary variables with the lock held then outputting to
    sysctls with the lock released. Rearranged a little extra code to aid
    this. Note that drm_memory_debug.h hasn't had this fix applied, but I
    consider that code to be just about dead anyway.
2003-10-20 05:09:21 +00:00
Eric Anholt 6b0424fdcd Clean up BSD MTRR handling. The NetBSD code is untested, but it's my best
shot.
2003-10-20 00:55:56 +00:00
Eric Anholt 0cf1887139 - SMPng lock the DRM. This is only partial -- there are a few code paths
used by root (the X Server) which are not locked. However, it should
    deal with lost-IRQ issues on -current which I think people have been
    experiencing but I am unable to reproduce (though I understand why they
    would occur, because of a bug of mine). Note that most of the locking
    (DRM_LOCK()/UNLOCK()) is all covered by Giant still, so it doesn't
    matter yet.
- Remove locking on FreeBSD-stable and NetBSD. These are covered by the
    fact that there is no reentrancy of the kernel except by interrupts,
    which are locked using spldrm()/splx() instead.
2003-10-19 23:35:58 +00:00
Eric Anholt 59fbe01fea Clean up extra zeroing of dev->dma, and use calloc to take advantage of
M_ZERO.
2003-10-19 22:29:08 +00:00
Eric Anholt 2950f9e682 - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them
from __HAVE_DMA. This will be useful for adding vblank sync support to
    sis and tdfx. Rename dma_service to irq_handler, which is more
    accurately what it is.
- Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
    the right number of underscores. This may have been a problem in the
    case that the server died without doing its DRM_IOCTL_CONTROL to
    uninit.
2003-10-17 05:13:48 +00:00
Eric Anholt ff58476011 - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
just a single instance. Moved the PCI ID lists from <card>_drv.c in BSD
    to <card>.h. The PCI ID lists include a driver private field, which may
    be used by drivers for chip family or other information. Based on work
    by jonsmirl.
- Make tdfx_drv.c and tdfx.h match other drivers.
- Fixed up linking of sis shared files.
Tested with Radeon and SiS on Linux and FreeBSD, including a Linux setup
    with
2 SiS cards in a machine, but only one head being used (with DRI)
2003-10-17 03:14:39 +00:00
Eric Anholt 9fbfb7ca6a Some code cleanups done while working on locking. Reduces always-true
tests, excessive indenation, convoluted handling of errors, or code
    duplication.
2003-10-03 08:08:10 +00:00
Eric Anholt 929536172c Stylistic preparation for SMPng locking work: DRM_LOCK/DRM_UNLOCK have side
effects, so make them look like functions (add parenthesis).
2003-10-03 07:02:51 +00:00
Eric Anholt e187d665e4 Add an MIT-style copyright, assigned to myself, to these files. I think
I've touched enough of the code here, and there was no previous
    copyright. Do some drive-by style fixes while I'm here.
2003-10-02 20:52:44 +00:00
Eric Anholt 89dd7be3dd Axe more old gamma DMA infrastructure. 2003-10-02 07:02:34 +00:00
Eric Anholt a6b84f73e1 Mostly whitespace cleanups and style(9) fixes focused on "if(" -> "if ("
Change some nearby memset()s to bzero()s or to calloc allocations to
    take advantage of M_ZERO). Reverse some error tests to reduce high
    levels of indentation. Move the sg_cleanup() call out of the maplist
    loop in DRM(takedown)-- I can't see any need for it to be inside.
2003-10-02 04:48:54 +00:00
Eric Anholt 4dee75ff58 Wrap sys/endian.h usage with __FreeBSD_version >= 480000.
Obtained from: i865-agp-0-1-branch
2003-10-02 04:12:34 +00:00
Eric Anholt 4a55e75e97 Allow the DRM to attach to a "drmsub" device. This will be provided by the
i810 AGP module, working around the limitation of one driver per
    device.
Obtained from: i865-0-1-branch
2003-10-02 04:07:03 +00:00
Eric Anholt 8fe6a0d6c9 MTRR issue with SMP and -stable seems to be resolved. Re-enable MTRRs on
4.x
2003-10-02 03:51:49 +00:00
Keith Whitwell 6fc41e25e5 Use spldrm/splx around tsleep() in DRM_WAIT_ON 2003-09-09 07:45:12 +00:00
Eric Anholt 6f563cd513 Fix for older -stable.
Obtained from: FreeBSD CVS
2003-09-07 23:27:04 +00:00
Eric Anholt f634f68759 These files were missed in the SiS DRM commit. 2003-08-29 20:54:26 +00:00
Eric Anholt fabc64dd57 Port the SiS DRM to FreeBSD. This includes the ability for the DRM to
allocate framebuffer memory without sisfb, and a new ioctl to be used
    by the X Server which tells the DRM what region of framebuffer memory
    to allocate from. Also fixes a possibility to panic the kernel I
    believe. Tested on linux with sisfb and FreeBSD (without sisfb) with
    new DRI only.
2003-08-29 19:24:36 +00:00
Eric Anholt a7aebb6dac Add DRM(calloc), which is convenient, used by the new sis code, and takes
advantage of M_ZERO on BSDs.
2003-08-29 19:16:13 +00:00
Eric Anholt db78129116 Update radeon PCI IDs. 2003-08-29 19:08:06 +00:00
Eric Anholt bd3bc9f23d This PCI header has been living in dev/pci/ for a while now. 2003-08-29 19:07:27 +00:00
Eric Anholt 963ad33cb6 Fix the debug build. 2003-08-19 02:22:57 +00:00
Eric Anholt ad78a613a4 - Remove $FreeBSD$ tags as they weren't too useful and merges are now being
done through perforce.
- Add copyright headers to drm_os_*bsd.h, still need to research the other
    copyright-less files better.
2003-08-19 00:41:00 +00:00
Eric Anholt 02675a470e Merge from FreeBSD r1.11: We have memset in the kernel, no need to define
it to bzero (which it was always used for).
2003-08-12 21:18:05 +00:00
Michel Daenzer 4b60cae90e IRQ code cleanup suggested by Linus Torvalds
i830 build fix
2003-07-29 10:11:48 +00:00
Eric Anholt 983db58a26 Fix FreeBSD build after IRQ changes. 2003-07-26 03:18:34 +00:00
Michel Daenzer bef7017749 Compile fixes for recent 2.5/2.6 Linux kernels. I hope this doesn't break
the i830 driver or the BSDs. :)
2003-07-25 10:50:39 +00:00
Michel Daenzer e5d3c7f260 Support AGP bridges where the AGP aperture can't be accessed directly by
the CPU (David Mosberger, Benjamin Herrenschmidt, myself, Paul
    Mackerras, Jeff Wiedemeier)
2003-05-16 23:41:27 +00:00
Eric Anholt 87ed795ff3 Fix a typo: On takedown the mtrr operation is MEMRANGE_SET_REMOVE, not
_UPDATE.
2003-04-28 23:18:43 +00:00
Eric Anholt 22b9b720d5 Use real endian conversion functions. 2003-04-27 00:43:14 +00:00
Eric Anholt 9828bd24c8 Fix formatting of hw.dri sysctl. 2003-04-26 23:55:30 +00:00
Eric Anholt 766a1da2e5 Remove the map argument from DRM_*MEMORYBARRIER. Not all of the uses of
DRM_*MEMORYBARRIER we had were related to an MMIO space. This means
    arch-specific code on the BSDs, unfortunately. Also add
    DRM_MEMORYBARRIER() and change the DRM_READMEMORYBARRIER()s that used
    to be read/write barriers to it.
2003-04-26 23:32:00 +00:00
Eric Anholt a172ee2a18 MFL: Don't install irq handler unless the driver has been initialized. 2003-04-26 23:04:22 +00:00
Eric Anholt ce514e08aa Add PCI DMA memory functions and make addbufs_pci and associated code use
it. To do this we need to save the bus address along with the virtual
    address in the seglist. Also fix some error handling and a few bits of
    whitespace.
2003-04-26 22:52:39 +00:00
Eric Anholt a79adaab72 Missed files in the last commit: Remove memory debugging sysctl unless
MEMORY_DEBUG is set.
2003-04-26 22:21:37 +00:00
Eric Anholt 8621ae310b Move the memory functions with debugging info to drm_memory_debug.h, and
remove a couple of dead functions.
2003-04-26 22:18:39 +00:00
Eric Anholt 79a0c5757e Remove #if 0'ed code. 2003-04-26 21:57:43 +00:00
Eric Anholt e60eb69bc0 Replace the C atomic_cmpset_int compatibility function for -stable with the
real i386 atomic_cmpset_int from -current. FreeBSD-stable won't ever
    have DRM support for non-i386.
2003-04-26 06:53:22 +00:00
Eric Anholt acb5d6b273 Disable MTRRs on FreeBSD-stable. Without this, it hangs on boot in the MTRR
setting for AGP cards on SMP machines.
2003-04-26 06:39:55 +00:00
Eric Anholt 77ee73f8cd Merge from FreeBSD-current. 2003-04-25 02:27:21 +00:00
Eric Anholt 58650c3a9d Clean up the DRM_COPY_TO_USER()ing of DRM(infobufs), making it more
legible.
2003-04-25 00:02:14 +00:00
Eric Anholt 781828b26e Clean up the style of the linux-compat code and use ioctl() directly rather
than reimplementing it.
2003-04-24 23:57:29 +00:00
Eric Anholt a147df879b Remove more gamma DMA infrastructure. Most of this code was copied straight
from linux, so it could be added back if some driver needed it in the
    future.
2003-04-24 19:09:55 +00:00
Eric Anholt 01178567eb Remove more gamma DMA code. This isn't all of it, but it's a major portion. 2003-04-24 06:19:54 +00:00
Eric Anholt c6d2af70cb Move some common code from addbufs_<type> to addbufs. Make buf_alloc be
protected by the count_lock and make it non-atomic.
2003-04-24 05:56:44 +00:00
Eric Anholt af3bfdef26 Remove the ioctl_count variable from the device. A reference is held to the
fp throughout the ioctl syscall, so the device can't be closed out from
    under us.
2003-04-24 05:14:05 +00:00
Eric Anholt bcd527ee71 Remove a bunch of dead code and fix spelling of a couple of comments. 2003-04-24 04:50:07 +00:00
Eric Anholt 9b2b2337b3 Move one definition to drm_drv.h and remove the rest of drm_init.h which
was all unused.
2003-04-24 00:46:03 +00:00
Eric Anholt e21473c888 Remove DRM_DMA_HISTOGRAM and associated code. 2003-04-24 00:37:35 +00:00
Eric Anholt 1fc0a5e1e4 Make DRM(read) and DRM(poll) stubs and remove DRM(write) and
DRM(write_string). This is the first part of removing much of the
    support code for gamma from the BSD DRM, since it appears that no new
    drivers are using it and nobody has ever shown interest in gamma on
    BSD.
2003-04-24 00:25:36 +00:00
Eric Anholt 6f88a5351c Whitespace and remove a dead commented line. 2003-04-01 18:53:24 +00:00
Eric Anholt aea0418d0d Remove dead vma code and remove the unused devstate struct definition. 2003-03-29 18:22:28 +00:00
Eric Anholt 6ef79263b6 Add DRMFILE definitions and supply filp for BSD in the
post-drm-filp-0-1-branch world. The filp is a void * cast from the
    current pid. This is a temporary solution which maintains the status
    quo until a proper solution is implemented.
What is really needed is a unique pointer per open, hopefully with a device
    private area. This can be done in FreeBSD for all entry points except
    mmap, but is difficult (sys/dev/streams/streams.c is an example). I
    have partially completed code for this but have not had time to debug,
    so this is a temporary fix.
2003-03-29 03:38:47 +00:00
Alan Hourihane c14006ba9f XFree86 4.3.0 merge 2003-03-25 00:29:14 +00:00
Eric Anholt 0bd0dd2300 Merge back from FreeBSD-current, adding FreeBSD ID tags to aid future
merging. Also includes an update to radeon PCI IDs.
2003-03-11 20:51:28 +00:00
Eric Anholt 638d45d2a0 Make dma_addr_t an unsigned long not a uint32, don't try to use memrange
functions on FreeBSD non-x86, and remove a dead define.
2003-03-08 05:05:41 +00:00
Eric Anholt bf4b8ba753 Remove the vbl signal code because it's untested (and has lock issues on
-current).
2003-03-06 19:21:23 +00:00
Eric Anholt a01d26f39d Put cdevsw initialization in line with FreeBSD-current. (From r1.10,r1.11
of FreeBSD CVS)
2003-03-05 06:06:27 +00:00
Eric Anholt 3f786dbd18 Update mmap handling for FreeBSD-current (Based on r1.3 of FreeBSD CVS). 2003-03-05 06:04:50 +00:00
Eric Anholt 1434bfe4a8 Remove a paste-o in DRM_SPINUNINIT and add a volatile to the compatibility
atomic_cmpset_int.
2003-03-05 04:14:52 +00:00
Keith Whitwell 51e5f73d2a DRM_FREE/2 patch from Philip Brown 2003-03-04 11:41:12 +00:00
Eric Anholt b487f30ea5 Fix build on NetBSD. 2003-02-22 18:40:12 +00:00
Eric Anholt cfa778af9c Merge from bsd-4-0-0-branch. 2003-02-21 23:23:09 +00:00
Michel Daenzer c7d471b6ae don't inflate relative vblank sequence numbers on repeated calls (e.g. when
interrupted by a signal)
2003-02-02 03:06:47 +00:00
Eric Anholt 66f57c403c Fix build on -current: Provide M_WAITOK define. 2003-01-24 00:49:15 +00:00
Eric Anholt a885d6786f Add vblank signal code for BSD DRM. Untested so far, but working with a
4.2.0 userland at least.
2002-12-06 02:27:30 +00:00
Eric Anholt e656655a36 Kernel support for vblank syncing on Rage 128 and Matrox. 2002-10-30 06:10:34 +00:00
Eric Anholt 10900dab7c Use bus_alloc_resource/bus_release_resource more properly: save the rid
returned by alloc.
2002-10-29 03:20:21 +00:00
Eric Anholt 9f21f02217 Catch up to -current. 2002-10-27 05:24:33 +00:00
Eric Anholt 5e9fad3588 Fix reversed test that broke vblank waiting on FreeBSD.
Pointy hat to: anholt
2002-10-14 23:35:24 +00:00
Eric Anholt 537f2208f0 Remove some noise being spit to the console. 2002-09-29 23:56:17 +00:00
Eric Anholt 506c1c02a4 Make our set_bit and friends match linux better (cleans up some warnings) 2002-09-29 23:21:55 +00:00
Eric Anholt efda4ce353 warnings cleanup 2002-09-29 22:47:08 +00:00
Eric Anholt 33a51d8518 Fix some of my silliness in DRM_WAIT_ON (not returning EINTR). 2002-09-29 22:39:34 +00:00
Keith Whitwell 9243e642da Move os-dependent stuff out of radeon_irq.c 2002-09-29 21:19:01 +00:00
Eric Anholt e6901cad69 Fix up BSD irq handling. 2002-09-29 20:48:18 +00:00
Eric Anholt 97961e2c65 BSD vblank framework. 2002-09-26 07:45:07 +00:00
Eric Anholt 770d045d25 Fix one warning. 2002-09-26 07:21:05 +00:00
Keith Whitwell f1c8fe9557 merged r200-0-2-branch to trunk 2002-09-23 17:26:43 +00:00
Eric Anholt 9797f0fd17 Remove some extra symlinking for kernel module building that hasn't been
needed since 2000.
2002-08-30 23:49:25 +00:00
Eric Anholt 5e81d590d5 Include non-radeon modules in the build. 2002-08-27 01:22:55 +00:00
Keith Whitwell 48cc350e21 merged r200-0-1-branch 2002-08-26 22:16:18 +00:00
Eric Anholt 77c35c043a Remove drm_linux.h, move the two useful defines into drm_drv.h (the only
place they're used). Use fd locking on -current. Actually copy in data
    from userspace to kernel in the linux-compat ioctl path. Make sure
    ioctl sizes are as expected in the ioctl handler functions.
2002-08-21 07:14:21 +00:00
Alan Hourihane 74ef13fd00 merged bsd-3-0-0-branch 2002-07-05 08:31:11 +00:00
Alan Hourihane 2ab6ff7190 fixups for *BSD 2002-03-11 11:26:13 +00:00
Alan Hourihane 46cacdca85 first pass at merging mesa 4.0 kernel drivers into new bsd-3-0-0 branch. 2002-03-06 19:30:45 +00:00
David Dawes 44aa4d6297 First pass merge of XFree86 4.2.0 import. 2002-01-27 20:05:42 +00:00
David Dawes 14945ada16 Import of XFree86 4.2.0 2002-01-27 18:23:04 +00:00
David Dawes 16bd14926e Initial revision 2002-01-27 18:23:04 +00:00
David Dawes 18fc5ee923 First pass of XFree86 4.0.99.2 merge. 2001-04-09 21:56:31 +00:00
David Dawes 1759c16ab9 Import -f XFree86 4.0.99.2 2001-04-09 16:27:54 +00:00
Alan Hourihane 8bc39d01ca Import of XFree86 4.0.1 2000-07-10 21:32:06 +00:00
Doug Rabson d399dbcd56 Merged bsd-1-0-1 2000-06-13 17:38:09 +00:00
Doug Rabson fa0a35a25f Merged bsd-1-0-0 2000-05-30 17:13:31 +00:00