--- tdfx_pci.c Thu Aug 10 21:36:46 2000 +++ /usr/src/sys/dev/tdfx/tdfx_pci.c Thu Aug 10 21:38:36 2000 @@ -248,6 +248,17 @@ #endif tdfx_info->piorid = 0; } + tdfx_info->rom = pci_read_config(dev, 0x30, 4) & 0xffff0000; + rid = 0x30; + tdfx_info->romrange = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, + 0, ~0, 1, RF_ACTIVE | RF_SHAREABLE); + tdfx_info->romrid = rid; + if(tdfx_info->romrange == NULL) { +#ifdef DEBUG + device_printf(dev, "Couldn't map ROM BIOS area\n"); +#endif + tdfx_info->romrid = 0; + } else { tdfx_info->piorid = rid; } @@ -255,6 +266,8 @@ tdfx_info->addr1 = 0; tdfx_info->memrange2 = NULL; tdfx_info->piorange = NULL; + tdfx_info->romrange = NULL; + tdfx_info->rom = 0; tdfx_info->pio0 = 0; } @@ -298,9 +311,12 @@ if(tdfx_info->memrange2 != NULL) bus_release_resource(dev, SYS_RES_MEMORY, tdfx_info->memrid2, tdfx_info->memrange); - /* if(tdfx_info->piorange != NULL) + if(tdfx_info->piorange != NULL) bus_release_resource(dev, SYS_RES_IOPORT, tdfx_info->piorid, - tdfx_info->piorange);*/ + tdfx_info->piorange); + if(tdfx_info->romrange != NULL) + bus_release_resource(dev, SYS_RES_MEMORY, tdfx_info->romrid, + tdfx_info->romrange); } /* Though it is safe to leave the WRCOMB support since the @@ -557,7 +573,8 @@ break; case PCI_ROM_BASE_FREEBSD: if(piod->size != 4) return -EINVAL; - break; + copyout(&tdfx_info->rom, piod->value, piod->size); + return 0; case SST1_PCI_SPECIAL1_FREEBSD: if(piod->size != 4) return -EINVAL; break;