Date: Sun, 27 Apr 2003 15:44:24 -0700 (PDT) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 29899 for review Message-ID: <200304272244.h3RMiO2S069114@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=29899 Change 29899 by marcel@marcel_pluto2 on 2003/04/27 15:43:34 Step 2: Use the right field from the FADT table to get the hardware timer address. The ACPI CA code converts v1.x tables into v2 tables so we don't have to worry about it outselves. Strangely enough the timer still doesn't seem to work. So I guess a step 3 is needed as well. This isn't wrong AFAICT, so let's get this in... Affected files ... .. //depot/projects/ia64/sys/dev/acpica/acpi_timer.c#10 edit Differences ... ==== //depot/projects/ia64/sys/dev/acpica/acpi_timer.c#10 (text+ko) ==== @@ -149,7 +149,8 @@ { device_t dev; char desc[40]; - int rid, i, j; + u_long rlen, rstart; + int i, j, rid, rtype; ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); @@ -164,10 +165,17 @@ return_VOID; } acpi_timer_dev = dev; + rid = 0; - bus_set_resource(dev, SYS_RES_IOPORT, rid, AcpiGbl_FADT->V1_PmTmrBlk, sizeof(u_int32_t)); - if ((acpi_timer_reg = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0, 1, RF_ACTIVE)) == NULL) { - device_printf(dev, "couldn't allocate I/O resource (port 0x%x)\n", AcpiGbl_FADT->V1_PmTmrBlk); + rlen = 3 + AcpiGbl_FADT->TmrValExt; /* 24 or 32 bit timers. */ + rtype = (AcpiGbl_FADT->XPmTmrBlk.AddressSpaceId) + ? SYS_RES_IOPORT : SYS_RES_MEMORY; + rstart = AcpiGbl_FADT->XPmTmrBlk.Address; + bus_set_resource(dev, rtype, rid, rstart, 4); + acpi_timer_reg = bus_alloc_resource(dev, rtype, &rid, 0, ~0, 1, RF_ACTIVE); + if (acpi_timer_reg == NULL) { + device_printf(dev, "couldn't allocate I/O resource (%s 0x%lx)\n", + (rtype == SYS_RES_IOPORT) ? "port" : "mem", rstart); return_VOID; } if (testenv("debug.acpi.timer_test")) @@ -186,7 +194,7 @@ } tc_init(&acpi_timer_timecounter); - sprintf(desc, "%d-bit timer at 3.579545MHz", AcpiGbl_FADT->TmrValExt ? 32 : 24); + sprintf(desc, "%d-bit timer at 3.579545MHz", (int)(rlen << 3)); device_set_desc_copy(dev, desc); return_VOID;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200304272244.h3RMiO2S069114>