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!

Linux/wrap.h

Wrapper routines for Linux kernel services

Description



The functions and structures declared here are part of the osscore.c file that is compiled in the target system. This file must not be modified in the target system because the precompiled binaries included in the OSS installation package depend on it too.


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.



Some integer types

#if defined(__x86_64__)
typedef unsigned long long oss_native_word;	/* Same as the address and status register size */
#else
typedef unsigned long oss_native_word;	/* Same as the address and status register size */
#endif
typedef long long oss_int64_t;			/* Signed 64 bit integer */
typedef unsigned long long oss_uint64_t;	/* Unsigned 64 bit integer */

extern char *oss_strcpy (char *s1, const char *s2);
extern void *oss_memcpy (void *t_, const void *f_, size_t l);
extern void *oss_memset (void *t, int val, size_t l);
extern int oss_strcmp (const char *s1, const char *s2);
extern size_t oss_strlen (const char *s);
extern char *oss_strncpy (char *s1, const char *s2, size_t l);
extern void oss_udelay (unsigned long d);

typedef struct _oss_mutex_t *oss_mutex_t;
typedef struct _poll_table_handle oss_poll_table_handle_t;
typedef struct _file_handle_t oss_file_handle_t;

struct _oss_poll_event_t
{
  short events, revents;
  oss_poll_table_handle_t *wait;
  oss_file_handle_t *file;
};
typedef struct _oss_poll_event_t oss_poll_event_t;

extern oss_mutex_t oss_mutex_init (void);
extern void oss_mutex_cleanup (oss_mutex_t mutex);
extern void oss_spin_lock_irqsave (oss_mutex_t mutex,
				   oss_native_word * flags);
extern void oss_spin_unlock_irqrestore (oss_mutex_t mutex,
					oss_native_word flags);
extern void oss_spin_lock (oss_mutex_t mutex);
extern void oss_spin_unlock (oss_mutex_t mutex);
extern unsigned long long oss_get_jiffies (void);
extern char *oss_get_procname (void);
extern int oss_get_pid (void);
extern int oss_get_uid (void);

struct oss_wait_queue;
struct module;
struct _oss_device_t;
struct pci_dev;

typedef void *oss_dma_handle_t; /* Unused type */


Sleep/wakeup/poll support. These definitions are duplicates from oss_config.h which is the official place. Both definitions must match.


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

extern void oss_cmn_err (int level, const char *format, ...);
#define CE_CONT		0
#define CE_NOTE		1
#define CE_WARN		2
#define CE_PANIC	3

typedef int timeout_id_t;
extern timeout_id_t oss_timeout (void (*func) (void *), void *arg,
				 unsigned long long ticks);
extern void oss_untimeout (timeout_id_t id);

extern int sprintf (char *buf, const char *s, ...);

typedef enum uio_rw
{ UIO_READ, UIO_WRITE } uio_rw_t;
struct uio
{
  char *ptr;
  int resid;
  int kernel_space;		/* Set if this uio points to a kernel space buffer */
  uio_rw_t rw;
};
typedef struct uio uio_t;

extern int oss_uiomove (void *address, size_t nbytes, enum uio_rw rwflag,
			uio_t * uio_p);
extern int oss_create_uio (uio_t * uiop, char *buf, size_t count, uio_rw_t rw,
			   int is_kernel);
extern void *oss_kmem_alloc (size_t size);
extern void oss_kmem_free (void *addr);
extern void *oss_pmalloc (size_t sz);
extern oss_native_word oss_virt_to_bus (void *addr);
extern void oss_reserve_pages (oss_native_word start_addr,
			       oss_native_word end_addr);
extern void oss_unreserve_pages (oss_native_word start_addr,
				 oss_native_word end_addr);
extern void *oss_contig_malloc (oss_device_t * osdev, int sz,
				oss_uint64_t memlimit,
				oss_native_word * phaddr);
extern void oss_contig_free (oss_device_t * osdev, void *p, int sz);

extern time_t oss_get_time (void);

typedef struct _inode_handle_t oss_inode_handle_t;
typedef struct _vm_aread_handle oss_vm_area_handle_t;

extern int oss_vma_get_flags (oss_vm_area_handle_t *);

typedef struct oss_file_operation_handle
{
  ssize_t (*read) (oss_file_handle_t *, char *, size_t, loff_t *);
  ssize_t (*write) (oss_file_handle_t *, char *, size_t, loff_t *);
  int (*readdir) (oss_inode_handle_t *, oss_file_handle_t *, void *, int);
  unsigned int (*poll) (oss_file_handle_t *, oss_poll_table_handle_t *);
  int (*ioctl) (oss_inode_handle_t *, oss_file_handle_t *, unsigned int,
		unsigned long);
  int (*mmap) (oss_file_handle_t *, oss_vm_area_handle_t *);
  int (*open) (oss_inode_handle_t *, oss_file_handle_t *);
  int (*release) (oss_inode_handle_t *, oss_file_handle_t *);
  long (*compat_ioctl) (oss_file_handle_t *, unsigned int, unsigned long);
  long (*unlocked_ioctl) (oss_file_handle_t *, unsigned int, unsigned long);
  int (*fsync) (oss_inode_handle_t *, oss_file_handle_t *);
  int (*fasync) (oss_inode_handle_t *, oss_file_handle_t *, int);
}
oss_file_operation_handle_t;

