Re: [PATCH] Source code files for sound library
Bradley Morgan <[email protected]>
| Newsgroups | gmane.os.hurd.bugs |
|---|---|
| Message-ID | <[email protected]> |
On 13 August 2026 01:41:31 BST, Ahemd Khider <[email protected]> wrote: >From: astra <[email protected]> > >--- > libsound/audio.c | 64 ++++++++++++++++++++++++++ > libsound/audio.h | 111 ++++++++++++++++++++++++++++++++++++++++++++++ > libsound/makefile | 7 +++ > 3 files changed, 182 insertions(+) > create mode 100644 libsound/audio.c > create mode 100644 libsound/audio.h > create mode 100644 libsound/makefile > >diff --git a/libsound/audio.c b/libsound/audio.c >new file mode 100644 >index 00000000..7d18e41f >--- /dev/null >+++ b/libsound/audio.c >@@ -0,0 +1,64 @@ >+/* This File Is Part Of Hurd Audio Interface System (Haudis) */ >+/* This file Is Under GNU General Public License Version 3 (GPL3) */ >+/* Original Author : AHMED KHIDER (2026) */ Maybe add your email? So you could get CCed in future patches >+ >+ >+ >+#include "audio.h" >+ >+bool init_hda_enge(volatile uint32_t *cntlr) >+{ >+ >+ >+ /* Controller Initialization */ >+ >+ cntlr[HDA_GC] &= ~RESET; >+ uint8_t wait = 50; >+ >+ while ( (wait--) > 0) >+ { /* Wait Until Read Back */ } >+ >+ if (wait <= 0) return 1; >+ >+ cntlr[HDA_GC] |= RESET; >+ >+ while ( (wait--) > 0) >+ { /* Wait Until Read Back */ } >+ >+ if (wait <= 0) return 1; >+ >+ if ((cntlr[HDA_ST] & 0x0F) != 0) return 1; >+ >+ /* CORB Initialization */ >+ >+ cntlr[HDA_CORB_CNTRL] = 0x00; >+ while (cntlr[HDA_CORB_CNTRL] & 2); >+ >+ cntlr[HDA_CORB_LBA] &= 0xFFFFFFFF; >+ cntlr[HDA_CORB_UBA] = (*cntlr >> 16) & 0xFFFFFFFF; >+ >+ cntlr[HDA_CORB_WP] = 0x0000; >+ >+ cntlr[HDA_CORB_RP] &= (1 << 15); /* 0x8000 */ >+ while( cntlr[HDA_CORB_RP] &= (1 << 15) ); >+ cntlr[HDA_CORB_RP] = 0x0000; >+ cntlr[HDA_CORB_CNTRL] = 0x02; >+ >+ >+ /* RIRB Initialization */ >+ >+ cntlr[HDA_RIRB_CNTRL]=0x00; >+ while (cntlr[HDA_RIRB_CNTRL] & 2); >+ >+ cntlr[HDA_RIRB_LBA] &= 0xFFFFFFFFF; >+ cntlr[HDA_RIRB_UBA] = (*cntlr >> 16) & 0xFFFFFFFF; >+ >+ cntlr[HDA_RIRB_SIZE] = 0x02; >+ >+ cntlr[HDA_CORB_WP] = (1 << 15); >+ while( cntlr[HDA_RIRB_WP] &= (1 << 15) ); /* 0x8000 */ >+ cntlr[HDA_RIRB_WP] = 0x0000; >+ cntlr[HDA_RIRB_CNTRL] = 0x02; >+ >+ return 0; >+} >diff --git a/libsound/audio.h b/libsound/audio.h >new file mode 100644 >index 00000000..2b07c902 >--- /dev/null >+++ b/libsound/audio.h >@@ -0,0 +1,111 @@ >+/* This File Is Part Of Hurd Audio Interface System (Haudis) */ >+/* This file Is Under GNU General Public License Version 3 (GPL3) */ >+/* Original Author : AHMED KHIDER (2026) */ >+ Ditto. >+#ifndef HURD_AUDIO_INTERFACE >+#define HURD_AUDIO_INTERFACE >+ >+#include <stdint.h> >+#include <stdbool.h> >+ >+/* Intel High Definition Audio */ >+ >+#ifndef INTEL_HDA_REG >+#define INTEL_HDA_REG >+#define HDA_GCP 0x00 /* Global Capablities */ >+#define HDA_MNV 0x02 /* Minor Version */ >+#define HDA_MJV 0x03 /* Major Version */ >+#define HDA_GC 0x08 /* Global control */ >+#define HDA_ST 0x0E /* Status Test */ >+#define HDA_IC 0x20 /* Interrupt Control */ >+#define HDA_STREAM_SYNCH 0x34 /* Stream Synchronization */ >+#define HDA_CORB_LBA 0x40 /* CORB Lower Base Address */ >+#define HDA_CORB_UBA 0x44 /* CORB Upper Base Address */ >+#define HDA_CORB_WP 0x48 /* CORB Write Pointer */ >+#define HDA_CORB_RP 0x4A /* CORB Read Pointer */ >+#define HDA_CORB_CNTRL 0x4C /* CORB Control */ >+#define HDA_CORB_SIZE 0x4E /* CORB Size */ >+#define HDA_RIRB_LBA 0x50 /* RIRB Lower Base Address */ >+#define HDA_RIRB_UBA 0x54 /* RIRB Upper Base Address */ >+#define HDA_RIRB_WP 0x58 /* RIRB Write Pointer */ >+#define HDA_RIRB_RIC 0x5A /* RIRB Response Interrupt Count */ >+#define HDA_RIRB_CNTRL 0x5C /* RIRB Control */ >+#define HDA_RIRB_SIZE 0x5E /* RIRB Size */ >+#define HDA_DMA_PLBA 0x70 /* DMA Position Lower Base Address */ >+#define HDA_DMA_PUBA 0x74 /* DMA Position Upper Base Address */ >+#define HDA_SD_CNTL1 0x00 /* Stream Descriptor */ >+#define HDA_SD_CNTL2 0x01 /* Stream Descriptor */ >+#define HDA_SD_CNTL3 0x02 /* Stream Descriptor */ >+#define HDA_SD_STS 0X03 /* Stream Status */ >+#define HDA_SD_LPIB1 0x04 /* Stream Link Position In Buffer */ >+#define HDA_SD_LPIB2 0x05 /* Stream Link Position In Buffer */ >+#define HDA_SD_LPIB3 0x06 /* Stream Link Position In Buffer */ >+#define HDA_SD_LPIB4 0x07 /* Stream Link Position In Buffer */ >+#define HDA_SD_LVD1 0x0C /* Stream Last Valid Index */ >+#define HDA_SD_LVD2 0x0D /* Stream Last Valid Index */ >+#define HDA_SD_FIFOWM1 0x0E /* Stream FIFO Watermark */ >+#define HDA_SD_FIFOWM2 0x0F /* Stream FIFO Watermark */ >+#define HDA_SD_FMT1 0x12 /* Stream Format */ >+#define HDA_SD_FMT2 0x13 /* Stream Format */ >+#endif /* INTEL_HDA_REG*/ >+ >+ >+/* Intel AC97 Registers */ >+ >+#ifndef INTEL_AC97_REG >+#define AC97_REG >+#define AC97_RR 0x00 /* Reset Register */ >+#define AC97_MV 0x02 /* Master Valume */ >+#define AC97_AUX_OV 0x04 /* AUX Output Volume */ >+#define AC97_MPV 0x0E /* Microphone Valume */ >+#define AC97_PCM_OV 0x18 /* PCM Output Volume */ >+#define AC97_SRID 0x1A /* Select Record Input Device */ >+#define AC97_RG 0x1C /* Record Gain */ >+#define AC97_RGOM 0x1E /* Record Gain Of Microphone */ >+#define AC97_GC 0x2C /* Global Contorl */ >+#define AC97_GS 0x30 /* Global Status */ >+#define AC97_BDBA1 0x00 /* Buffer Descriper Base Address */ >+#define AC97_BDBA2 0x10 /* Buffer Descriper Base Address */ >+#define AC97_BDBA3 0x20 /* Buffer Descriper Base Address */ >+#define AC97_CPSE1 0x04 /* Current Processed Entry */ >+#define AC97_CPSE2 0x14 /* Current Processed Entry */ >+#define AC97_CPSE3 0x24 /* Current Processed Entry */ >+#define AC97_LVD1 0x05 /* Last Valid Entry */ >+#define AC97_LVD2 0x15 /* Last Valid Entry */ >+#define AC97_LVD3 0x25 /* Last Valid Entry */ >+#define AC97_TS1 0x06 /* Transfer Status */ >+#define AC97_TS2 0x16 /* Transfer Status */ >+#define AC97_TS3 0x26 /* Transfer Status */ >+#define AC97_PICE1 0x08 /* Position In Current Entry */ >+#define AC97_PICE2 0x18 /* Position In Current Entry */ >+#define AC97_PICE3 0x28 /* Position In Current Entry */ >+#define AC97_PE1 0x0A /* Prefetched Entry */ >+#define AC97_PE2 0x1A /* Prefetched Entry */ >+#define AC97_PE3 0x2A /* Prefetched Entry */ >+#define AC97_TC1 0x0B /* Transfer Control */ >+#define AC97_TC2 0x1B /* Transfer Control*/ >+#define AC97_TC3 0x2B /* Transfer Control*/ >+#endif /* INTEL_AC97_REG */ >+ >+ >+ >+ >+/* Bitwise Functions */ >+ >+#define RESET (1 << 0) >+#define BLSHIFT(shift,value) (value << shift) /* Left Shifting */ >+#define BRSHIFT(shift,value) (value >> shift) /* Right Shifting */ >+ >+/* Read Functions */ >+ >+#define READ(addrs,offset)(addrs[offset]); >+ >+/* Write Functions */ >+ >+#define WRITE(addrs,offset,value)(addrs[offset]=value) >+ >+/* Initalization Funcations */ >+ >+bool init_hda_enge(volatile uint32_t *cntlr); >+ >+#endif /* HURD_AUDIO_INTERFACE */ >diff --git a/libsound/makefile b/libsound/makefile >new file mode 100644 >index 00000000..ee5046e5 >--- /dev/null >+++ b/libsound/makefile >@@ -0,0 +1,7 @@ >+CC ?= gcc >+CFLAGS = -Wall -Wextra well, -Werror? While we are at it >+ >+haudis: audio.o >+ >+audio.o: >+ $(CC) -o audio.c > Thanks!