Deleted Added
full compact
csapcm.c (55204) csapcm.c (55320)
1/*-
1/*
2 * Copyright (c) 1999 Seigo Tanimura
3 * All rights reserved.
4 *
5 * Portions of this source are based on cwcealdr.cpp and dhwiface.cpp in
6 * cwcealdr1.zip, the sample sources by Crystal Semiconductor.
7 * Copyright (c) 1996-1998 Crystal Semiconductor Corp.
8 *
9 * Redistribution and use in source and binary forms, with or without

--- 12 unchanged lines hidden (view full) ---

22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
2 * Copyright (c) 1999 Seigo Tanimura
3 * All rights reserved.
4 *
5 * Portions of this source are based on cwcealdr.cpp and dhwiface.cpp in
6 * cwcealdr1.zip, the sample sources by Crystal Semiconductor.
7 * Copyright (c) 1996-1998 Crystal Semiconductor Corp.
8 *
9 * Redistribution and use in source and binary forms, with or without

--- 12 unchanged lines hidden (view full) ---

22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * $FreeBSD: head/sys/dev/sound/pci/csapcm.c 55204 1999-12-29 03:46:54Z cg $
30 * $FreeBSD: head/sys/dev/sound/pci/csapcm.c 55320 2000-01-03 02:51:16Z tanimura $
31 */
32
33#include <sys/soundcard.h>
34#include <dev/sound/pcm/sound.h>
35#include <dev/sound/pcm/ac97.h>
36#include <dev/sound/chip.h>
37#include <dev/sound/pci/csareg.h>
38#include <dev/sound/pci/csavar.h>

--- 11 unchanged lines hidden (view full) ---

50 int dir;
51 u_int32_t fmt;
52};
53
54struct csa_info {
55 csa_res res; /* resource */
56 void *ih; /* Interrupt cookie */
57 bus_dma_tag_t parent_dmat; /* DMA tag */
31 */
32
33#include <sys/soundcard.h>
34#include <dev/sound/pcm/sound.h>
35#include <dev/sound/pcm/ac97.h>
36#include <dev/sound/chip.h>
37#include <dev/sound/pci/csareg.h>
38#include <dev/sound/pci/csavar.h>

--- 11 unchanged lines hidden (view full) ---

50 int dir;
51 u_int32_t fmt;
52};
53
54struct csa_info {
55 csa_res res; /* resource */
56 void *ih; /* Interrupt cookie */
57 bus_dma_tag_t parent_dmat; /* DMA tag */
58 struct csa_bridgeinfo *binfo; /* The state of the parent. */
58
59 /* Contents of board's registers */
60 u_long pfie;
61 u_long pctl;
62 u_long cctl;
63 struct csa_chinfo pch, rch;
64};
65

--- 367 unchanged lines hidden (view full) ---

433 csa_res *resp;
434 u_long ul;
435
436 resp = &csa->res;
437 ul = csa_readmem(resp, BA1_PCTL);
438 csa->pctl = ul & 0xffff0000;
439 csa_writemem(resp, BA1_PCTL, ul & 0x0000ffff);
440 csa_writemem(resp, BA1_PVOL, 0xffffffff);
59
60 /* Contents of board's registers */
61 u_long pfie;
62 u_long pctl;
63 u_long cctl;
64 struct csa_chinfo pch, rch;
65};
66

--- 367 unchanged lines hidden (view full) ---

434 csa_res *resp;
435 u_long ul;
436
437 resp = &csa->res;
438 ul = csa_readmem(resp, BA1_PCTL);
439 csa->pctl = ul & 0xffff0000;
440 csa_writemem(resp, BA1_PCTL, ul & 0x0000ffff);
441 csa_writemem(resp, BA1_PVOL, 0xffffffff);
442
443 /* Clear the serial fifos. */
444 csa_clearserialfifos(resp);
441}
442
443static void
444csa_stopcapturedma(struct csa_info *csa)
445{
446 csa_res *resp;
447 u_long ul;
448

--- 165 unchanged lines hidden (view full) ---

614 return (ch->dir == PCMDIR_PLAY)? &csa_playcaps : &csa_reccaps;
615}
616
617/* The interrupt handler */
618static void
619csa_intr (void *p)
620{
621 struct csa_info *csa = p;
445}
446
447static void
448csa_stopcapturedma(struct csa_info *csa)
449{
450 csa_res *resp;
451 u_long ul;
452

--- 165 unchanged lines hidden (view full) ---

618 return (ch->dir == PCMDIR_PLAY)? &csa_playcaps : &csa_reccaps;
619}
620
621/* The interrupt handler */
622static void
623csa_intr (void *p)
624{
625 struct csa_info *csa = p;
622 csa_res *resp;
623 u_int hisr;
624
626
625 resp = &csa->res;
626
627 /* Is this interrupt for us? */
628 /* XXX The parent device should handle this. */
629 hisr = csa_readio(resp, BA0_HISR);
630 if ((hisr & ~HISR_INTENA) == 0) {
631 /* Throw an eoi. */
632 csa_writeio(resp, BA0_HICR, HICR_IEV | HICR_CHGM);
633 return;
634 }
635
636 if ((hisr & HISR_VC0) != 0)
627 if ((csa->binfo->hisr & HISR_VC0) != 0)
637 chn_intr(csa->pch.channel);
628 chn_intr(csa->pch.channel);
638 if ((hisr & HISR_VC1) != 0)
629 if ((csa->binfo->hisr & HISR_VC1) != 0)
639 chn_intr(csa->rch.channel);
630 chn_intr(csa->rch.channel);
640
641 /* Throw an eoi. */
642 csa_writeio(resp, BA0_HICR, HICR_IEV | HICR_CHGM);
643}
644
645/* -------------------------------------------------------------------- */
646
647/*
648 * Probe and attach the card
649 */
650

