Example #1
0
static int
__ioremap(dev_info_t *dip, drm_device_iomap_t *iomap)
{
    off_t offset;
    int regnum;
    int ret;

    regnum = drm_get_pci_index_reg(
                 dip, iomap->paddr, iomap->size, &offset);
    if (regnum < 0) {
        DRM_ERROR("can not find regster entry: "
                  "paddr=0x%x, size=0x%x", iomap->paddr, iomap->size);
        return -ENXIO;
    }

    ret = ddi_regs_map_setup(dip, regnum,
                             (caddr_t *)&(iomap->kvaddr), (offset_t)offset,
                             (offset_t)iomap->size, &dev_attr, &iomap->acc_handle);
    if (ret != DDI_SUCCESS) {
        DRM_ERROR("failed to map regs: "
                  "regnum=%d, offset=0x%x", regnum, offset);
        iomap->acc_handle = NULL;
        return -EFAULT;
    }

    return 0;
}
int
do_ioremap(dev_info_t *devi, drm_device_iomap_t *iomap)
{
	int regnum;
	off_t offset;
	int ret;

	regnum =  drm_get_pci_index_reg(devi, iomap->physical,
	    iomap->size, &offset);
	if (regnum < 0) {
		DRM_ERROR("do_ioremap: can not find regster entry,"
		    " start=0x%x, size=0x%x", iomap->physical, iomap->size);
		return (ENXIO);
	}

	iomap->drm_regnum = regnum;

	ret = ddi_regs_map_setup(devi, iomap->drm_regnum,
	    (caddr_t *)&(iomap->drm_base), (offset_t)offset,
	    (offset_t)iomap->size, &dev_attr, &iomap->drm_handle);
	if (ret < 0) {
		DRM_ERROR("do_ioremap: failed to map regs: regno=%d,"
		    " offset=0x%x", regnum, offset);
		iomap->drm_handle = NULL;
		return (EFAULT);
	}

	return (0);
}