Google
 

Open Sound System
The Hitchhiker's Guide to OSS 4.1 Internals

Do you have problems with sound/audio application development? Don't panic! Click here for help!

include/oss_config.h

The top level header file for compiling OSS itself.

Description



This is the mother of all headers in OSS. All core files should include this file.

However low level drivers must never include this file. Instead they should use the autogenerated drv_cfg.h file.


This file is part of Open Sound System.

Copyright (C) 4Front Technologies 1996-2008.

This this source file is released under GPL v2 license (no other versions). See the COPYING file included in the main directory of this source distribution for the license terms and conditions.


#ifndef OSS_CONFIG_H
#define OSS_CONFIG_H

#define NEW_DEVICE_NAMING	/* /dev/sblive0_dsp0 instead of /dev/dsp0 and so on */

#include "soundcard.h"

struct _oss_device_t;
typedef int *ioctl_arg;

/* Check various wrappers when changing these two function pointer defs */
typedef int (*oss_tophalf_handler_t) (struct _oss_device_t * osdev);
typedef void (*oss_bottomhalf_handler_t) (struct _oss_device_t * osdev);

#include <ossddk/oss_exports.h>
#include <local_config.h>
#include <os.h>

#include <ossddk/ossddk.h>

#ifndef OS_VERSION
#error OS_VERSION not defined in os.h
#endif


Memory block allocation (oss_memblk.h/c)

#include <oss_memblk.h>


Memory allocation/free routines for structures to be freed automatically when OSS is unloaded.

#define PMALLOC(osdev, size) oss_memblk_malloc(&oss_global_memblk, size)
#define PMFREE(osdev, addr) oss_memblk_free(&oss_global_memblk, addr)


Currently /dev/dsp is managed in user land by ossdevlinks instead of using the previous kernel level device lists feature (earlier maintained by the ossctl utility). Define MANAGE_DEV_DSP to return back this functionality in the driver. Also remove the related code in the user land tools (ossdevlinks).

#undef  MANAGE_DEV_DSP

#ifndef ERESTARTSYS
#define ERESTARTSYS EAGAIN
#endif

#ifndef OSS_HZ
#define OSS_HZ HZ
#endif

#ifndef OSS_PAGE_MASK
#define OSS_PAGE_MASK (-1)
#endif

#ifndef HW_PRINTF
#define HW_PRINTF(x)
#endif

#ifndef GET_PROCESS_NAME
#define GET_PROCESS_NAME() NULL
#endif

#ifndef GET_PROCESS_PID
#define GET_PROCESS_PID() -1
#endif

#ifndef FMA_EREPORT
/* FMA is only available under Solaris */
#define FMA_EREPORT(osdev, detail, name, type, value)
#define FMA_IMPACT(osdev, impact)
#endif

#include "oss_version.h"
/* #include "aw.h" */
#define EXCLUDE_GUS_IODETECT

#ifndef IOC_IS_OUTPUT
#define IOC_IS_OUTPUT(cmd) cmd & SIOC_IN
#endif

#define DSP_DEFAULT_SPEED	48000
#define DSP_DEFAULT_FMT		AFMT_S16_LE

#define ON		1
#define OFF		0

typedef struct oss_wait_queue oss_wait_queue_t;

#include "audio_core.h"
#include "mixer_core.h"
#include "oss_calls.h"
#include "internal.h"

#ifndef DEB
#define DEB(x)
#endif

#ifndef DDB
#define DDB(x)  {}
#endif

#ifndef CDB
#define CDB(x)  {}
#endif

#define TIMER_ARMED	121234
#define TIMER_NOT_ARMED	1

#ifdef DO_MEMDEBUG
extern void oss_vmem_check (char *file, int line, oss_native_word offs,
			    int bytes);
extern void oss_pmem_check (char *file, int line, oss_native_word offs,
			    int bytes);
# define VMEM_CHECK(offs, bytes) oss_vmem_check(__FILE__, __LINE__, (oss_native_word)offs, bytes)
# define PMEM_CHECK(offs, bytes) oss_pmem_check(__FILE__, __LINE__, (oss_native_word)offs, bytes)
#else
# define VMEM_CHECK(offs, bytes)
# define PMEM_CHECK(offs, bytes)
#endif

#ifndef OSS_BIG_ENDIAN
#define USE_REMUX
#endif

typedef struct
{
  char *const key, *const name;
} oss_device_table_t;