--- 100 unchanged lines hidden (view full) ---

751pcmcsa_attach(device_t dev)
752{
753 snddev_info *devinfo;
754 struct csa_info *csa;
755 csa_res *resp;
756 int unit;
757 char status[SND_STATUSLEN];
758 struct ac97_info *codec;
631}
632
633/* -------------------------------------------------------------------- */
634
635/*
636 * Probe and attach the card
637 */
638

--- 100 unchanged lines hidden (view full) ---

739pcmcsa_attach(device_t dev)
740{
741 snddev_info *devinfo;
742 struct csa_info *csa;
743 csa_res *resp;
744 int unit;
745 char status[SND_STATUSLEN];
746 struct ac97_info *codec;
747 struct sndcard_func *func;
759
760 devinfo = device_get_softc(dev);
761 csa = malloc(sizeof(*csa), M_DEVBUF, M_NOWAIT);
762 if (csa == NULL)
763 return (ENOMEM);
764 bzero(csa, sizeof(*csa));
765 unit = device_get_unit(dev);
748
749 devinfo = device_get_softc(dev);
750 csa = malloc(sizeof(*csa), M_DEVBUF, M_NOWAIT);
751 if (csa == NULL)
752 return (ENOMEM);
753 bzero(csa, sizeof(*csa));
754 unit = device_get_unit(dev);
755 func = device_get_ivars(dev);
756 csa->binfo = func->varinfo;
766
767 /* Allocate the resources. */
768 resp = &csa->res;
769 resp->io_rid = CS461x_IO_OFFSET;
770 resp->mem_rid = CS461x_MEM_OFFSET;
771 resp->irq_rid = 0;
772 if (csa_allocres(csa, dev)) {
773 csa_releaseres(csa, dev);

--- 11 unchanged lines hidden (view full) ---

785
786 snprintf(status, SND_STATUSLEN, "at irq %ld", rman_get_start(resp->irq));
787
788 /* Enable interrupt. */
789 if (bus_setup_intr(dev, resp->irq, INTR_TYPE_TTY, csa_intr, csa, &csa->ih)) {
790 csa_releaseres(csa, dev);
791 return (ENXIO);
792 }
757
758 /* Allocate the resources. */
759 resp = &csa->res;
760 resp->io_rid = CS461x_IO_OFFSET;
761 resp->mem_rid = CS461x_MEM_OFFSET;
762 resp->irq_rid = 0;
763 if (csa_allocres(csa, dev)) {
764 csa_releaseres(csa, dev);

--- 11 unchanged lines hidden (view full) ---

776
777 snprintf(status, SND_STATUSLEN, "at irq %ld", rman_get_start(resp->irq));
778
779 /* Enable interrupt. */
780 if (bus_setup_intr(dev, resp->irq, INTR_TYPE_TTY, csa_intr, csa, &csa->ih)) {
781 csa_releaseres(csa, dev);
782 return (ENXIO);
783 }
793 if ((csa_readio(resp, BA0_HISR) & HISR_INTENA) == 0)
794 csa_writeio(resp, BA0_HICR, HICR_IEV | HICR_CHGM);
795 csa_writemem(resp, BA1_PFIE, csa_readmem(resp, BA1_PFIE) & ~0x0000f03f);
796 csa_writemem(resp, BA1_CIE, (csa_readmem(resp, BA1_CIE) & ~0x0000003f) | 0x00000001);
797
798 if (pcm_register(dev, csa, 1, 1)) {
799 csa_releaseres(csa, dev);
800 return (ENXIO);
801 }
802 pcm_addchan(dev, PCMDIR_REC, &csa_chantemplate, csa);

--- 45 unchanged lines hidden ---
784 csa_writemem(resp, BA1_PFIE, csa_readmem(resp, BA1_PFIE) & ~0x0000f03f);
785 csa_writemem(resp, BA1_CIE, (csa_readmem(resp, BA1_CIE) & ~0x0000003f) | 0x00000001);
786
787 if (pcm_register(dev, csa, 1, 1)) {
788 csa_releaseres(csa, dev);
789 return (ENXIO);
790 }
791 pcm_addchan(dev, PCMDIR_REC, &csa_chantemplate, csa);

--- 45 unchanged lines hidden ---