diff options
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/pci/agp.c | 194 |
1 files changed, 1 insertions, 193 deletions
diff --git a/sys/dev/pci/agp.c b/sys/dev/pci/agp.c index 8fc3869d720..4bd3b849eed 100644 --- a/sys/dev/pci/agp.c +++ b/sys/dev/pci/agp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: agp.c,v 1.38 2013/08/06 09:45:32 jsg Exp $ */ +/* $OpenBSD: agp.c,v 1.39 2014/03/14 23:42:41 kettenis Exp $ */ /*- * Copyright (c) 2000 Doug Rabson * All rights reserved. @@ -68,14 +68,7 @@ int agpclose(dev_t, int, int , struct proc *); 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) { @@ -697,96 +595,6 @@ agp_release_helper(void *dev, enum agp_acquire_state state) 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 */ void * |