diff --git a/repos/dde_bsd/lib/mk/dde_bsd_audio.inc b/repos/dde_bsd/lib/mk/dde_bsd_audio.inc index 1840d97919..9653e62c8d 100644 --- a/repos/dde_bsd/lib/mk/dde_bsd_audio.inc +++ b/repos/dde_bsd/lib/mk/dde_bsd_audio.inc @@ -13,7 +13,7 @@ INC_DIR += $(AUDIO_CONTRIB_DIR) LIBS += dde_bsd_audio_include -SRC_CC += bus.cc dummies.cc driver.cc irq.cc mem.cc misc.cc scheduler.cc timer.cc +SRC_CC += dummies.cc driver.cc irq.cc mem.cc misc.cc scheduler.cc timer.cc SRC_C += bsd_emul.c SRC_S += setjmp.S @@ -30,26 +30,9 @@ CC_C_OPT += -Wno-maybe-uninitialized # enable when debugging #CC_OPT += -DAUDIO_DEBUG -#CC_OPT += -DAC97_DEBUG -#CC_OPT += -DAUICH_DEBUG -#CC_OPT += -DAZALIA_DEBUG -#CC_OPT += -DDIAGNOSTIC # audio interface SRC_C += dev/audio.c - -# AC97 codec -SRC_C += dev/ic/ac97.c - -# HDA driver -SRC_C += dev/pci/azalia.c dev/pci/azalia_codec.c - -# ICH driver -SRC_C += dev/pci/auich.c - -# ES1370 -SRC_C += dev/pci/eap.c - SRC_C += dev/mulaw.c vpath %.c $(AUDIO_CONTRIB_DIR) diff --git a/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.mk b/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.mk new file mode 100644 index 0000000000..6518114a49 --- /dev/null +++ b/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.mk @@ -0,0 +1,49 @@ +LIB_DIR = $(REP_DIR)/src/lib/audio +LIB_INC_DIR = $(LIB_DIR)/include + +AUDIO_CONTRIB_DIR := $(call select_from_ports,dde_bsd)/src/lib/audio + +# +# Set include paths up before adding the dde_bsd_audio_include library +# because it will use INC_DIR += and must be at the end +# +INC_DIR += $(LIB_DIR) +INC_DIR += $(LIB_INC_DIR) +INC_DIR += $(AUDIO_CONTRIB_DIR) + +LIBS += dde_bsd_audio_include + +SRC_C := bsd_emul_pci.c +SRC_CC += pci.cc + +CC_OPT += -Wno-unused-but-set-variable + +# disable builtins +CC_OPT += -fno-builtin-printf -fno-builtin-snprintf -fno-builtin-vsnprintf \ + -fno-builtin-malloc -fno-builtin-free -fno-builtin-log -fno-builtin-log2 + +CC_OPT += -D_KERNEL + +# enable when debugging +#CC_OPT += -DAC97_DEBUG +#CC_OPT += -DAUICH_DEBUG +#CC_OPT += -DAZALIA_DEBUG +#CC_OPT += -DDIAGNOSTIC + +# AC97 codec +SRC_C += dev/ic/ac97.c + +# HDA driver +SRC_C += dev/pci/azalia.c dev/pci/azalia_codec.c + +# ICH driver +SRC_C += dev/pci/auich.c + +# ES1370 +SRC_C += dev/pci/eap.c + +vpath %.c $(AUDIO_CONTRIB_DIR) +vpath %.c $(LIB_DIR) +vpath %.cc $(LIB_DIR) + +# vi: set ft=make : diff --git a/repos/dde_bsd/recipes/src/bsd_audio_drv/content.mk b/repos/dde_bsd/recipes/src/bsd_audio_drv/content.mk index 5be7b89dca..f104af33c5 100644 --- a/repos/dde_bsd/recipes/src/bsd_audio_drv/content.mk +++ b/repos/dde_bsd/recipes/src/bsd_audio_drv/content.mk @@ -1,6 +1,8 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/dde_bsd) -LIB_MK := $(addprefix lib/mk/, dde_bsd_audio.inc dde_bsd_audio_include.mk) \ +MK_FILES := dde_bsd_audio.inc dde_bsd_audio_include.mk dde_bsd_audio_pci.mk + +LIB_MK := $(addprefix lib/mk/, $(MK_FILES)) \ $(foreach SPEC,x86_32 x86_64,lib/mk/spec/$(SPEC)/dde_bsd_audio.mk) \ lib/import/import-dde_bsd_audio_include.mk @@ -21,6 +23,7 @@ MIRROR_FROM_PORT_DIR := $(addprefix src/lib/audio/, \ dev/audio.c \ dev/ic/ac97.h \ dev/ic/ac97.c \ + lib/libkern \ sys/device.h \ sys/audioio.h \ sys/queue.h) diff --git a/repos/dde_bsd/src/drivers/audio/target.mk b/repos/dde_bsd/src/drivers/audio/target.mk index a11773facc..5d0a08ddb2 100644 --- a/repos/dde_bsd/src/drivers/audio/target.mk +++ b/repos/dde_bsd/src/drivers/audio/target.mk @@ -1,7 +1,7 @@ REQUIRES = x86 pci TARGET = audio_drv SRC_CC = main.cc -LIBS = dde_bsd_audio base +LIBS = dde_bsd_audio dde_bsd_audio_pci base INC_DIR += $(REP_DIR)/include CC_CXX_WARN_STRICT = diff --git a/repos/dde_bsd/src/lib/audio/bsd.h b/repos/dde_bsd/src/lib/audio/bsd.h index 7ce60c147b..8f60c79df7 100644 --- a/repos/dde_bsd/src/lib/audio/bsd.h +++ b/repos/dde_bsd/src/lib/audio/bsd.h @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2014-2017 Genode Labs GmbH + * Copyright (C) 2014-2020 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. @@ -19,9 +19,6 @@ #include #include -/* local includes */ -#include - namespace Bsd { int probe_drivers(Genode::Env&, Genode::Allocator&); diff --git a/repos/dde_bsd/src/lib/audio/bsd_emul.c b/repos/dde_bsd/src/lib/audio/bsd_emul.c index f888f928f1..16012527aa 100644 --- a/repos/dde_bsd/src/lib/audio/bsd_emul.c +++ b/repos/dde_bsd/src/lib/audio/bsd_emul.c @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2014-2017 Genode Labs GmbH + * Copyright (C) 2014-2020 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. @@ -24,31 +24,11 @@ int hz = HZ; -/* ioconf.c */ +int enodev(void) { return ENODEV; } + + extern struct cfdriver audio_cd; extern struct cfattach audio_ca; -extern struct cfdriver azalia_cd; -extern struct cfattach azalia_ca; -extern struct cfdriver eap_cd; -extern struct cfattach eap_ca; -extern struct cfdriver auich_cd; -extern struct cfattach auich_ca; - - -/* original value */ -enum { PCI_BUS_PARENT = 56 }; -short pv[] = { -1, PCI_BUS_PARENT }; - - -struct cfdata cfdata[] = { - {&audio_ca, &audio_cd, 0, 0, 0, 0, pv+0, 0, 0}, - {&azalia_ca, &azalia_cd, 0, 0, 0, 0, pv+1, 0, 0}, - {&eap_ca, &eap_cd, 0, 0, 0, 0, pv+1, 0, 0}, - {&auich_ca, &auich_cd, 0, 0, 0, 0, pv+1, 0, 0}, -}; - - -int enodev(void) { return ENODEV; } /* global character device switch table */ @@ -75,49 +55,6 @@ struct cdevsw cdevsw[] = { int nchrdev = sizeof(cdevsw) / sizeof(struct cdevsw); -struct device pci_bus = { DV_DULL, { 0, 0 }, 0, 0, { 'p', 'c', 'i', '0'}, 0, 0, 0 }; - -/** - * This function is our little helper that matches and attaches - * the driver to the device. - */ -int probe_cfdata(struct pci_attach_args *pa) -{ - size_t ncd = sizeof(cfdata) / sizeof(struct cfdata); - - size_t i; - for (i = 0; i < ncd; i++) { - struct cfdata *cf = &cfdata[i]; - struct cfdriver *cd = cf->cf_driver; - - if (*cf->cf_parents != PCI_BUS_PARENT) - continue; - - struct cfattach *ca = cf->cf_attach; - if (!ca->ca_match) - continue; - - int rv = ca->ca_match(&pci_bus, 0, pa); - - if (rv) { - struct device *dev = (struct device *) malloc(ca->ca_devsize, - M_DEVBUF, M_NOWAIT|M_ZERO); - - dev->dv_cfdata = cf; - - snprintf(dev->dv_xname, sizeof(dev->dv_xname), "%s%d", cd->cd_name, - dev->dv_unit); - printf("%s at %s\n", dev->dv_xname, pci_bus.dv_xname); - ca->ca_attach(&pci_bus, dev, pa); - - return 1; - } - } - - return 0; -} - - struct device *config_found_sm(struct device *parent, void *aux, cfprint_t print, cfmatch_t submatch) { @@ -157,6 +94,7 @@ struct device *device_lookup(struct cfdriver *cd, int unit) return audio_cd.cd_devs[unit]; } + /***************** ** sys/ucred.h ** *****************/ diff --git a/repos/dde_bsd/src/lib/audio/bsd_emul_pci.c b/repos/dde_bsd/src/lib/audio/bsd_emul_pci.c new file mode 100644 index 0000000000..ad0886c663 --- /dev/null +++ b/repos/dde_bsd/src/lib/audio/bsd_emul_pci.c @@ -0,0 +1,88 @@ +/* + * \brief Audio driver BSD API emulation + * \author Josef Soentgen + * \date 2014-11-09 + */ + +/* + * Copyright (C) 2014-2020 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include + +#include +#include + + +/****************** + ** sys/kernel.h ** + ******************/ + +/* ioconf.c */ +extern struct cfdriver audio_cd; +extern struct cfattach audio_ca; +extern struct cfdriver azalia_cd; +extern struct cfattach azalia_ca; +extern struct cfdriver eap_cd; +extern struct cfattach eap_ca; +extern struct cfdriver auich_cd; +extern struct cfattach auich_ca; + + +/* original value */ +enum { PCI_BUS_PARENT = 56 }; +short pv[] = { -1, PCI_BUS_PARENT }; + + +struct cfdata cfdata[] = { + {&audio_ca, &audio_cd, 0, 0, 0, 0, pv+0, 0, 0}, + {&azalia_ca, &azalia_cd, 0, 0, 0, 0, pv+1, 0, 0}, + {&eap_ca, &eap_cd, 0, 0, 0, 0, pv+1, 0, 0}, + {&auich_ca, &auich_cd, 0, 0, 0, 0, pv+1, 0, 0}, +}; + + +struct device pci_bus = { DV_DULL, { 0, 0 }, 0, 0, { 'p', 'c', 'i', '0'}, 0, 0, 0 }; + +/** + * This function is our little helper that matches and attaches + * the driver to the device. + */ +int probe_cfdata(struct pci_attach_args *pa) +{ + size_t ncd = sizeof(cfdata) / sizeof(struct cfdata); + + size_t i; + for (i = 0; i < ncd; i++) { + struct cfdata *cf = &cfdata[i]; + struct cfdriver *cd = cf->cf_driver; + + if (*cf->cf_parents != PCI_BUS_PARENT) + continue; + + struct cfattach *ca = cf->cf_attach; + if (!ca->ca_match) + continue; + + int rv = ca->ca_match(&pci_bus, 0, pa); + + if (rv) { + struct device *dev = (struct device *) malloc(ca->ca_devsize, + M_DEVBUF, M_NOWAIT|M_ZERO); + + dev->dv_cfdata = cf; + + snprintf(dev->dv_xname, sizeof(dev->dv_xname), "%s%d", cd->cd_name, + dev->dv_unit); + printf("%s at %s\n", dev->dv_xname, pci_bus.dv_xname); + ca->ca_attach(&pci_bus, dev, pa); + + return 1; + } + } + + return 0; +} diff --git a/repos/dde_bsd/src/lib/audio/driver.cc b/repos/dde_bsd/src/lib/audio/driver.cc index 4f597699cf..2c4bc79b19 100644 --- a/repos/dde_bsd/src/lib/audio/driver.cc +++ b/repos/dde_bsd/src/lib/audio/driver.cc @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2014-2017 Genode Labs GmbH + * Copyright (C) 2014-2020 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. @@ -23,6 +23,7 @@ #include