This patch is made by Masanori Kanaoka. Slightly cleaned up by me.
Index: arch/i386/acpi/vald_acpi.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/acpi/vald_acpi.c,v
retrieving revision 1.5
diff -u -r1.5 vald_acpi.c
--- arch/i386/acpi/vald_acpi.c 2002/10/02 05:47:11 1.5
+++ arch/i386/acpi/vald_acpi.c 2003/03/30 09:59:44
@@ -447,9 +447,17 @@
}
}
if (sc->sc_ac_status == 1) /* AC adaptor on when attach */
+#ifndef LIBRETTO
sc->lcd_index = sc->lcd_num -1; /* MAX Brightness */
+#else
+ sc->lcd_index = 3; /* MAX Brightness */
+#endif
else
+#ifndef LIBRETTO
sc->lcd_index = 3;
+#else
+ sc->lcd_index = 2;
+#endif
#ifdef ACPI_DEBUG
pi = sc->lcd_level;
Index: arch/i386/i386/autoconf.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/i386/autoconf.c,v
retrieving revision 1.68
diff -u -r1.68 autoconf.c
--- arch/i386/i386/autoconf.c 2003/03/22 13:05:26 1.68
+++ arch/i386/i386/autoconf.c 2003/03/30 09:59:45
@@ -99,12 +99,14 @@
#include <machine/bios32.h>
#endif
+#ifndef LIBRETTO
#include "opt_pcibios.h"
#ifdef PCIBIOS
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
#include <i386/pci/pcibios.h>
#endif
+#endif /* LIBRETTO */
#include "opt_kvm86.h"
#ifdef KVM86
@@ -126,9 +128,11 @@
#if NBIOS32 > 0
bios32_init();
#endif
+#ifndef LIBRETTO
#ifdef PCIBIOS
pcibios_init();
#endif
+#endif /* LIBRETTO */
/* kvm86 needs a TSS */
i386_proc0_tss_ldt_init();
Index: arch/i386/i386/machdep.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/i386/machdep.c,v
retrieving revision 1.517
diff -u -r1.517 machdep.c
--- arch/i386/i386/machdep.c 2003/03/25 19:37:16 1.517
+++ arch/i386/i386/machdep.c 2003/03/30 09:59:48
@@ -1641,6 +1641,13 @@
}
}
#endif /* ! REALBASEMEM && ! REALEXTMEM */
+
+#ifdef LIBRETTO
+#ifdef DEBUG_MEMLOAD
+ printf("mem_cluster_count: %d\n", mem_cluster_cnt);
+#endif
+#endif
+
/*
* If the loop above didn't find any valid segment, fall back to
* former code.
Index: arch/i386/i386/mainbus.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/i386/mainbus.c,v
retrieving revision 1.50
diff -u -r1.50 mainbus.c
--- arch/i386/i386/mainbus.c 2003/03/04 01:06:38 1.50
+++ arch/i386/i386/mainbus.c 2003/03/30 09:59:48
@@ -55,6 +55,15 @@
#include "acpi.h"
#include "vesabios.h"
+#ifdef LIBRETTO
+#include "opt_pcibios.h"
+#ifdef PCIBIOS
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
+#include <i386/pci/pcibios.h>
+#endif
+#endif /* LIBRETTO */
+
#include "opt_mpacpi.h"
#include "opt_mpbios.h"
@@ -278,6 +287,12 @@
config_found(self, &mba.mba_paa, mainbus_print);
}
#endif
+
+#ifdef LIBRETTO
+#ifdef PCIBIOS
+ pcibios_init();
+#endif
+#endif /* LIBRETTO */
/*
* XXX Note also that the presence of a PCI bus should
Index: arch/i386/pci/pci_intr_fixup.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/pci/pci_intr_fixup.c,v
retrieving revision 1.23
diff -u -r1.23 pci_intr_fixup.c
--- arch/i386/pci/pci_intr_fixup.c 2003/02/26 22:23:08 1.23
+++ arch/i386/pci/pci_intr_fixup.c 2003/03/30 09:59:49
@@ -571,10 +571,20 @@
{
int i, bit;
+#ifdef LIBRETTO
+ /* XXX: Force set Level for some irq (such as ACPI SCI) */
+ *pciirq |= pcibios_force_level_bitmap;
+#endif /* LIBRETTO */
+
for (i = 0, bit = 1; i < 16; i++, bit <<= 1) {
if ((*pciirq & bit) == 0)
(void) pciintr_icu_set_trigger(pciintr_icu_tag,
pciintr_icu_handle, i, IST_EDGE);
+#ifdef LIBRETTO
+ else if (pcibios_force_level_bitmap & bit)
+ (void) pciintr_icu_set_trigger(pciintr_icu_tag,
+ pciintr_icu_handle, i, IST_LEVEL);
+#endif /* LIBRETTO */
}
return (0);
Index: arch/i386/pci/pcibios.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/pci/pcibios.c,v
retrieving revision 1.11
diff -u -r1.11 pcibios.c
--- arch/i386/pci/pcibios.c 2003/02/26 22:23:09 1.11
+++ arch/i386/pci/pcibios.c 2003/03/30 09:59:49
@@ -83,6 +83,10 @@
#include <dev/pci/pcivar.h>
#include <dev/pci/pcidevs.h>
+#ifdef LIBRETTO
+#include <dev/acpi/acpivar.h>
+#endif /* LIBRETTO */
+
#include <i386/pci/pcibios.h>
#ifdef PCIBIOS_INTR_FIXUP
#include <i386/pci/pci_intr_fixup.h>
@@ -126,6 +130,19 @@
#define PCI_IRQ_TABLE_START 0xf0000
#define PCI_IRQ_TABLE_END 0xfffff
+#ifdef LIBRETTO
+/* for Libretto L2/L3 hack */
+void pcibios_fixup_pir_table __P((void));
+void pcibios_fixup_pir_table_mask __P((struct pcibios_linkmap *));
+
+struct pcibios_linkmap pir_mask[] = {
+ { 2, 0x0040 },
+ { 7, 0x0080 },
+ { 8, 0x0020 },
+ { 0, 0x0000 }
+};
+#endif /* LIBRETTO */
+
static void pci_bridge_hook(pci_chipset_tag_t, pcitag_t, void *);
struct pci_bridge_hook_arg {
void (*func)(pci_chipset_tag_t, pcitag_t, void *);
@@ -237,7 +254,62 @@
u_int16_t tablesize;
u_int8_t rev_maj, rev_min;
int i;
+#ifdef LIBRETTO
+ struct pcibios_intr_routing *pir;
+ struct acpi_intr *ai;
+#endif /* LIBRETTO */
+
+#ifdef LIBRETTO
+ /*
+ * XXXlibretto
+ * For Libretto L series, we firstly try using ACPI PRT.
+ * This is done when the ACPI_PIR_GET option is set.
+ */
+ pcibios_force_level_bitmap = 0;
+ if (acpi_pir_info != NULL && acpi_pir_info->api_nentries != 0) {
+ pcibios_pir_table = malloc(acpi_pir_info->api_nentries * 16,
+ M_DEVBUF, M_NOWAIT);
+ if (pcibios_pir_table == NULL) {
+ printf("pcibios_pir_init: no memory for $PIR\n");
+ return;
+ }
+ for (ai = acpi_pir_info->api_intr, pir = pcibios_pir_table;
+ ai;
+ ai = ai->ai_next, pir++) {
+ pir->bus = ai->ai_bus;
+ pir->device = (ai->ai_dev & 0x1f) << 3;
+ for (i = 0; i < 4; i++) {
+ if (i == ai->ai_pin) {
+ pir->linkmap[i].link = ai->ai_link;
+ pir->linkmap[i].bitmap = ai->ai_bitmap;
+ } else {
+ pir->linkmap[i].link = 0;
+ pir->linkmap[i].bitmap = 0;
+ }
+ }
+ pir->slot = 0;
+ pir->reserved = 0;
+ }
+ pcibios_pir_table_nentries = acpi_pir_info->api_nentries;
+ pcibios_force_level_bitmap = (1 << acpi_pir_info->api_sci_irq);
+ printf("\nUsing ACPI PRT information.\n");
+
+ /*
+ * XXXlibretto
+ * For Libretto L2/L3.
+ */
+ pcibios_fixup_pir_table();
+#ifdef PCIINTR_DEBUG
+ pcibios_print_pir_table();
+#endif
+ return;
+ }
+ /*
+ * XXXlibretto
+ * If no ACPI PRT is found, try using $PIR table.
+ */
+#endif /* LIBRETTO */
for (pa = PCI_IRQ_TABLE_START; pa < PCI_IRQ_TABLE_END; pa += 16) {
p = (caddr_t)ISA_HOLE_VADDR(pa);
if (*(int *)p != BIOS32_MAKESIG('$', 'P', 'I', 'R')) {
@@ -301,6 +373,10 @@
}
printf("\n");
pcibios_print_exclirq();
+#ifdef LIBRETTO
+ /* for Libretto L2/L3 hack */
+ pcibios_fixup_pir_table();
+#endif /* LIBRETTO */
#ifdef PCIINTR_DEBUG
pcibios_print_pir_table();
#endif
@@ -333,6 +409,10 @@
printf("PCI BIOS has %d Interrupt Routing table entries\n",
pcibios_pir_table_nentries);
pcibios_print_exclirq();
+#ifdef LIBRETTO
+ /* for Libretto L2/L3 hack */
+ pcibios_fixup_pir_table();
+#endif
#ifdef PCIINTR_DEBUG
pcibios_print_pir_table();
#endif
@@ -477,6 +557,35 @@
printf("\n");
}
}
+
+#ifdef LIBRETTO
+/* for Libretto L2/L3 hack */
+void
+pcibios_fixup_pir_table()
+{
+ struct pcibios_linkmap *m;
+
+ for (m = pir_mask; m->link != 0; m++)
+ pcibios_fixup_pir_table_mask(m);
+}
+
+void
+pcibios_fixup_pir_table_mask(mask)
+ struct pcibios_linkmap *mask;
+{
+ int i, j;
+
+ for (i = 0; i < pcibios_pir_table_nentries; i++) {
+ for (j = 0; j < 4; j++) {
+ if (pcibios_pir_table[i].linkmap[j].link ==
+ mask->link) {
+ pcibios_pir_table[i].linkmap[j].bitmap
+ &= mask->bitmap;
+ }
+ }
+ }
+}
+#endif /* LIBRETTO */
#ifdef PCIINTR_DEBUG
void
Index: arch/i386/pci/pcibios.h
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/pci/pcibios.h,v
retrieving revision 1.5
diff -u -r1.5 pcibios.h
--- arch/i386/pci/pcibios.h 2002/01/22 15:07:27 1.5
+++ arch/i386/pci/pcibios.h 2003/03/30 09:59:49
@@ -100,6 +100,10 @@
void pci_bridge_foreach(pci_chipset_tag_t, int, int,
void (*) (pci_chipset_tag_t, pcitag_t, void *), void *);
+#ifdef LIBRETTO
+u_int16_t pcibios_force_level_bitmap;
+#endif
+
#ifdef PCIBIOSVERBOSE
extern int pcibiosverbose;
Index: dev/acpi/acpi.c
===================================================================
RCS file: /cvsroot/src/sys/dev/acpi/acpi.c,v
retrieving revision 1.33
diff -u -r1.33 acpi.c
--- dev/acpi/acpi.c 2003/03/05 23:00:56 1.33
+++ dev/acpi/acpi.c 2003/03/30 09:59:52
@@ -60,18 +60,32 @@
#include <dev/acpi/acpidevs_data.h>
#endif
+#ifndef LIBRETTO
#ifndef ACPI_PCI_FIXUP
#define ACPI_PCI_FIXUP 1
#endif
+#else /* LIBRETTO */
+#ifndef ACPI_PCI_GET
+#define ACPI_PCI_GET 1
+#endif
+#endif /* LIBRETTO */
#ifndef ACPI_ACTIVATE_DEV
#define ACPI_ACTIVATE_DEV 0
#endif
+#ifndef LIBRETTO
#if ACPI_PCI_FIXUP
#include <dev/acpi/acpica/Subsystem/acnamesp.h> /* AcpiNsGetNodeByPath() */
#include <dev/pci/pcidevs.h>
#endif
+#else
+#if ACPI_PCI_GET
+#include <dev/acpi/acpica/Subsystem/acresrc.h>
+#include <dev/acpi/acpica/Subsystem/acnamesp.h> /* AcpiNsGetNodeByPath() */
+#include <dev/pci/pcidevs.h>
+#endif
+#endif /* LIBRETTO */
MALLOC_DECLARE(M_ACPI);
@@ -125,12 +139,18 @@
ACPI_STATUS acpi_make_devnode(ACPI_HANDLE, UINT32, void *, void **);
void acpi_enable_fixed_events(struct acpi_softc *);
+#ifndef LIBRETTO
#if ACPI_PCI_FIXUP
void acpi_pci_fixup(struct acpi_softc *);
#endif
#if ACPI_PCI_FIXUP || ACPI_ACTIVATE_DEV
ACPI_STATUS acpi_allocate_resources(ACPI_HANDLE handle);
#endif
+#else /* LIBRETTO */
+#if ACPI_PCI_GET
+void acpi_pir_get(struct acpi_softc *);
+#endif
+#endif /* LIBRETTO */
/*
* acpi_probe:
@@ -311,12 +331,19 @@
*/
acpi_enable_fixed_events(sc);
+#ifndef LIBRETTO
/*
* Fix up PCI devices.
*/
#if ACPI_PCI_FIXUP
acpi_pci_fixup(sc);
#endif
+#else /* LIBRETTO */
+#if ACPI_PIR_GET
+ /* Get PCI IRQ ROUTING table. */
+ acpi_pir_get(sc);
+#endif /* ACPI_PIR_GET */
+#endif /* LIBRETTO */
/*
* Scan the namespace and build our device tree.
@@ -810,6 +837,15 @@
bufp->Length = ACPI_ALLOCATE_BUFFER;
rv = AcpiEvaluateObject(handle, path, NULL, bufp);
+#ifdef MY
+ /* XXXuebayasi */
+ if (rv == AE_BUFFER_OVERFLOW) {
+ bufp->Pointer = AcpiOsAllocate(bufp->Length);
+ if (bufp->Pointer == NULL)
+ return (AE_NO_MEMORY);
+ rv = AcpiEvaluateObject(handle, path, NULL, bufp);
+ }
+#endif /* MY */
return (rv);
}
@@ -986,6 +1022,7 @@
return (ret);
}
+#ifdef LIBRETTO
#if ACPI_PCI_FIXUP
ACPI_STATUS acpi_pci_fixup_bus(ACPI_HANDLE, UINT32, void *, void **);
/*
@@ -1010,7 +1047,36 @@
AcpiWalkNamespace(ACPI_TYPE_DEVICE, parent, 100,
acpi_pci_fixup_bus, sc, NULL);
}
+#endif /* ACPI_PCI_FIXUP */
+#else /* LIBRETTO */
+#if ACPI_PIR_GET
+ACPI_STATUS acpi_pir_get_bus(ACPI_HANDLE, UINT32, void *, void **);
+/*
+ * XXXlibretto
+ * acpi_pir_get:
+ *
+ * Get the _PTR (PCI Routing Table), and create an ACPI PIR table
+ * which PCIBIOS_INTR_FIXUP will use later.
+ */
+void
+acpi_pir_get(struct acpi_softc *sc)
+{
+ ACPI_HANDLE parent;
+
+#ifdef ACPI_DEBUG
+ printf("acpi_pir_get starts:\n");
+#endif
+ if (AcpiGetHandle(ACPI_ROOT_OBJECT, "\\_SB_", &parent) != AE_OK)
+ return;
+ sc->sc_pci_bus = 0;
+ AcpiWalkNamespace(ACPI_TYPE_DEVICE, parent, 100,
+ acpi_pir_get_bus, sc, NULL);
+}
+#endif /* ACPI_PIR_GET */
+#endif /* LIBRETTO */
+#ifndef LIBRETTO
+#if ACPI_PCI_FIXUP
static ACPI_HANDLE
acpi_get_node(char *name)
{
@@ -1152,7 +1218,7 @@
sc->sc_pci_bus, level);
#endif
- for (Buffer = buf.Pointer; ; Buffer += PrtElement->Length) {
+ for (Buffer = buf.Pointer;; Buffer += PrtElement->Length) {
PrtElement = (ACPI_PCI_ROUTING_TABLE *)Buffer;
if (PrtElement->Length == 0)
break;
@@ -1192,7 +1258,121 @@
return (AE_OK);
}
#endif /* ACPI_PCI_FIXUP */
+#else /* LIBRETTO */
+#if ACPI_PIR_GET
+static UINT16
+acpi_get_bitmap(ACPI_HANDLE handle)
+{
+ ACPI_BUFFER bufp, bufc;
+ ACPI_STATUS rv;
+ ACPI_RESOURCE *resp, *resc;
+ ACPI_RESOURCE_IRQ *irq;
+ UINT16 i, bitmap = 0;
+
+ rv = acpi_get(handle, &bufp, AcpiGetPossibleResources);
+ if (ACPI_FAILURE(rv))
+ goto out;
+ rv = acpi_get(handle, &bufc, AcpiGetCurrentResources);
+ if (ACPI_FAILURE(rv))
+ goto out1;
+
+ resp = bufp.Pointer;
+ resc = bufc.Pointer;
+
+ /*
+ * If current NumberOfInterrupt is 1, we use it.
+ * Else we use possible.
+ */
+ irq = (ACPI_RESOURCE_IRQ *)&resc->Data;
+ if (irq->NumberOfInterrupts != 1)
+ irq = (ACPI_RESOURCE_IRQ *)&resp->Data;
+
+ for (i = 0; i < irq->NumberOfInterrupts; i++)
+ bitmap |= (1 << irq->Interrupts[i]);
+
+ free(bufc.Pointer, M_DEVBUF);
+out1:
+ free(bufp.Pointer, M_DEVBUF);
+out:
+ return (bitmap);
+}
+
+ACPI_STATUS
+acpi_pir_get_bus(ACPI_HANDLE handle, UINT32 level, void *context,
+ void **status)
+{
+ struct acpi_softc *sc = context;
+ ACPI_STATUS rv;
+ ACPI_BUFFER buf;
+ UINT8 *Buffer;
+ ACPI_PCI_ROUTING_TABLE *PrtElement;
+ ACPI_HANDLE link;
+ char LastChar;
+ UINT16 bitmap;
+ struct acpi_intr *ai;
+
+ rv = acpi_get(handle, &buf, AcpiGetIrqRoutingTable);
+ if (ACPI_FAILURE(rv))
+ return (AE_OK);
+
+ acpi_pir_info = malloc(sizeof(struct acpi_pir), M_DEVBUF, M_NOWAIT);
+ if (acpi_pir_info == NULL) {
+ printf("No memory for acpi_pir_info\n");
+ return (AE_OK);
+ }
+ acpi_pir_info->api_intr = NULL;
+ acpi_pir_info->api_nentries = 0;
+ acpi_pir_info->api_sci_irq = AcpiGbl_FADT->SciInt;
+
+ for (Buffer = buf.Pointer;; Buffer += PrtElement->Length) {
+ PrtElement = (ACPI_PCI_ROUTING_TABLE *)Buffer;
+ if (PrtElement->Length == 0)
+ break;
+ if (PrtElement->Source == NULL)
+ continue;
+
+ link = acpi_get_node(PrtElement->Source);
+ if (link == NULL)
+ continue;
+ bitmap = acpi_get_bitmap(link);
+
+ LastChar = PrtElement->Source[strlen(PrtElement->Source) - 1];
+ if (LastChar >= 'A' && LastChar <= 'Z')
+ LastChar -= '@';
+ else if (LastChar >= '0' && LastChar <= '9')
+ LastChar -= '0';
+
+#ifdef ACPI_DEBUG
+ printf("\tBus: %d Device: %d\n ", sc->sc_pci_bus,
+ (unsigned)PrtElement->Address >> 16);
+ printf("\t\tINT%c: link 0x%02x bitmap 0x%04x\n",
+ PrtElement->Pin + 1 + '@', LastChar, bitmap);
+#endif
+ /* XXX: make pcibios Interface. */
+ ai = malloc(sizeof(*ai), M_DEVBUF, M_NOWAIT);
+ if (ai == NULL) {
+ printf("No memory for ai\n");
+ return (AE_OK);
+ }
+ ai->ai_next = acpi_pir_info->api_intr;
+ ai->ai_bus = sc->sc_pci_bus;
+ ai->ai_dev = (unsigned)PrtElement->Address >> 16;
+ ai->ai_pin = PrtElement->Pin;
+ ai->ai_link = LastChar;
+ ai->ai_bitmap = bitmap;
+ acpi_pir_info->api_intr = ai;
+ acpi_pir_info->api_nentries++;
+ }
+
+ sc->sc_pci_bus++;
+
+ free(buf.Pointer, M_DEVBUF);
+ return (AE_OK);
+}
+#endif /* ACPI_PIR_GET */
+#endif /* LIBRETTO */
+#ifndef LIBRETTO
#if ACPI_PCI_FIXUP || ACPI_ACTIVATE_DEV
/* XXX This very incomplete */
ACPI_STATUS
@@ -1279,3 +1459,4 @@
return rv;
}
#endif /* ACPI_PCI_FIXUP || ACPI_ACTIVATE_DEV */
+#endif /* LIBRETTO */
Index: dev/acpi/acpivar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/acpi/acpivar.h,v
retrieving revision 1.9
diff -u -r1.9 acpivar.h
--- dev/acpi/acpivar.h 2003/02/14 11:05:40 1.9
+++ dev/acpi/acpivar.h 2003/03/30 09:59:52
@@ -268,6 +268,25 @@
struct acpi_irq *acpi_res_irq(struct acpi_resources *, int);
struct acpi_drq *acpi_res_drq(struct acpi_resources *, int);
+#ifdef LIBRETTO
+struct acpi_intr {
+ struct acpi_intr *ai_next;
+ u_int8_t ai_bus;
+ u_int8_t ai_dev;
+ u_int8_t ai_pin;
+ u_int8_t ai_link;
+ u_int16_t ai_bitmap;
+};
+
+struct acpi_pir {
+ struct acpi_intr *api_intr;
+ int api_nentries;
+ int api_sci_irq;
+};
+
+struct acpi_pir *acpi_pir_info;
+#endif /* LIBRETTO */
+
/*
* power state transition
*/
Index: dev/ic/ac97.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/ac97.c,v
retrieving revision 1.41
diff -u -r1.41 ac97.c
--- dev/ic/ac97.c 2003/03/03 02:14:12 1.41
+++ dev/ic/ac97.c 2003/03/30 09:59:54
@@ -658,6 +658,10 @@
#define DPRINTFN(n,x)
#endif
+#ifdef LIBRETTO
+static int ac97_waitthrough;
+#endif
+
void
ac97_read(as, reg, val)
struct ac97_softc *as;
@@ -665,9 +669,15 @@
u_int16_t *val;
{
+#ifndef LIBRETTO
if (as->host_flags & AC97_HOST_DONT_READ &&
(reg != AC97_REG_VENDOR_ID1 && reg != AC97_REG_VENDOR_ID2 &&
reg != AC97_REG_RESET)) {
+#else
+ if (reg != AC97_REG_VENDOR_ID1 &&
+ reg != AC97_REG_VENDOR_ID2 &&
+ reg != AC97_REG_RESET) {
+#endif /* LIBRETTO */
*val = as->shadow_reg[reg >> 1];
return;
}
@@ -684,6 +694,11 @@
u_int16_t val;
{
+#ifdef LIBRETTO
+ if (ac97_waitthrough == 0 && as->shadow_reg[reg >> 1] == val)
+ return (0);
+#endif
+
as->shadow_reg[reg >> 1] = val;
return (as->host_if->write(as->host_if->arg, reg, val));
@@ -697,11 +712,17 @@
const struct ac97_source_info *si;
memset(as->shadow_reg, 0, sizeof(as->shadow_reg));
+#ifdef LIBRETTO
+ ac97_waitthrough = 1;
+#endif
for (idx = 0; idx < SOURCE_INFO_SIZE; idx++) {
si = &source_info[idx];
ac97_write(as, si->reg, si->default_value);
}
+#ifdef LIBRETTO
+ ac97_waitthrough = 0;
+#endif
}
void
@@ -712,10 +733,16 @@
int idx;
const struct ac97_source_info *si;
+#ifdef LIBRETTO
+ ac97_waitthrough = 1;
+#endif
for (idx = 0; idx < SOURCE_INFO_SIZE; idx++) {
si = &source_info[idx];
ac97_write(as, si->reg, as->shadow_reg[si->reg >> 1]);
}
+#ifdef LIBRETTO
+ ac97_waitthrough = 0;
+#endif
}
int