On Mar 12 16:44:10, [email protected] wrote:
> Now that we have KMS, giving userland access to AGP through /dev/agp0
> is no longer necessary. As far as I can tell none of the drivers we
> ship in xenocara still use this.
Back when we had appleagp, my PowerBook6,1 and MacMini were happier.
So I tried to just reenable
appleagp* at pchb?
agp* at appleagp? # AGP bridges
in my kernel config, but this diff below seems to break it:
cc -Werror -Wall -Wstrict-prototypes -Wmissing-prototypes -Wno-main
-Wno-uninitialized -Wno-format -Wstack-larger-than-2047 -msoft-float
-Wa,-many -fno-builtin-printf -fno-builtin-snprintf
-fno-builtin-vsnprintf -fno-builtin-log -fno-builtin-log2
-fno-builtin-malloc -O2 -pipe -nostdinc -I../../../.. -I.
-I../../../../arch -DDDB -DDIAGNOSTIC -DKTRACE -DACCOUNTING -DKMEMSTATS
-DPTRACE -DPOOL_DEBUG -DCRYPTO -DSYSVMSG -DSYSVSEM -DSYSVSHM
-DUVM_SWAP_ENCRYPT -DCOMPAT_43 -DLKM -DFFS -DFFS2 -DFFS_SOFTUPDATES
-DUFS_DIRHASH -DQUOTA -DEXT2FS -DMFS -DNFSCLIENT -DNFSSERVER -DCD9660
-DUDF -DMSDOSFS -DFIFO -DTMPFS -DFUSE -DSOCKET_SPLICE -DTCP_SACK
-DTCP_ECN -DTCP_SIGNATURE -DINET -DALTQ -DINET6 -DIPSEC -DPPP_BSDCOMP
-DPPP_DEFLATE -DPIPEX -DMROUTING -DMPLS -DBOOT_CONFIG -DPCIVERBOSE
-DUSBVERBOSE -DADBVERBOSE -DALTIVEC -DAPERTURE -DWSDISPLAY_COMPAT_USL
-DWSDISPLAY_COMPAT_RAWKBD -DWSDISPLAY_DEFAULTSCREENS="6"
-DWSDISPLAY_COMPAT_PCVT -DUSER_PCICONF -DONEWIREVERBOSE -DMAXUSERS=80
-D_KERNEL -D__macppc__ -MD -MP -c ../../../../arch/macppc/macppc/conf.c
../../../../arch/macppc/macppc/conf.c:235: error: 'cdev_notdef'
undeclared here (not in a function)
Does that mean that there is no way back now to appleagp?
I hear it wasn't really right, but e.g. my PowerBook did X
just fine in 5.4, but needs to use Driver "wsfb" now ...
Thank you for your time
Jan
> A possible exception is Intel's
> first generation of integrated graphics (the i810 and i815 chipsets),
> but I believe support for those has been broken for at least a year
> now. And with the gutting of XAA from the X server the vesa driver
> probably works as well as a dedicated driver for this hardware.
>
> ok?
>
> Index: arch/amd64/amd64/conf.c
> ===================================================================
> RCS file: /home/cvs/src/sys/arch/amd64/amd64/conf.c,v
> retrieving revision 1.44
> diff -u -p -r1.44 conf.c
> --- arch/amd64/amd64/conf.c 4 Nov 2013 17:14:26 -0000 1.44
> +++ arch/amd64/amd64/conf.c 12 Mar 2014 15:06:54 -0000
> @@ -156,8 +156,6 @@ cdev_decl(cztty);
> #include "radio.h"
> #include "nvram.h"
> cdev_decl(nvram);
> -#include "agp.h"
> -cdev_decl(agp);
> #include "drm.h"
> cdev_decl(drm);
>
> @@ -278,7 +276,7 @@ struct cdevsw cdevsw[] =
> cdev_acpi_init(NACPI,acpi), /* 83: ACPI */
> cdev_notdef(),
> cdev_nvram_init(NNVRAM,nvram), /* 85: NVRAM interface */
> - cdev_agp_init(NAGP,agp), /* 86: agp */
> + cdev_notdef(), /* 86 */
> cdev_drm_init(NDRM,drm), /* 87: drm */
> cdev_gpio_init(NGPIO,gpio), /* 88: gpio */
> cdev_vscsi_init(NVSCSI,vscsi), /* 89: vscsi */
> Index: arch/i386/i386/conf.c
> ===================================================================
> RCS file: /home/cvs/src/sys/arch/i386/i386/conf.c,v
> retrieving revision 1.145
> diff -u -p -r1.145 conf.c
> --- arch/i386/i386/conf.c 4 Nov 2013 14:11:29 -0000 1.145
> +++ arch/i386/i386/conf.c 12 Mar 2014 15:06:03 -0000
> @@ -159,8 +159,6 @@ cdev_decl(cztty);
> #include "gpr.h"
> #include "nvram.h"
> cdev_decl(nvram);
> -#include "agp.h"
> -cdev_decl(agp);
> #include "drm.h"
> cdev_decl(drm);
>
> @@ -283,7 +281,7 @@ struct cdevsw cdevsw[] =
> cdev_nvram_init(NNVRAM,nvram), /* 84: NVRAM interface */
> cdev_notdef(), /* 85: ACPI (deprecated) */
> cdev_notdef(),
> - cdev_agp_init(NAGP,agp), /* 87: agp */
> + cdev_notdef(), /* 87 */
> cdev_drm_init(NDRM,drm), /* 88: drm */
> cdev_amdmsr_init(NAMDMSR,amdmsr), /* 89: amdmsr */
> cdev_vscsi_init(NVSCSI,vscsi), /* 90: vscsi */
> Index: arch/macppc/macppc/conf.c
> ===================================================================
> RCS file: /home/cvs/src/sys/arch/macppc/macppc/conf.c,v
> retrieving revision 1.56
> diff -u -p -r1.56 conf.c
> --- arch/macppc/macppc/conf.c 4 Nov 2013 17:14:26 -0000 1.56
> +++ arch/macppc/macppc/conf.c 12 Mar 2014 15:32:26 -0000
> @@ -110,8 +110,6 @@ cdev_decl(com);
> #include "inet.h"
>
> #include "apm.h"
> -#include "agp.h"
> -cdev_decl(agp);
> #include "drm.h"
> cdev_decl(drm);
>
> @@ -234,7 +232,7 @@ struct cdevsw cdevsw[] = {
> cdev_vscsi_init(NVSCSI,vscsi), /* 83: vscsi */
> cdev_disk_init(1,diskmap), /* 84: disk mapper */
> cdev_pppx_init(NPPPX,pppx), /* 85: pppx */
> - cdev_agp_init(NAGP,agp), /* 86: agp */
> + cdev_notdef, /* 86 */
> cdev_drm_init(NDRM,drm), /* 87: drm */
> cdev_fuse_init(NFUSE,fuse), /* 88: fuse */
> };
> Index: dev/pci/agp.c
> ===================================================================
> RCS file: /home/cvs/src/sys/dev/pci/agp.c,v
> retrieving revision 1.38
> diff -u -p -r1.38 agp.c
> --- dev/pci/agp.c 6 Aug 2013 09:45:32 -0000 1.38
> +++ dev/pci/agp.c 12 Mar 2014 14:35:25 -0000
> @@ -68,14 +68,7 @@ int agpclose(dev_t, int, int , struct pr
> struct agp_memory *agp_find_memory(struct agp_softc *, int);
> struct agp_memory *agp_lookup_memory(struct agp_softc *, off_t);
>
> -/* userland ioctl functions */
> int agpvga_match(struct pci_attach_args *);
> -int agp_info_user(void *, agp_info *);
> -int agp_setup_user(void *, agp_setup *);
> -int agp_allocate_user(void *, agp_allocate *);
> -int agp_deallocate_user(void *, int);
> -int agp_bind_user(void *, agp_bind *);
> -int agp_unbind_user(void *, agp_unbind *);
> int agp_acquire_helper(void *dev, enum agp_acquire_state state);
> int agp_release_helper(void *dev, enum agp_acquire_state state);
>
> @@ -208,101 +201,6 @@ struct cfdriver agp_cd = {
> NULL, "agp", DV_DULL
> };
>
> -paddr_t
> -agpmmap(dev_t dev, off_t off, int prot)
> -{
> - struct agp_softc *sc = agp_find_device(AGPUNIT(dev));
> -
> - if (sc == NULL)
> - return (-1);
> -
> - return agp_mmap(sc, off, prot);
> -}
> -int
> -agpopen(dev_t dev, int oflags, int devtype, struct proc *p)
> -{
> - struct agp_softc *sc = agp_find_device(AGPUNIT(dev));
> -
> - if (sc == NULL || sc->sc_chipc == NULL)
> - return (ENXIO);
> -
> - if (!sc->sc_opened)
> - sc->sc_opened = 1;
> - else
> - return (EBUSY);
> -
> - return (0);
> -}
> -
> -
> -int
> -agpioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *pb)
> -{
> - struct agp_softc *sc = agp_find_device(AGPUNIT(dev));
> -
> - if (sc == NULL)
> - return (ENODEV);
> -
> - if (sc->sc_methods == NULL || sc->sc_chipc == NULL)
> - return (ENXIO);
> -
> - if (cmd != AGPIOC_INFO && !(flag & FWRITE))
> - return (EPERM);
> -
> - switch(cmd) {
> - case AGPIOC_INFO:
> - return (agp_info_user(sc, (agp_info *)addr));
> -
> - case AGPIOC_ACQUIRE:
> - return (agp_acquire_helper(sc, AGP_ACQUIRE_USER));
> -
> - case AGPIOC_RELEASE:
> - return (agp_release_helper(sc, AGP_ACQUIRE_USER));
> -
> - case AGPIOC_SETUP:
> - return (agp_setup_user(sc, (agp_setup *)addr));
> -
> - case AGPIOC_ALLOCATE:
> - return (agp_allocate_user(sc, (agp_allocate *)addr));
> -
> - case AGPIOC_DEALLOCATE:
> - return (agp_deallocate_user(sc, *(int *)addr));
> -
> - case AGPIOC_BIND:
> - return (agp_bind_user(sc, (agp_bind *)addr));
> -
> - case AGPIOC_UNBIND:
> - return (agp_unbind_user(sc, (agp_unbind *)addr));
> -
> - default:
> - return (ENOTTY);
> - }
> -
> -}
> -
> -int
> -agpclose(dev_t dev, int flags, int devtype, struct proc *p)
> -{
> - struct agp_softc *sc = agp_find_device(AGPUNIT(dev));
> - struct agp_memory *mem;
> -
> - /*
> - * Clear the GATT and force release on last close
> - */
> - if (sc->sc_state == AGP_ACQUIRE_USER) {
> - while ((mem = TAILQ_FIRST(&sc->sc_memory)) != 0) {
> - if (mem->am_is_bound) {
> - agp_unbind_memory(sc, mem);
> - }
> - agp_free_memory(sc, mem);
> - }
> - agp_release_helper(sc, AGP_ACQUIRE_USER);
> - }
> - sc->sc_opened = 0;
> -
> - return (0);
> -}
> -
> struct agp_memory *
> agp_find_memory(struct agp_softc *sc, int id)
> {
> @@ -695,96 +593,6 @@ agp_release_helper(void *dev, enum agp_a
> }
> sc->sc_state = AGP_ACQUIRE_FREE;
> return (0);
> -}
> -
> -/* Implementation of the userland ioctl API */
> -
> -int
> -agp_info_user(void *dev, agp_info *info)
> -{
> - struct agp_softc *sc = (struct agp_softc *) dev;
> -
> - if (!sc->sc_chipc)
> - return (ENXIO);
> -
> - bzero(info, sizeof *info);
> - info->bridge_id = sc->sc_id;
> - if (sc->sc_capoff != 0)
> - info->agp_mode = pci_conf_read(sc->sc_pc, sc->sc_pcitag,
> - AGP_STATUS + sc->sc_capoff);
> - else
> - info->agp_mode = 0; /* i810 doesn't have real AGP */
> - info->aper_base = sc->sc_apaddr;
> - info->aper_size = sc->sc_apsize >> 20;
> - info->pg_total =
> - info->pg_system = sc->sc_maxmem >> AGP_PAGE_SHIFT;
> - info->pg_used = sc->sc_allocated >> AGP_PAGE_SHIFT;
> -
> - return (0);
> -}
> -
> -int
> -agp_setup_user(void *dev, agp_setup *setup)
> -{
> - struct agp_softc *sc = dev;
> -
> - return (agp_enable(sc, setup->agp_mode));
> -}
> -
> -int
> -agp_allocate_user(void *dev, agp_allocate *alloc)
> -{
> - struct agp_softc *sc = dev;
> - struct agp_memory *mem;
> - size_t size = alloc->pg_count << AGP_PAGE_SHIFT;
> -
> - if (sc->sc_allocated + size > sc->sc_maxmem)
> - return (EINVAL);
> -
> - mem = agp_alloc_memory(sc, alloc->type, size);
> - if (mem) {
> - alloc->key = mem->am_id;
> - alloc->physical = mem->am_physical;
> - return (0);
> - } else
> - return (ENOMEM);
> -}
> -
> -int
> -agp_deallocate_user(void *dev, int id)
> -{
> - struct agp_softc *sc = dev;
> - struct agp_memory *mem;
> -
> - if ((mem = agp_find_memory(sc, id)) != NULL) {
> - agp_free_memory(sc, mem);
> - return (0);
> - } else
> - return (ENOENT);
> -}
> -
> -int
> -agp_bind_user(void *dev, agp_bind *bind)
> -{
> - struct agp_softc *sc = dev;
> - struct agp_memory *mem;
> -
> - if ((mem = agp_find_memory(sc, bind->key)) == NULL)
> - return (ENOENT);
> - return (agp_bind_memory(sc, mem, bind->pg_start << AGP_PAGE_SHIFT));
> -}
> -
> -
> -int
> -agp_unbind_user(void *dev, agp_unbind *unbind)
> -{
> - struct agp_softc *sc = dev;
> - struct agp_memory *mem;
> -
> - if ((mem = agp_find_memory(sc, unbind->key)) == NULL)
> - return (ENOENT);
> -
> - return (agp_unbind_memory(sc, mem));
> }
>
> /* Implementation of the kernel api */
> Index: dev/pci/drm/drm_agpsupport.c
> ===================================================================
> RCS file: /home/cvs/src/sys/dev/pci/drm/drm_agpsupport.c,v
> retrieving revision 1.25
> diff -u -p -r1.25 drm_agpsupport.c
> --- dev/pci/drm/drm_agpsupport.c 12 Aug 2013 04:11:52 -0000 1.25
> +++ dev/pci/drm/drm_agpsupport.c 12 Mar 2014 15:03:34 -0000
> @@ -30,18 +30,13 @@
> */
>
> /*
> - * Support code for tying the kernel AGP support to DRM drivers and
> - * the DRM's AGP ioctls.
> + * Support code for tying the kernel AGP support to DRM drivers.
> */
>
> #include "drmP.h"
>
> #if __OS_HAS_AGP
>
> -struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device *, void *);
> -void drm_agp_remove_entry(struct drm_device *,
> - struct drm_agp_mem *);
> -
> int
> drm_agp_info(struct drm_device * dev, struct drm_agp_info *info)
> {
> @@ -66,22 +61,6 @@ drm_agp_info(struct drm_device * dev, st
> }
>
> int
> -drm_agp_info_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - struct drm_agp_info *info = data;
> -
> - return (drm_agp_info(dev, info));
> -}
> -
> -int
> -drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - return (drm_agp_acquire(dev));
> -}
> -
> -int
> drm_agp_acquire(struct drm_device *dev)
> {
> int retcode;
> @@ -99,13 +78,6 @@ drm_agp_acquire(struct drm_device *dev)
> }
>
> int
> -drm_agp_release_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - return (drm_agp_release(dev));
> -}
> -
> -int
> drm_agp_release(struct drm_device * dev)
> {
> if (dev->agp == NULL || !dev->agp->acquired)
> @@ -130,224 +102,14 @@ drm_agp_enable(struct drm_device *dev, d
> return (retcode);
> }
>
> -int
> -drm_agp_enable_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - struct drm_agp_mode *mode = data;
> -
> - return (drm_agp_enable(dev, *mode));
> -}
> -
> -int
> -drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
> -{
> - struct drm_agp_mem *entry;
> - void *handle;
> - struct agp_memory_info info;
> - unsigned long pages;
> - u_int32_t type;
> -
> - if (dev->agp == NULL || !dev->agp->acquired)
> - return (EINVAL);
> -
> - entry = drm_alloc(sizeof(*entry));
> - if (entry == NULL)
> - return (ENOMEM);
> -
> - pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE;
> - type = (u_int32_t)request->type;
> -
> - handle = agp_alloc_memory(dev->agp->agpdev, type,
> - pages << AGP_PAGE_SHIFT);
> - if (handle == NULL) {
> - drm_free(entry);
> - return (ENOMEM);
> - }
> -
> - entry->handle = handle;
> - entry->bound = 0;
> - entry->pages = pages;
> -
> - agp_memory_info(dev->agp->agpdev, entry->handle, &info);
> -
> - request->handle = (unsigned long)entry->handle;
> - request->physical = info.ami_physical;
> - DRM_LOCK();
> - TAILQ_INSERT_HEAD(&dev->agp->memory, entry, link);
> - DRM_UNLOCK();
> -
> - return (0);
> -}
> -
> -int
> -drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - struct drm_agp_buffer *request = data;
> -
> - return (drm_agp_alloc(dev, request));
> -}
> -
> -/*
> - * find entry on agp list. Must be called with dev_lock locked.
> - */
> -struct drm_agp_mem *
> -drm_agp_lookup_entry(struct drm_device *dev, void *handle)
> -{
> - struct drm_agp_mem *entry;
> -
> - TAILQ_FOREACH(entry, &dev->agp->memory, link) {
> - if (entry->handle == handle)
> - break;
> - }
> - return (entry);
> -}
> -
> -int
> -drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request)
> -{
> - struct drm_agp_mem *entry;
> - int retcode;
> -
> - if (dev->agp == NULL || !dev->agp->acquired)
> - return (EINVAL);
> -
> - DRM_LOCK();
> - entry = drm_agp_lookup_entry(dev, (void *)request->handle);
> - /*
> - * If the AGP bridge has an aperture base address of 0 and
> - * the entry is bound with an offset of 0, entry->bound will
> - * not reflect the reality.
> - *
> - * XXX This means that we may try to unbind unbound entries
> - * with such an AGP bridge, but it should be safe because
> - * agp_unbind_memory() has a correct check for bound memory.
> - */
> - if (entry == NULL || (!entry->bound && dev->agp->base)) {
> - DRM_UNLOCK();
> - return (EINVAL);
> - }
> -
> - retcode = agp_unbind_memory(dev->agp->agpdev, entry->handle);
> -
> - if (retcode == 0)
> - entry->bound = 0;
> - DRM_UNLOCK();
> -
> - return (retcode);
> -}
> -
> -int
> -drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - struct drm_agp_binding *request = data;
> -
> - return (drm_agp_unbind(dev, request));
> -}
> -
> -int
> -drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request)
> -{
> - struct drm_agp_mem *entry;
> - int retcode, page;
> -
> - if (dev->agp == NULL || !dev->agp->acquired)
> - return (EINVAL);
> -
> - DRM_DEBUG("agp_bind, page_size=%x\n", PAGE_SIZE);
> -
> - DRM_LOCK();
> - entry = drm_agp_lookup_entry(dev, (void *)request->handle);
> - if (entry == NULL || entry->bound) {
> - DRM_UNLOCK();
> - return (EINVAL);
> - }
> -
> - page = (request->offset + PAGE_SIZE - 1) / PAGE_SIZE;
> -
> - retcode = agp_bind_memory(dev->agp->agpdev, entry->handle,
> - page * PAGE_SIZE);
> - if (retcode == 0)
> - entry->bound = dev->agp->base + (page << PAGE_SHIFT);
> - DRM_UNLOCK();
> -
> - return (retcode);
> -}
> -
> -int
> -drm_agp_bind_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - struct drm_agp_binding *request = data;
> -
> - return (drm_agp_bind(dev, request));
> -}
> -
> -/*
> - * Remove entry from list and free. Call locked.
> - */
> -void
> -drm_agp_remove_entry(struct drm_device *dev, struct drm_agp_mem *entry)
> -{
> - TAILQ_REMOVE(&dev->agp->memory, entry, link);
> -
> - if (entry->bound)
> - agp_unbind_memory(dev->agp->agpdev, entry->handle);
> - agp_free_memory(dev->agp->agpdev, entry->handle);
> - drm_free(entry);
> -}
> -
> void
> drm_agp_takedown(struct drm_device *dev)
> {
> - struct drm_agp_mem *entry;
> -
> if (dev->agp == NULL)
> return;
>
> - /*
> - * Remove AGP resources, but leave dev->agp intact until
> - * we detach the device
> - */
> - DRM_LOCK();
> - while ((entry = TAILQ_FIRST(&dev->agp->memory)) != NULL)
> - drm_agp_remove_entry(dev, entry);
> - DRM_UNLOCK();
> -
> drm_agp_release(dev);
> dev->agp->enabled = 0;
> -}
> -
> -int
> -drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request)
> -{
> - struct drm_agp_mem *entry;
> -
> - if (dev->agp == NULL || !dev->agp->acquired)
> - return (EINVAL);
> -
> - DRM_LOCK();
> - entry = drm_agp_lookup_entry(dev, (void*)request->handle);
> - if (entry == NULL) {
> - DRM_UNLOCK();
> - return (EINVAL);
> - }
> -
> - drm_agp_remove_entry(dev, entry);
> - DRM_UNLOCK();
> -
> - return (0);
> -}
> -
> -int
> -drm_agp_free_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - struct drm_agp_buffer *request = data;
> -
> - return (drm_agp_free(dev, request));
> }
>
> struct drm_agp_head *
> Index: sys/conf.h
> ===================================================================
> RCS file: /home/cvs/src/sys/sys/conf.h,v
> retrieving revision 1.126
> diff -u -p -r1.126 conf.h
> --- sys/conf.h 4 Nov 2013 14:07:15 -0000 1.126
> +++ sys/conf.h 12 Mar 2014 14:23:01 -0000
> @@ -474,13 +474,6 @@ extern struct cdevsw cdevsw[];
> (dev_type_stop((*))) enodev, 0, selfalse, \
> (dev_type_mmap((*))) enodev }
>
> -/* open, close, ioctl, mmap */
> -#define cdev_agp_init(c,n) { \
> - dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
> - (dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
> - (dev_type_stop((*))) enodev, 0, selfalse, \
> - dev_init(c,n,mmap) }
> -
> /* open, close, read, ioctl, poll, mmap, nokqfilter */
> #define cdev_drm_init(c,n) { \
> dev_init(c,n,open), dev_init(c,n,close), dev_init(c, n, read), \