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!

Reply via email to