Index: dev/ichsmb/ichsmb_pci.c =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/dev/ichsmb/ichsmb_pci.c,v retrieving revision 1.3 diff -u -r1.3 ichsmb_pci.c --- dev/ichsmb/ichsmb_pci.c 2002/02/08 16:52:49 1.3 +++ dev/ichsmb/ichsmb_pci.c 2002/02/12 20:06:02 @@ -67,6 +67,7 @@ #define ID_81801AA 0x24138086 #define ID_81801AB 0x24238086 #define ID_82801BA 0x24438086 +#define ID_82801CA 0x24838086 #define PCIS_SERIALBUS_SMBUS_PROGIF 0x00 @@ -121,6 +122,9 @@ break; case ID_82801BA: device_set_desc(dev, "Intel 82801BA (ICH2) SMBus controller"); + break; + case ID_82801CA: + device_set_desc(dev, "Intel 82801CA (ICH3) SMBus controller"); break; default: if (pci_get_class(dev) == PCIC_SERIALBUS Index: dev/sound/pcm/ac97.c =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/dev/sound/pcm/ac97.c,v retrieving revision 1.1.1.6 diff -u -r1.1.1.6 ac97.c --- dev/sound/pcm/ac97.c 2002/02/07 01:30:34 1.1.1.6 +++ dev/sound/pcm/ac97.c 2002/02/12 20:06:06 @@ -98,6 +98,8 @@ { 0x43525931, 0, "Cirrus Logic CS4299A" }, { 0x43525933, 0, "Cirrus Logic CS4299C" }, { 0x43525934, 0, "Cirrus Logic CS4299D" }, + { 0x43525935, 0, "Cirrus Logic CS4299K" }, + { 0x43525936, 0, "Cirrus Logic CS4299L" }, { 0x43525941, 0, "Cirrus Logic CS4201A" }, { 0x43525951, 0, "Cirrus Logic CS4205A" }, { 0x43525961, 0, "Cirrus Logic CS4291A" }, @@ -369,7 +371,13 @@ wrcd(codec, AC97_REG_RESET, 0); DELAY(100000); wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000); - + wrcd(codec, AC97_REG_GEN, 0); + DELAY(200000); + i = rdcd(codec, AC97_REG_POWER); + if ((i & 0x0f) != 0x0f) { + device_printf(codec->dev, + "ac97 analog subsection not ready [%x]\n", i); + } i = rdcd(codec, AC97_REG_RESET); codec->caps = i & 0x03ff; codec->se = (i & 0x7c00) >> 10; @@ -464,6 +472,13 @@ wrcd(codec, AC97_REG_RESET, 0); DELAY(100000); wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000); + wrcd(codec, AC97_REG_GEN, 0); + DELAY(200000); + i = rdcd(codec, AC97_REG_POWER); + if ((i & 0x0f) != 0x0f) { + device_printf(codec->dev, + "ac97 analog subsection not ready [%x]\n", i); + } i = rdcd(codec, AC97_REG_RESET); if (!codec->noext) { Index: dev/sound/pcm/buffer.c =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/dev/sound/pcm/buffer.c,v retrieving revision 1.1.1.2 diff -u -r1.1.1.2 buffer.c --- dev/sound/pcm/buffer.c 2001/09/25 05:03:28 1.1.1.2 +++ dev/sound/pcm/buffer.c 2002/02/12 20:06:06 @@ -218,6 +218,28 @@ } void +sndbuf_padsilence(struct snd_dbuf *b, unsigned int length) +{ + int i; + u_char data, *p; + unsigned int len = length; + + if (b->fmt & AFMT_SIGNED) + data = 0x00; + else + data = 0x80; + + i = sndbuf_getfreeptr(b); + p = sndbuf_getbuf(b); + while (len) { + p[i++] = data; + len--; + if (i >= b->bufsize) i = 0; + } + b->rl += length; +} + +void sndbuf_reset(struct snd_dbuf *b) { b->hp = 0; Index: dev/sound/pcm/buffer.h =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/dev/sound/pcm/buffer.h,v retrieving revision 1.1.1.2 diff -u -r1.1.1.2 buffer.h --- dev/sound/pcm/buffer.h 2001/09/25 05:03:29 1.1.1.2 +++ dev/sound/pcm/buffer.h 2002/02/12 20:06:06 @@ -46,6 +46,7 @@ void sndbuf_reset(struct snd_dbuf *b); void sndbuf_clear(struct snd_dbuf *b, unsigned int length); void sndbuf_fillsilence(struct snd_dbuf *b); +void sndbuf_padsilence(struct snd_dbuf *b, unsigned int length); u_int32_t sndbuf_getfmt(struct snd_dbuf *b); int sndbuf_setfmt(struct snd_dbuf *b, u_int32_t fmt); Index: dev/sound/pcm/channel.c =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/dev/sound/pcm/channel.c,v retrieving revision 1.1.1.6 diff -u -r1.1.1.6 channel.c --- dev/sound/pcm/channel.c 2002/02/07 01:30:35 1.1.1.6 +++ dev/sound/pcm/channel.c 2002/02/12 20:06:06 @@ -562,8 +562,15 @@ KASSERT(c->direction == PCMDIR_PLAY, ("chn_wrupdate on bad channel")); DEB(printf("chn_flush c->flags 0x%08x\n", c->flags)); if (!(c->flags & CHN_F_TRIGGERED)) - return 0; - + if (sndbuf_getready(bs) > 0 && + sndbuf_getready(bs) < sndbuf_getfree(b)) { + /* this is probably a short sound, pad it out with + silence and start the driver playing it. */ + sndbuf_padsilence(bs, sndbuf_getfree(b)); + chn_start(c, 1); + chn_sleep(c, "pcmflu", hz / 10); + } else + return 0; c->flags |= CHN_F_CLOSING; resid = sndbuf_getready(bs) + sndbuf_getready(b); resid_p = resid; Index: pci/pci.c =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/pci/pci.c,v retrieving revision 1.1.1.6 diff -u -r1.1.1.6 pci.c --- pci/pci.c 2002/02/07 01:35:55 1.1.1.6 +++ pci/pci.c 2002/02/12 20:06:45 @@ -1322,6 +1322,7 @@ * peripherals respond oddly to having these bits * enabled. Leave them alone by default. */ +#define PCI_ENABLE_IO_MODES #ifdef PCI_ENABLE_IO_MODES if (type == SYS_RES_IOPORT && !pci_porten(cfg)) { cfg->cmdreg |= PCIM_CMD_PORTEN; Index: pci/pcisupport.c =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/pci/pcisupport.c,v retrieving revision 1.3 diff -u -r1.3 pcisupport.c --- pci/pcisupport.c 2002/02/08 16:52:50 1.3 +++ pci/pcisupport.c 2002/02/12 20:06:46 @@ -692,6 +692,10 @@ return ("Intel 82801AB (ICH0) Hub to PCI bridge"); case 0x244e8086: return ("Intel 82801BA/BAM (ICH2) Hub to PCI bridge"); + case 0x24488086: + return ("Intel 82801CA/CAM (ICH3) PCI to PCI bridge"); + case 0x35768086: + return ("Intel 82830MP Host to AGP bridge"); /* VLSI -- vendor 0x1004 */ case 0x01021004: @@ -898,6 +902,8 @@ return ("Intel 82801AB (ICH0) PCI to LPC bridge"); case 0x24408086: return ("Intel 82801BA/BAM (ICH2) PCI to LPC bridge"); + case 0x248C8086: + return ("Intel 82801CA/CAM (ICH3) PCI to LPC bridge"); /* VLSI -- vendor 0x1004 */ case 0x00061004: @@ -1043,6 +1049,12 @@ return ("Intel 82801BA/BAM (ICH2) USB controller USB-A"); case 0x24448086: return ("Intel 82801BA/BAM (ICH2) USB controller USB-B"); + case 0x24828086: + return ("Intel 82801CA/CAM (ICH3) USB controller USB-A"); + case 0x24848086: + return ("Intel 82801CA/CAM (ICH3) USB controller USB-B"); + case 0x24878086: + return ("Intel 82801CA/CAM (ICH3) USB controller USB-C"); /* VIA Technologies -- vendor 0x1106 (0x1107 on the Apollo Master) */ case 0x30381106: @@ -1223,6 +1235,9 @@ return ("Intel 82801AA (ICH) AC'97 Audio Controller"); case 0x24258086: return ("Intel 82801AB (ICH0) AC'97 Audio Controller"); + case 0x24858086: + return ("Intel 82801CA (ICH3) AC'97 Audio Controller"); + break; /* Sony -- vendor 0x104d */ case 0x8009104d: @@ -1526,6 +1541,8 @@ chip = "Mobility-1"; break; case 0x4c52: chip = "RageMobility-P/M"; break; + case 0x4c59: + chip = "RadeonMobility"; break; case 0x475a: chip = "Mach64-GZ"; break; case 0x5245: Index: pci/uhci_pci.c =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/pci/uhci_pci.c,v retrieving revision 1.3 diff -u -r1.3 uhci_pci.c --- pci/uhci_pci.c 2002/02/08 16:52:50 1.3 +++ pci/uhci_pci.c 2002/02/12 20:06:46 @@ -91,6 +91,12 @@ static const char *uhci_device_ich2_a = "Intel 82801BA/BAM (ICH2) USB controller USB-A"; #define PCI_UHCI_DEVICEID_ICH2_B 0x24448086 static const char *uhci_device_ich2_b = "Intel 82801BA/BAM (ICH2) USB controller USB-B"; +#define PCI_UHCI_DEVICEID_ICH3_A 0x24828086 +static const char *uhci_device_ich3_a = "Intel 82801CA/CAM (ICH3) USB controller USB-A"; +#define PCI_UHCI_DEVICEID_ICH3_B 0x24848086 +static const char *uhci_device_ich3_b = "Intel 82801CA/CAM (ICH3) USB controller USB-B"; +#define PCI_UHCI_DEVICEID_ICH3_C 0x24878086 +static const char *uhci_device_ich3_c = "Intel 82801CA/CAM (ICH3) USB controller USB-C"; #define PCI_UHCI_DEVICEID_440MX 0x719a8086 static const char *uhci_device_440mx = "Intel 82443MX USB controller"; #define PCI_UHCI_DEVICEID_VT83C572 0x30381106 @@ -149,6 +155,12 @@ return (uhci_device_ich2_a); } else if (device_id == PCI_UHCI_DEVICEID_ICH2_B) { return (uhci_device_ich2_b); + } else if (device_id == PCI_UHCI_DEVICEID_ICH3_A) { + return (uhci_device_ich3_a); + } else if (device_id == PCI_UHCI_DEVICEID_ICH3_B) { + return (uhci_device_ich3_b); + } else if (device_id == PCI_UHCI_DEVICEID_ICH3_C) { + return (uhci_device_ich3_c); } else if (device_id == PCI_UHCI_DEVICEID_440MX) { return (uhci_device_440mx); } else if (device_id == PCI_UHCI_DEVICEID_VT83C572) { @@ -238,6 +250,18 @@ break; case PCI_UHCI_DEVICEID_ICH2_B: device_set_desc(sc->sc_bus.bdev, uhci_device_ich2_b); + sprintf(sc->sc_vendor, "Intel"); + break; + case PCI_UHCI_DEVICEID_ICH3_A: + device_set_desc(sc->sc_bus.bdev, uhci_device_ich3_a); + sprintf(sc->sc_vendor, "Intel"); + break; + case PCI_UHCI_DEVICEID_ICH3_B: + device_set_desc(sc->sc_bus.bdev, uhci_device_ich3_b); + sprintf(sc->sc_vendor, "Intel"); + break; + case PCI_UHCI_DEVICEID_ICH3_C: + device_set_desc(sc->sc_bus.bdev, uhci_device_ich3_c); sprintf(sc->sc_vendor, "Intel"); break; case PCI_UHCI_DEVICEID_440MX: