Module Name: src Committed By: snj Date: Wed Jun 24 17:51:32 UTC 2009
Modified Files: src/sys/external/bsd/drm/dist/bsd-core [netbsd-5]: mach64_drv.c mga_drv.c r128_drv.c savage_drv.c sis_drv.c tdfx_drv.c src/sys/external/bsd/drm/dist/shared-core [netbsd-5]: mach64_dma.c mach64_drv.h savage_bci.c savage_state.c sis_ds.c Log Message: Pull up following revision(s) (requested by mrg in ticket #830): sys/external/bsd/drm/dist/bsd-core/mach64_drv.c: revision 1.4 sys/external/bsd/drm/dist/bsd-core/mga_drv.c: revision 1.5 sys/external/bsd/drm/dist/bsd-core/r128_drv.c: revision 1.4 sys/external/bsd/drm/dist/bsd-core/savage_drv.c: revision 1.4 sys/external/bsd/drm/dist/bsd-core/sis_drv.c: revision 1.4 sys/external/bsd/drm/dist/bsd-core/tdfx_drv.c: revision 1.4 sys/external/bsd/drm/dist/shared-core/mach64_dma.c: revision 1.2 sys/external/bsd/drm/dist/shared-core/mach64_drv.h: revision 1.4 sys/external/bsd/drm/dist/shared-core/savage_bci.c: revision 1.4 sys/external/bsd/drm/dist/shared-core/savage_state.c: revision 1.4 sys/external/bsd/drm/dist/shared-core/sis_ds.c: revision 1.4 add a bunch of fixes mostly from ra...@. this fixes the build for all the other drm modules. use pci_find_device() to kill the one XXX rafal left. To generate a diff of this commit: cvs rdiff -u -r1.2.10.1 -r1.2.10.2 \ src/sys/external/bsd/drm/dist/bsd-core/mach64_drv.c \ src/sys/external/bsd/drm/dist/bsd-core/r128_drv.c \ src/sys/external/bsd/drm/dist/bsd-core/savage_drv.c \ src/sys/external/bsd/drm/dist/bsd-core/sis_drv.c \ src/sys/external/bsd/drm/dist/bsd-core/tdfx_drv.c cvs rdiff -u -r1.3.10.1 -r1.3.10.2 \ src/sys/external/bsd/drm/dist/bsd-core/mga_drv.c cvs rdiff -u -r1.1.1.1.10.1 -r1.1.1.1.10.2 \ src/sys/external/bsd/drm/dist/shared-core/mach64_dma.c cvs rdiff -u -r1.2.10.1 -r1.2.10.2 \ src/sys/external/bsd/drm/dist/shared-core/mach64_drv.h \ src/sys/external/bsd/drm/dist/shared-core/savage_bci.c \ src/sys/external/bsd/drm/dist/shared-core/savage_state.c \ src/sys/external/bsd/drm/dist/shared-core/sis_ds.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm/dist/bsd-core/mach64_drv.c diff -u src/sys/external/bsd/drm/dist/bsd-core/mach64_drv.c:1.2.10.1 src/sys/external/bsd/drm/dist/bsd-core/mach64_drv.c:1.2.10.2 --- src/sys/external/bsd/drm/dist/bsd-core/mach64_drv.c:1.2.10.1 Sat Jun 20 23:36:59 2009 +++ src/sys/external/bsd/drm/dist/bsd-core/mach64_drv.c Wed Jun 24 17:51:31 2009 @@ -44,6 +44,12 @@ mach64_PCI_IDS }; +int +mach64_driver_load(struct drm_device * dev, unsigned long flags) +{ + return drm_vblank_init(dev, 1); +} + static void mach64_configure(struct drm_device *dev) { dev->driver->driver_features = @@ -73,6 +79,8 @@ dev->driver->patchlevel = DRIVER_PATCHLEVEL; } +#if defined(__FreeBSD__) + static int mach64_probe(device_t kdev) { @@ -92,12 +100,6 @@ return drm_attach(kdev, mach64_pciidlist); } -int -mach64_driver_load(struct drm_device * dev, unsigned long flags) -{ - return drm_vblank_init(dev, 1); -} - static int mach64_detach(device_t kdev) { @@ -133,3 +135,90 @@ DRIVER_MODULE(mach64, pci, mach64_driver, drm_devclass, 0, 0); #endif MODULE_DEPEND(mach64, drm, 1, 1, 1); + +#elif defined(__NetBSD__) + +static int +mach64drm_probe(device_t parent, cfdata_t match, void *aux) +{ + struct pci_attach_args *pa = aux; + + return drm_probe(pa, mach64_pciidlist); +} + +static void +mach64drm_attach(device_t parent, device_t self, void *aux) +{ + struct pci_attach_args *pa = aux; + struct drm_device *dev = device_private(self); + + dev->driver = malloc(sizeof(struct drm_driver_info), DRM_MEM_DRIVER, + M_WAITOK | M_ZERO); + + mach64_configure(dev); + + drm_attach(self, pa, mach64_pciidlist); +} + +CFATTACH_DECL_NEW(mach64drm, sizeof(struct drm_device), + mach64drm_probe, mach64drm_attach, drm_detach, drm_activate); + +#ifdef _MODULE + +MODULE(MODULE_CLASS_DRIVER, mach64drm, NULL); + +CFDRIVER_DECL(mach64drm, DV_DULL, NULL); +extern struct cfattach mach64drm_ca; +static int drmloc[] = { -1 }; +static struct cfparent drmparent = { + "drm", "vga", DVUNIT_ANY +}; +static struct cfdata mach64drm_cfdata[] = { + { + .cf_name = "mach64drm", + .cf_atname = "mach64drm", + .cf_unit = 0, + .cf_fstate = FSTATE_STAR, + .cf_loc = drmloc, + .cf_flags = 0, + .cf_pspec = &drmparent, + }, + { NULL } +}; + +static int +mach64drm_modcmd(modcmd_t cmd, void *arg) +{ + int err; + + switch (cmd) { + case MODULE_CMD_INIT: + err = config_cfdriver_attach(&mach64drm_cd); + if (err) + return err; + err = config_cfattach_attach("mach64drm", &mach64drm_ca); + if (err) { + config_cfdriver_detach(&mach64drm_cd); + return err; + } + err = config_cfdata_attach(mach64drm_cfdata, 1); + if (err) { + config_cfattach_detach("mach64drm", &mach64drm_ca); + config_cfdriver_detach(&mach64drm_cd); + return err; + } + return 0; + case MODULE_CMD_FINI: + err = config_cfdata_detach(mach64drm_cfdata); + if (err) + return err; + config_cfattach_detach("mach64drm", &mach64drm_ca); + config_cfdriver_detach(&mach64drm_cd); + return 0; + default: + return ENOTTY; + } +} +#endif /* _MODULE */ + +#endif Index: src/sys/external/bsd/drm/dist/bsd-core/r128_drv.c diff -u src/sys/external/bsd/drm/dist/bsd-core/r128_drv.c:1.2.10.1 src/sys/external/bsd/drm/dist/bsd-core/r128_drv.c:1.2.10.2 --- src/sys/external/bsd/drm/dist/bsd-core/r128_drv.c:1.2.10.1 Sat Jun 20 23:36:59 2009 +++ src/sys/external/bsd/drm/dist/bsd-core/r128_drv.c Wed Jun 24 17:51:31 2009 @@ -42,6 +42,11 @@ r128_PCI_IDS }; +int r128_driver_load(struct drm_device * dev, unsigned long flags) +{ + return drm_vblank_init(dev, 1); +} + static void r128_configure(struct drm_device *dev) { dev->driver->driver_features = @@ -72,6 +77,8 @@ dev->driver->patchlevel = DRIVER_PATCHLEVEL; } +#if defined(__FreeBSD__) + static int r128_probe(device_t kdev) { @@ -91,11 +98,6 @@ return drm_attach(kdev, r128_pciidlist); } -int r128_driver_load(struct drm_device * dev, unsigned long flags) -{ - return drm_vblank_init(dev, 1); -} - static int r128_detach(device_t kdev) { @@ -131,3 +133,90 @@ DRIVER_MODULE(r128, pci, r128_driver, drm_devclass, 0, 0); #endif MODULE_DEPEND(r128, drm, 1, 1, 1); + +#elif defined(__NetBSD__) + +static int +r128drm_probe(device_t parent, cfdata_t match, void *aux) +{ + struct pci_attach_args *pa = aux; + + return drm_probe(pa, r128_pciidlist); +} + +static void +r128drm_attach(device_t parent, device_t self, void *aux) +{ + struct pci_attach_args *pa = aux; + struct drm_device *dev = device_private(self); + + dev->driver = malloc(sizeof(struct drm_driver_info), DRM_MEM_DRIVER, + M_WAITOK | M_ZERO); + + r128_configure(dev); + + drm_attach(self, pa, r128_pciidlist); +} + +CFATTACH_DECL_NEW(r128drm, sizeof(struct drm_device), + r128drm_probe, r128drm_attach, drm_detach, drm_activate); + +#ifdef _MODULE + +MODULE(MODULE_CLASS_DRIVER, r128drm, NULL); + +CFDRIVER_DECL(r128drm, DV_DULL, NULL); +extern struct cfattach r128drm_ca; +static int drmloc[] = { -1 }; +static struct cfparent drmparent = { + "drm", "vga", DVUNIT_ANY +}; +static struct cfdata r128drm_cfdata[] = { + { + .cf_name = "r128drm", + .cf_atname = "r128drm", + .cf_unit = 0, + .cf_fstate = FSTATE_STAR, + .cf_loc = drmloc, + .cf_flags = 0, + .cf_pspec = &drmparent, + }, + { NULL } +}; + +static int +r128drm_modcmd(modcmd_t cmd, void *arg) +{ + int err; + + switch (cmd) { + case MODULE_CMD_INIT: + err = config_cfdriver_attach(&r128drm_cd); + if (err) + return err; + err = config_cfattach_attach("r128drm", &r128drm_ca); + if (err) { + config_cfdriver_detach(&r128drm_cd); + return err; + } + err = config_cfdata_attach(r128drm_cfdata, 1); + if (err) { + config_cfattach_detach("r128drm", &r128drm_ca); + config_cfdriver_detach(&r128drm_cd); + return err; + } + return 0; + case MODULE_CMD_FINI: + err = config_cfdata_detach(r128drm_cfdata); + if (err) + return err; + config_cfattach_detach("r128drm", &r128drm_ca); + config_cfdriver_detach(&r128drm_cd); + return 0; + default: + return ENOTTY; + } +} +#endif /* _MODULE */ + +#endif Index: src/sys/external/bsd/drm/dist/bsd-core/savage_drv.c diff -u src/sys/external/bsd/drm/dist/bsd-core/savage_drv.c:1.2.10.1 src/sys/external/bsd/drm/dist/bsd-core/savage_drv.c:1.2.10.2 --- src/sys/external/bsd/drm/dist/bsd-core/savage_drv.c:1.2.10.1 Sat Jun 20 23:36:59 2009 +++ src/sys/external/bsd/drm/dist/bsd-core/savage_drv.c Wed Jun 24 17:51:31 2009 @@ -62,6 +62,8 @@ dev->driver->patchlevel = DRIVER_PATCHLEVEL; } +#if defined(__FreeBSD__) + static int savage_probe(device_t kdev) { @@ -116,3 +118,90 @@ DRIVER_MODULE(savage, pci, savage_driver, drm_devclass, 0, 0); #endif MODULE_DEPEND(savage, drm, 1, 1, 1); + +#elif defined(__NetBSD__) + +static int +savagedrm_probe(device_t parent, cfdata_t match, void *aux) +{ + struct pci_attach_args *pa = aux; + + return drm_probe(pa, savage_pciidlist); +} + +static void +savagedrm_attach(device_t parent, device_t self, void *aux) +{ + struct pci_attach_args *pa = aux; + struct drm_device *dev = device_private(self); + + dev->driver = malloc(sizeof(struct drm_driver_info), DRM_MEM_DRIVER, + M_WAITOK | M_ZERO); + + savage_configure(dev); + + drm_attach(self, pa, savage_pciidlist); +} + +CFATTACH_DECL_NEW(savagedrm, sizeof(struct drm_device), + savagedrm_probe, savagedrm_attach, drm_detach, drm_activate); + +#ifdef _MODULE + +MODULE(MODULE_CLASS_DRIVER, savagedrm, NULL); + +CFDRIVER_DECL(savagedrm, DV_DULL, NULL); +extern struct cfattach savagedrm_ca; +static int drmloc[] = { -1 }; +static struct cfparent drmparent = { + "drm", "vga", DVUNIT_ANY +}; +static struct cfdata savagedrm_cfdata[] = { + { + .cf_name = "savagedrm", + .cf_atname = "savagedrm", + .cf_unit = 0, + .cf_fstate = FSTATE_STAR, + .cf_loc = drmloc, + .cf_flags = 0, + .cf_pspec = &drmparent, + }, + { NULL } +}; + +static int +savagedrm_modcmd(modcmd_t cmd, void *arg) +{ + int err; + + switch (cmd) { + case MODULE_CMD_INIT: + err = config_cfdriver_attach(&savagedrm_cd); + if (err) + return err; + err = config_cfattach_attach("savagedrm", &savagedrm_ca); + if (err) { + config_cfdriver_detach(&savagedrm_cd); + return err; + } + err = config_cfdata_attach(savagedrm_cfdata, 1); + if (err) { + config_cfattach_detach("savagedrm", &savagedrm_ca); + config_cfdriver_detach(&savagedrm_cd); + return err; + } + return 0; + case MODULE_CMD_FINI: + err = config_cfdata_detach(savagedrm_cfdata); + if (err) + return err; + config_cfattach_detach("savagedrm", &savagedrm_ca); + config_cfdriver_detach(&savagedrm_cd); + return 0; + default: + return ENOTTY; + } +} +#endif /* _MODULE */ + +#endif Index: src/sys/external/bsd/drm/dist/bsd-core/sis_drv.c diff -u src/sys/external/bsd/drm/dist/bsd-core/sis_drv.c:1.2.10.1 src/sys/external/bsd/drm/dist/bsd-core/sis_drv.c:1.2.10.2 --- src/sys/external/bsd/drm/dist/bsd-core/sis_drv.c:1.2.10.1 Sat Jun 20 23:36:59 2009 +++ src/sys/external/bsd/drm/dist/bsd-core/sis_drv.c Wed Jun 24 17:51:31 2009 @@ -56,6 +56,8 @@ dev->driver->patchlevel = DRIVER_PATCHLEVEL; } +#if defined(__FreeBSD__) + static int sis_probe(device_t kdev) { @@ -110,3 +112,90 @@ DRIVER_MODULE(sisdrm, pci, sis_driver, drm_devclass, 0, 0); #endif MODULE_DEPEND(sisdrm, drm, 1, 1, 1); + +#elif defined(__NetBSD__) + +static int +sisdrm_probe(device_t parent, cfdata_t match, void *aux) +{ + struct pci_attach_args *pa = aux; + + return drm_probe(pa, sis_pciidlist); +} + +static void +sisdrm_attach(device_t parent, device_t self, void *aux) +{ + struct pci_attach_args *pa = aux; + struct drm_device *dev = device_private(self); + + dev->driver = malloc(sizeof(struct drm_driver_info), DRM_MEM_DRIVER, + M_WAITOK | M_ZERO); + + sis_configure(dev); + + drm_attach(self, pa, sis_pciidlist); +} + +CFATTACH_DECL_NEW(sisdrm, sizeof(struct drm_device), + sisdrm_probe, sisdrm_attach, drm_detach, drm_activate); + +#ifdef _MODULE + +MODULE(MODULE_CLASS_DRIVER, sisdrm, NULL); + +CFDRIVER_DECL(sisdrm, DV_DULL, NULL); +extern struct cfattach sisdrm_ca; +static int drmloc[] = { -1 }; +static struct cfparent drmparent = { + "drm", "vga", DVUNIT_ANY +}; +static struct cfdata sisdrm_cfdata[] = { + { + .cf_name = "sisdrm", + .cf_atname = "sisdrm", + .cf_unit = 0, + .cf_fstate = FSTATE_STAR, + .cf_loc = drmloc, + .cf_flags = 0, + .cf_pspec = &drmparent, + }, + { NULL } +}; + +static int +sisdrm_modcmd(modcmd_t cmd, void *arg) +{ + int err; + + switch (cmd) { + case MODULE_CMD_INIT: + err = config_cfdriver_attach(&sisdrm_cd); + if (err) + return err; + err = config_cfattach_attach("sisdrm", &sisdrm_ca); + if (err) { + config_cfdriver_detach(&sisdrm_cd); + return err; + } + err = config_cfdata_attach(sisdrm_cfdata, 1); + if (err) { + config_cfattach_detach("sisdrm", &sisdrm_ca); + config_cfdriver_detach(&sisdrm_cd); + return err; + } + return 0; + case MODULE_CMD_FINI: + err = config_cfdata_detach(sisdrm_cfdata); + if (err) + return err; + config_cfattach_detach("sisdrm", &sisdrm_ca); + config_cfdriver_detach(&sisdrm_cd); + return 0; + default: + return ENOTTY; + } +} +#endif /* _MODULE */ + +#endif Index: src/sys/external/bsd/drm/dist/bsd-core/tdfx_drv.c diff -u src/sys/external/bsd/drm/dist/bsd-core/tdfx_drv.c:1.2.10.1 src/sys/external/bsd/drm/dist/bsd-core/tdfx_drv.c:1.2.10.2 --- src/sys/external/bsd/drm/dist/bsd-core/tdfx_drv.c:1.2.10.1 Sat Jun 20 23:36:59 2009 +++ src/sys/external/bsd/drm/dist/bsd-core/tdfx_drv.c Wed Jun 24 17:51:31 2009 @@ -58,6 +58,8 @@ dev->driver->patchlevel = DRIVER_PATCHLEVEL; } +#if defined(__FreeBSD__) + static int tdfx_probe(device_t kdev) { @@ -112,3 +114,90 @@ DRIVER_MODULE(tdfx, pci, tdfx_driver, drm_devclass, 0, 0); #endif MODULE_DEPEND(tdfx, drm, 1, 1, 1); + +#elif defined(__NetBSD__) + +static int +tdfxdrm_probe(device_t parent, cfdata_t match, void *aux) +{ + struct pci_attach_args *pa = aux; + + return drm_probe(pa, tdfx_pciidlist); +} + +static void +tdfxdrm_attach(device_t parent, device_t self, void *aux) +{ + struct pci_attach_args *pa = aux; + struct drm_device *dev = device_private(self); + + dev->driver = malloc(sizeof(struct drm_driver_info), DRM_MEM_DRIVER, + M_WAITOK | M_ZERO); + + tdfx_configure(dev); + + drm_attach(self, pa, tdfx_pciidlist); +} + +CFATTACH_DECL_NEW(tdfxdrm, sizeof(struct drm_device), + tdfxdrm_probe, tdfxdrm_attach, drm_detach, drm_activate); + +#ifdef _MODULE + +MODULE(MODULE_CLASS_DRIVER, tdfxdrm, NULL); + +CFDRIVER_DECL(tdfxdrm, DV_DULL, NULL); +extern struct cfattach tdfxdrm_ca; +static int drmloc[] = { -1 }; +static struct cfparent drmparent = { + "drm", "vga", DVUNIT_ANY +}; +static struct cfdata tdfxdrm_cfdata[] = { + { + .cf_name = "tdfxdrm", + .cf_atname = "tdfxdrm", + .cf_unit = 0, + .cf_fstate = FSTATE_STAR, + .cf_loc = drmloc, + .cf_flags = 0, + .cf_pspec = &drmparent, + }, + { NULL } +}; + +static int +tdfxdrm_modcmd(modcmd_t cmd, void *arg) +{ + int err; + + switch (cmd) { + case MODULE_CMD_INIT: + err = config_cfdriver_attach(&tdfxdrm_cd); + if (err) + return err; + err = config_cfattach_attach("tdfxdrm", &tdfxdrm_ca); + if (err) { + config_cfdriver_detach(&tdfxdrm_cd); + return err; + } + err = config_cfdata_attach(tdfxdrm_cfdata, 1); + if (err) { + config_cfattach_detach("tdfxdrm", &tdfxdrm_ca); + config_cfdriver_detach(&tdfxdrm_cd); + return err; + } + return 0; + case MODULE_CMD_FINI: + err = config_cfdata_detach(tdfxdrm_cfdata); + if (err) + return err; + config_cfattach_detach("tdfxdrm", &tdfxdrm_ca); + config_cfdriver_detach(&tdfxdrm_cd); + return 0; + default: + return ENOTTY; + } +} +#endif /* _MODULE */ + +#endif Index: src/sys/external/bsd/drm/dist/bsd-core/mga_drv.c diff -u src/sys/external/bsd/drm/dist/bsd-core/mga_drv.c:1.3.10.1 src/sys/external/bsd/drm/dist/bsd-core/mga_drv.c:1.3.10.2 --- src/sys/external/bsd/drm/dist/bsd-core/mga_drv.c:1.3.10.1 Sat Jun 20 23:36:59 2009 +++ src/sys/external/bsd/drm/dist/bsd-core/mga_drv.c Wed Jun 24 17:51:31 2009 @@ -37,11 +37,31 @@ #include "mga_drv.h" #include "drm_pciids.h" +#ifdef __NetBSD__ +#include <dev/pci/pcivar.h> +#include <dev/pci/pcidevs.h> +#include <dev/pci/pcidevs_data.h> +#endif + /* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */ static drm_pci_id_list_t mga_pciidlist[] = { mga_PCI_IDS }; +#ifdef __NetBSD__ +static int mgadev_match(struct pci_attach_args *pa); +static int +mgadev_match(struct pci_attach_args *pa) +{ + + if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_HINT && + PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_HINT_HB1) + return 1; + return 0; +} +#endif + + /** * Determine if the device really is AGP or not. * @@ -61,8 +81,6 @@ */ static int mga_driver_device_is_agp(struct drm_device * dev) { - device_t bus; - /* There are PCI versions of the G450. These cards have the * same PCI ID as the AGP G450, but have an additional PCI-to-PCI * bridge chip. We detect these cards, which are not currently @@ -71,6 +89,9 @@ * device is 0x0021 (HB6 Universal PCI-PCI bridge), we reject the * device. */ +#if defined(__FreeBSD__) + device_t bus; + #if __FreeBSD_version >= 700010 bus = device_get_parent(device_get_parent(dev->device)); #else @@ -79,6 +100,12 @@ if (pci_get_device(dev->device) == 0x0525 && pci_get_vendor(bus) == 0x3388 && pci_get_device(bus) == 0x0021) +#else + struct pci_attach_args pa; + + if (PCI_PRODUCT(dev->pa.pa_id) == PCI_PRODUCT_MATROX_G400_AGP && + pci_find_device(&pa, mgadev_match)) +#endif return DRM_IS_NOT_AGP; else return DRM_MIGHT_BE_AGP; @@ -116,6 +143,8 @@ dev->driver->patchlevel = DRIVER_PATCHLEVEL; } +#if defined(__FreeBSD__) + static int mga_probe(device_t kdev) { @@ -170,3 +199,90 @@ DRIVER_MODULE(mga, pci, mga_driver, drm_devclass, 0, 0); #endif MODULE_DEPEND(mga, drm, 1, 1, 1); + +#elif defined(__NetBSD__) + +static int +mgadrm_probe(device_t parent, cfdata_t match, void *aux) +{ + struct pci_attach_args *pa = aux; + + return drm_probe(pa, mga_pciidlist); +} + +static void +mgadrm_attach(device_t parent, device_t self, void *aux) +{ + struct pci_attach_args *pa = aux; + struct drm_device *dev = device_private(self); + + dev->driver = malloc(sizeof(struct drm_driver_info), DRM_MEM_DRIVER, + M_WAITOK | M_ZERO); + + mga_configure(dev); + + drm_attach(self, pa, mga_pciidlist); +} + +CFATTACH_DECL_NEW(mgadrm, sizeof(struct drm_device), + mgadrm_probe, mgadrm_attach, drm_detach, drm_activate); + +#ifdef _MODULE + +MODULE(MODULE_CLASS_DRIVER, mgadrm, NULL); + +CFDRIVER_DECL(mgadrm, DV_DULL, NULL); +extern struct cfattach mgadrm_ca; +static int drmloc[] = { -1 }; +static struct cfparent drmparent = { + "drm", "vga", DVUNIT_ANY +}; +static struct cfdata mgadrm_cfdata[] = { + { + .cf_name = "mgadrm", + .cf_atname = "mgadrm", + .cf_unit = 0, + .cf_fstate = FSTATE_STAR, + .cf_loc = drmloc, + .cf_flags = 0, + .cf_pspec = &drmparent, + }, + { NULL } +}; + +static int +mgadrm_modcmd(modcmd_t cmd, void *arg) +{ + int err; + + switch (cmd) { + case MODULE_CMD_INIT: + err = config_cfdriver_attach(&mgadrm_cd); + if (err) + return err; + err = config_cfattach_attach("mgadrm", &mgadrm_ca); + if (err) { + config_cfdriver_detach(&mgadrm_cd); + return err; + } + err = config_cfdata_attach(mgadrm_cfdata, 1); + if (err) { + config_cfattach_detach("mgadrm", &mgadrm_ca); + config_cfdriver_detach(&mgadrm_cd); + return err; + } + return 0; + case MODULE_CMD_FINI: + err = config_cfdata_detach(mgadrm_cfdata); + if (err) + return err; + config_cfattach_detach("mgadrm", &mgadrm_ca); + config_cfdriver_detach(&mgadrm_cd); + return 0; + default: + return ENOTTY; + } +} +#endif /* _MODULE */ + +#endif Index: src/sys/external/bsd/drm/dist/shared-core/mach64_dma.c diff -u src/sys/external/bsd/drm/dist/shared-core/mach64_dma.c:1.1.1.1.10.1 src/sys/external/bsd/drm/dist/shared-core/mach64_dma.c:1.1.1.1.10.2 --- src/sys/external/bsd/drm/dist/shared-core/mach64_dma.c:1.1.1.1.10.1 Sat Jun 20 23:37:01 2009 +++ src/sys/external/bsd/drm/dist/shared-core/mach64_dma.c Wed Jun 24 17:51:32 2009 @@ -509,7 +509,7 @@ DRM_INFO("\n"); - if (ring->head >= 0 && ring->head < ring->size / sizeof(u32)) { + if (ring->head < ring->size / sizeof(u32)) { struct list_head *ptr; u32 addr = le32_to_cpu(((u32 *) ring->start)[ring->head + 1]); @@ -1273,7 +1273,7 @@ entry = list_entry(ptr, drm_mach64_freelist_t, list); buf = entry->buf; offset = buf_addr - GETBUFADDR(buf); - if (offset >= 0 && offset < MACH64_BUFFER_SIZE) { + if (offset < MACH64_BUFFER_SIZE) { found = 1; break; } Index: src/sys/external/bsd/drm/dist/shared-core/mach64_drv.h diff -u src/sys/external/bsd/drm/dist/shared-core/mach64_drv.h:1.2.10.1 src/sys/external/bsd/drm/dist/shared-core/mach64_drv.h:1.2.10.2 --- src/sys/external/bsd/drm/dist/shared-core/mach64_drv.h:1.2.10.1 Sat Jun 20 23:37:01 2009 +++ src/sys/external/bsd/drm/dist/shared-core/mach64_drv.h Wed Jun 24 17:51:32 2009 @@ -504,7 +504,7 @@ #define MMREG0 0x0000 #define MMREG0_END 0x00ff -#define ISMMREG0(r) (((r) >= MMREG0) && ((r) <= MMREG0_END)) +#define ISMMREG0(r) ((r) <= MMREG0_END) #define MMSELECT0(r) (((r) << 2) + DWMREG0) #define MMSELECT1(r) (((((r) & 0xff) << 2) + DWMREG1)) #define MMSELECT(r) (ISMMREG0(r) ? MMSELECT0(r) : MMSELECT1(r)) @@ -776,8 +776,8 @@ #define DMAADVANCE( dev_priv, _discard ) \ do { \ - struct list_head *ptr; \ - int ret; \ + struct list_head *_ptr; \ + int _ret; \ \ if ( MACH64_VERBOSE ) { \ DRM_INFO( "DMAADVANCE() in \n" ); \ @@ -790,9 +790,9 @@ } \ if (_buf->pending) { \ /* This is a resued buffer, so we need to find it in the pending list */ \ - if ((ret = mach64_find_pending_buf_entry(dev_priv, &_entry, _buf))) { \ + if ((_ret = mach64_find_pending_buf_entry(dev_priv, &_entry, _buf))) { \ DRM_ERROR( "DMAADVANCE(): couldn't find pending buf %d\n", _buf->idx ); \ - return ret; \ + return _ret; \ } \ if (_entry->discard) { \ DRM_ERROR( "DMAADVANCE(): sending discarded pending buf %d\n", _buf->idx ); \ @@ -803,26 +803,26 @@ DRM_ERROR( "DMAADVANCE(): empty placeholder list\n"); \ return -EFAULT; \ } \ - ptr = dev_priv->placeholders.next; \ - list_del(ptr); \ - _entry = list_entry(ptr, drm_mach64_freelist_t, list); \ + _ptr = dev_priv->placeholders.next; \ + list_del(_ptr); \ + _entry = list_entry(_ptr, drm_mach64_freelist_t, list); \ _buf->pending = 1; \ _entry->buf = _buf; \ - list_add_tail(ptr, &dev_priv->pending); \ + list_add_tail(_ptr, &dev_priv->pending); \ } \ _entry->discard = (_discard); \ - if ((ret = mach64_add_buf_to_ring( dev_priv, _entry ))) \ - return ret; \ + if ((_ret = mach64_add_buf_to_ring( dev_priv, _entry ))) \ + return _ret; \ } while (0) #define DMADISCARDBUF() \ do { \ if (_entry == NULL) { \ - int ret; \ - if ((ret = mach64_find_pending_buf_entry(dev_priv, &_entry, _buf))) { \ + int _ret; \ + if ((_ret = mach64_find_pending_buf_entry(dev_priv, &_entry, _buf))) { \ DRM_ERROR( "couldn't find pending buf %d\n", \ _buf->idx ); \ - return ret; \ + return _ret; \ } \ } \ _entry->discard = 1; \ @@ -831,7 +831,7 @@ #define DMAADVANCEHOSTDATA( dev_priv ) \ do { \ struct list_head *ptr; \ - int ret; \ + int _ret; \ \ if ( MACH64_VERBOSE ) { \ DRM_INFO( "DMAADVANCEHOSTDATA() in \n" ); \ @@ -853,8 +853,8 @@ _entry->buf->pending = 1; \ list_add_tail(ptr, &dev_priv->pending); \ _entry->discard = 1; \ - if ((ret = mach64_add_hostdata_buf_to_ring( dev_priv, _entry ))) \ - return ret; \ + if ((_ret = mach64_add_hostdata_buf_to_ring( dev_priv, _entry ))) \ + return _ret; \ } while (0) #endif /* __MACH64_DRV_H__ */ Index: src/sys/external/bsd/drm/dist/shared-core/savage_bci.c diff -u src/sys/external/bsd/drm/dist/shared-core/savage_bci.c:1.2.10.1 src/sys/external/bsd/drm/dist/shared-core/savage_bci.c:1.2.10.2 --- src/sys/external/bsd/drm/dist/shared-core/savage_bci.c:1.2.10.1 Sat Jun 20 23:37:02 2009 +++ src/sys/external/bsd/drm/dist/shared-core/savage_bci.c Wed Jun 24 17:51:32 2009 @@ -661,9 +661,14 @@ for (i = 0; i < 3; ++i) if (dev_priv->mtrr[i].handle >= 0) +#if defined(__FreeBSD__) drm_mtrr_del(dev_priv->mtrr[i].handle, dev_priv->mtrr[i].base, dev_priv->mtrr[i].size, DRM_MTRR_WC); +#elif defined(__NetBSD__) + drm_mtrr_del(dev_priv->mtrr[i].base, + dev_priv->mtrr[i].size, DRM_MTRR_WC); +#endif } int savage_driver_unload(struct drm_device *dev) Index: src/sys/external/bsd/drm/dist/shared-core/savage_state.c diff -u src/sys/external/bsd/drm/dist/shared-core/savage_state.c:1.2.10.1 src/sys/external/bsd/drm/dist/shared-core/savage_state.c:1.2.10.2 --- src/sys/external/bsd/drm/dist/shared-core/savage_state.c:1.2.10.1 Sat Jun 20 23:37:02 2009 +++ src/sys/external/bsd/drm/dist/shared-core/savage_state.c Wed Jun 24 17:51:32 2009 @@ -374,18 +374,18 @@ /* Need to reorder indices for correct flat * shading while preserving the clock sense * for correct culling. Only on Savage3D. */ - int reorder[3] = { -1, -1, -1 }; - reorder[start % 3] = 2; + int reorderarr[3] = { -1, -1, -1 }; + reorderarr[start % 3] = 2; BEGIN_BCI((count + 1 + 1) / 2); BCI_DRAW_INDICES_S3D(count, prim, start + 2); for (i = start + 1; i + 1 < start + count; i += 2) - BCI_WRITE((i + reorder[i % 3]) | + BCI_WRITE((i + reorderarr[i % 3]) | ((i + 1 + - reorder[(i + 1) % 3]) << 16)); + reorderarr[(i + 1) % 3]) << 16)); if (i < start + count) - BCI_WRITE(i + reorder[i % 3]); + BCI_WRITE(i + reorderarr[i % 3]); } else if (S3_SAVAGE3D_SERIES(dev_priv->chipset)) { BEGIN_BCI((count + 1 + 1) / 2); BCI_DRAW_INDICES_S3D(count, prim, start); @@ -493,14 +493,14 @@ /* Need to reorder vertices for correct flat * shading while preserving the clock sense * for correct culling. Only on Savage3D. */ - int reorder[3] = { -1, -1, -1 }; - reorder[start % 3] = 2; + int reorderarr[3] = { -1, -1, -1 }; + reorderarr[start % 3] = 2; BEGIN_DMA(count * vtx_size + 1); DMA_DRAW_PRIMITIVE(count, prim, skip); for (i = start; i < start + count; ++i) { - unsigned int j = i + reorder[i % 3]; + unsigned int j = i + reorderarr[i % 3]; DMA_COPY(&vtxbuf[vb_stride * j], vtx_size); } @@ -634,17 +634,17 @@ /* Need to reorder indices for correct flat * shading while preserving the clock sense * for correct culling. Only on Savage3D. */ - int reorder[3] = { 2, -1, -1 }; + int reorderarr[3] = { 2, -1, -1 }; BEGIN_BCI((count + 1 + 1) / 2); BCI_DRAW_INDICES_S3D(count, prim, idx[2]); for (i = 1; i + 1 < count; i += 2) - BCI_WRITE(idx[i + reorder[i % 3]] | + BCI_WRITE(idx[i + reorderarr[i % 3]] | (idx[i + 1 + - reorder[(i + 1) % 3]] << 16)); + reorderarr[(i + 1) % 3]] << 16)); if (i < count) - BCI_WRITE(idx[i + reorder[i % 3]]); + BCI_WRITE(idx[i + reorderarr[i % 3]]); } else if (S3_SAVAGE3D_SERIES(dev_priv->chipset)) { BEGIN_BCI((count + 1 + 1) / 2); BCI_DRAW_INDICES_S3D(count, prim, idx[0]); @@ -754,13 +754,13 @@ /* Need to reorder vertices for correct flat * shading while preserving the clock sense * for correct culling. Only on Savage3D. */ - int reorder[3] = { 2, -1, -1 }; + int reorderarr[3] = { 2, -1, -1 }; BEGIN_DMA(count * vtx_size + 1); DMA_DRAW_PRIMITIVE(count, prim, skip); for (i = 0; i < count; ++i) { - unsigned int j = idx[i + reorder[i % 3]]; + unsigned int j = idx[i + reorderarr[i % 3]]; DMA_COPY(&vtxbuf[vb_stride * j], vtx_size); } Index: src/sys/external/bsd/drm/dist/shared-core/sis_ds.c diff -u src/sys/external/bsd/drm/dist/shared-core/sis_ds.c:1.2.10.1 src/sys/external/bsd/drm/dist/shared-core/sis_ds.c:1.2.10.2 --- src/sys/external/bsd/drm/dist/shared-core/sis_ds.c:1.2.10.1 Sat Jun 20 23:37:02 2009 +++ src/sys/external/bsd/drm/dist/shared-core/sis_ds.c Wed Jun 24 17:51:32 2009 @@ -57,18 +57,18 @@ int setAdd(set_t * set, ITEM_TYPE item) { - int free = set->free; + int freeidx = set->free; - if (free != -1) { - set->list[free].val = item; - set->free = set->list[free].free_next; + if (freeidx != -1) { + set->list[freeidx].val = item; + set->free = set->list[freeidx].free_next; } else { return 0; } - set->list[free].alloc_next = set->alloc; - set->alloc = free; - set->list[free].free_next = -1; + set->list[freeidx].alloc_next = set->alloc; + set->alloc = freeidx; + set->list[freeidx].free_next = -1; return 1; }