typedef struct
{
#ifdef _KERNEL
  int (*open) (int dev, int dev_class, struct fileinfo * file,
	       int recursive, int open_flags, int *redirect);
  void (*close) (int dev, struct fileinfo * file);
  int (*read) (int dev, struct fileinfo * file, uio_t * buf, int count);
  int (*write) (int dev, struct fileinfo * file, uio_t * buf, int count);
  int (*ioctl) (int dev, struct fileinfo * file,
		unsigned int cmd, ioctl_arg arg);
  int (*chpoll) (int dev, struct fileinfo * file, oss_poll_event_t * ev);
#else
  int dummy;
#endif
} oss_cdev_drv_t;

typedef struct _oss_cdev_t oss_cdev_t;

struct _oss_cdev_t
{
#ifdef DEV_HDR
  DEV_HDR devHdr;
#endif
  oss_cdev_t *hl;	/* Hash link (for operating system ports that use it) */
  int minor;
  int dev_class;
  int instance;
  oss_cdev_drv_t *d;
  char name[32];
  oss_device_t *osdev;
  void *info;
  int active;
  int open_count;
  struct fileinfo file;
};

extern oss_cdev_t **oss_cdevs;
extern int oss_num_cdevs;


Global initialization and cleanup functions (common to all operating systems)

extern void oss_common_init (oss_device_t * osdev);
extern void oss_unload_drivers (void);

The following calls are operating system dependent. They should be defined in os.c for each operating system.

extern int oss_register_device (oss_device_t * osdev, const char *name);
extern void oss_unregister_device (oss_device_t * osdev);
extern int oss_find_minor (int dev_class, int instance);
extern int oss_disable_device (oss_device_t * osdev);
extern void oss_install_chrdev (oss_device_t * osdev, char *name,
				int dev_class, int instance,
				oss_cdev_drv_t * drv, int flags);
#define CHDEV_VIRTUAL	0x00000001
#define CHDEV_REPLUG	0x00000002 /* Hot (un)pluggable device got replugged */
extern int oss_register_interrupts (oss_device_t * osdev, int intrnum,
				    oss_tophalf_handler_t top,
				    oss_bottomhalf_handler_t bottom);
extern void oss_unregister_interrupts (oss_device_t * osdev);


DMA buffer management

extern int oss_alloc_dmabuf (int dev, dmap_p dmap, int direction);
extern int __oss_alloc_dmabuf (int dev, dmap_p dmap, unsigned int alloc_flags,
			       oss_uint64_t maxaddr, int direction);
/* Alloc flags */
#define DMABUF_NONCONTIG	0x00000001
#define DMABUF_ISA		0x00000002
#define DMABUF_QUIET		0x00000004
#define DMABUF_SIZE_16BITS	0x00000008	/* Max buffer size 64k-1 */
#define DMABUF_LARGE		0x00000010	/* Allocate a 356k buffer */
/* Maxaddr defs */
#define MEMLIMIT_ISA		0x0000000000ffffffLL
#define MEMLIMIT_28BITS		0x000000000fffffffLL
#define MEMLIMIT_30BITS		0x000000003fffffffLL
#define MEMLIMIT_31BITS		0x000000007fffffffLL
#define MEMLIMIT_32BITS		0x00000000ffffffffLL
#define MEMLIMIT_64BITS		0xffffffffffffffffLL
extern void oss_free_dmabuf (int dev, dmap_p dmap);


Device management routines

extern void *oss_get_osid (oss_device_t * osdev);
extern void oss_reserve_device (oss_device_t * osdev);
extern void oss_unreserve_device (oss_device_t * osdev, int decrement);

Sleep/wakeup support (os.c)

extern oss_wait_queue_t *oss_create_wait_queue (oss_device_t * osdev,
						const char *name);
extern void oss_reset_wait_queue (oss_wait_queue_t * wq);
extern void oss_remove_wait_queue (oss_wait_queue_t * wq);
extern int oss_sleep (oss_wait_queue_t * wq, oss_mutex_t * mutex, int ticks,
		      oss_native_word * flags, unsigned int *status);
extern int oss_register_poll (oss_wait_queue_t * wq, oss_mutex_t * mutex,
			      oss_native_word * flags, oss_poll_event_t * ev);
extern void oss_wakeup (oss_wait_queue_t * wq, oss_mutex_t * mutex,
			oss_native_word * flags, short events);

Wait status flags (make sure these match osscore.c for Linux)

#define WK_NONE		0x00
#define WK_WAKEUP	0x01
#define WK_TIMEOUT	0x02
#define WK_SIGNAL	0x04
#define WK_SLEEP	0x08
#define WK_SELECT	0x10