extern int oss_do_mmap (oss_vm_area_handle_t * vma,
			oss_native_word dmabuf_phys, int bytes_in_use);
extern int oss_register_chrdev (oss_device_t * osdev, unsigned int major,
				const char *name,
				oss_file_operation_handle_t * op);
extern void oss_register_minor (int major, int minor, char *name);
extern int oss_unregister_chrdev (unsigned int major, const char *name);

extern int oss_inode_get_minor (oss_inode_handle_t * inode);
extern int oss_file_get_flags (oss_file_handle_t * file);
extern void *oss_file_get_private (oss_file_handle_t * file);
extern void oss_file_set_private (oss_file_handle_t * file, void *v);

extern void oss_inc_refcounts (void);
extern void oss_dec_refcounts (void);


Redefinitions of some routines defined in oss_config.h just to ensure they are defined in the same way in both places. The osscore/wrapper modules only include wrap.h so they can't see the "official" declarations in oss_config.h.


typedef struct _dev_info_t dev_info_t;
extern dev_info_t *oss_create_pcidip (struct pci_dev *pcidev);
extern oss_device_t *osdev_create (dev_info_t * dip, int dev_type,
				   int instance, const char *nick,
				   const char *handle);

extern void osdev_delete (oss_device_t * osdev);


PCI config space access (in osscore.c)

extern char *oss_pci_read_devpath (dev_info_t * dip);
extern int osscore_pci_read_config_byte (dev_info_t * dip, unsigned int where,
					 unsigned char *val);
extern int osscore_pci_read_config_irq (dev_info_t * dip, unsigned int where,
					unsigned char *val);
extern int osscore_pci_read_config_word (dev_info_t * dip, unsigned int where,
					 unsigned short *val);
extern int osscore_pci_read_config_dword (dev_info_t * dip,
					  unsigned int where,
					  unsigned int *val);
extern int osscore_pci_write_config_byte (dev_info_t * dip,
					  unsigned int where,
					  unsigned char val);
extern int osscore_pci_write_config_word (dev_info_t * dip,
					  unsigned int where,
					  unsigned short val);
extern int osscore_pci_write_config_dword (dev_info_t * dip,
					   unsigned int where,
					   unsigned int val);

extern int osscore_pci_enable_msi (dev_info_t * dip);

extern void *oss_map_pci_mem (oss_device_t * osdev, int size,
			      unsigned long offset);

extern void oss_unmap_pci_mem (void *addr);

extern int oss_copy_to_user (void *to, const void *from, unsigned long n);
extern int oss_copy_from_user (void *to, const void *from, unsigned long n);

extern void oss_register_module (struct module *mod);
extern void oss_unregister_module (struct module *mod);

#ifdef _KERNEL
extern char *oss_strcpy (char *s1, const char *s2);
#undef strcpy
#define strcpy oss_strcpy

extern void *oss_memcpy (void *t_, const void *f_, size_t l);
#undef memcpy
#define memcpy oss_memcpy

extern void *oss_memset (void *t, int val, size_t l);
#undef memset
#define memset oss_memset

extern int oss_strcmp (const char *s1, const char *s2);
#undef strcmp
#define strcmp oss_strcmp
extern int oss_strncmp (const char *s1, const char *s2, size_t len);
#undef strncmp
#define strncmp oss_strncmp

#undef strlen
#define strlen oss_strlen

#undef strncpy
#define strncpy oss_strncpy
#endif // KERNEL

#undef timeout
#define timeout oss_timeout

#undef untimeout
#define untimeout oss_untimeout

#define drv_usecwait oss_udelay

#define uiomove oss_uiomove

#define cmn_err oss_cmn_err

struct fileinfo
{
  int mode;			/* Open mode */
  int acc_flags;
};
#define ISSET_FILE_FLAG(fileinfo, flag)  (fileinfo->acc_flags & (flag) ? 1:0)


USB related definitions

typedef struct udi_usb_devc udi_usb_devc;


Functions exported by os.c

extern int oss_init_osscore (oss_device_t * osdev);
extern void oss_uninit_osscore (oss_device_t * osdev);
extern void osdev_set_owner (oss_device_t * osdev, struct module *owner);
extern void osdev_set_major (oss_device_t * osdev, int major);
extern void osdev_set_irqparms (oss_device_t * osdev, void *irqparms);
extern void *osdev_get_irqparms (oss_device_t * osdev);
extern void oss_inc_intrcount(oss_device_t *osdev, int claimed);
extern struct module *osdev_get_owner (oss_device_t * osdev);
extern char *osdev_get_nick (oss_device_t * osdev);
extern int osdev_get_instance (oss_device_t * osdev);
extern int oss_request_major (oss_device_t * osdev, int major, char *module);
extern int oss_register_device (oss_device_t * osdev, const char *name);	/* from oss_config.h */


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