Mutex hierarchy levels Used by LOCK_ALLOC in UnixWare/OpenServer

#define MH_GLOBAL	1
#define MH_FRAMEW	5
#define MH_DRV		10
#define MH_TOP		20

#define OSS_HISTORY_SIZE 5
#define OSS_HISTORY_STRSIZE 256
typedef char oss_history_t[OSS_HISTORY_STRSIZE];
extern oss_history_t oss_history[OSS_HISTORY_SIZE];
extern int oss_history_p;

#ifdef LICENSED_VERSION
#include <license.h>
#endif

extern void create_new_card (char *shortname, char *longname);


Config option support.

typedef struct
{
  char *name;
  int *ptr;
} oss_option_map_t;

extern void oss_load_options (oss_device_t * osdev, oss_option_map_t map[]);
extern oss_option_map_t oss_global_options[];

extern int detect_trace;

extern int oss_num_cards;
extern int oss_get_cardinfo (int cardnum, oss_card_info * ci);
extern oss_device_t *osdev_create (dev_info_t * dip, int dev_type,
				   int instance, const char *nick,
				   const char *handle);
extern oss_device_t *osdev_clone (oss_device_t * orig_osdev,
				  int new_instance);
extern void osdev_delete (oss_device_t * osdev);


oss_pci_byteswap() turns on/off hardware level byte swapping. mode=0 : Don't do byte swapping in the bus interface (default) mode=1 : Do automatic byte swapping (BE machines) on the bus interface.

extern void oss_pci_byteswap (oss_device_t * osdev, int mode);

extern void oss_pcie_init (oss_device_t * osdev, int flags);


Process information routines


extern int oss_get_procinfo(int what);
#define OSS_GET_PROCINFO_UID                    1
#define OSS_GET_PROCINFO_GID                    2
#define OSS_GET_PROCINFO_PGID                   3


Error reporting

#define E_REC	1
#define E_PLAY	2
extern void oss_audio_set_error (int dev, int mode, int err, int parm);
#define OSSERR(cntx, msg) cntx


DMA/cache syncronization macros (should be defined in os.h if they are necessary for the OS/arch.

#ifndef OSS_DMA_SYNC
//#  define OSS_DMA_SYNC_INBOUND	For direction device to CPU
//#  define OSS_DMA_SYNC_OUTBOUND	For direction CPU to device
#  define OSS_DMA_SYNC(handle, offs, len, direc) do { \
  } while (0)
#endif


Ensure that various obsolete OSS 3.x features are not used any more in the drivers.

#define osp osp_is_obsolete[]
#define CREATE_OSP(osdev) CREATE_OSP_is_obsolete
#define printk() 	printk_is_obsolete
#define REQUEST_REGION(start, len, name) REQUEST_REGION_is_obsolete
#define CHECK_REGION(start, len) 	CHECK_REGION_is_obsolete
#define RELEASE_REGION(start, len)	RELEASE_REGION_is_obsolete
#define ALLOCATE_DMA_CHN	ALLOCATE_DMA_CHN_is_obsolete
#define FREE_DMA_CHN		FREE_DMA_CHN_is_obsolete
#define OPEN_DMA_CHN		OPEN_DMA_CHN_is_obsolete
#define CLOSE_DMA_CHN		OPEN_DMA_CHN_is_obsolete
#if !defined(__bsdi__)
#define tenmicrosec(x) tenmicrosec_is_obsolete()
#endif
#define request_sound_timer(x) request_sound_timer_is_obsolete
#define sound_stop_timer(x) sound_stop_timer_is_obsolete
#define snd_set_irq_handler(x) snd_set_irq_handler_is_obsolete
#define snd_release_irq (vect, x) snd_release_irq_is_obsolete
#define conf_printf (name, hw_config) conf_printf_is_obsolete
#define conf_printf2 (name, base, irq, dma, dma2) conf_printf2_is_obsolete
#define sound_disable_module (void) sound_disable_module_is_obsolete
#define IOCTL_GET IOCTL_GET_is_obsolete
#define IOCTL_OUT IOCTL_OUT_is_obsolete
#define CONTIG_MALLOC_ISA CONTIG_MALLOC_ISA_is_obsolete()

#endif

Copyright (C) 4Front Technologies, 2007. All rights reserved.

Back to index OSS web site


Copyright (C) 4Front Technologies, 2007. All rights reserved.
Back to index OSS web site