a0f70ac053
deltas, but it is possible since I had a few merge conflicts over the last few days while this has been sitting ready to go. (Part 1 was committed to the config files, but cvs aborted grrr..) Approved by: core
100 lines
2.1 KiB
C
100 lines
2.1 KiB
C
/*
|
|
* os.h -- only included by sound_config.h right after local.h
|
|
*
|
|
*/
|
|
|
|
#ifndef _OS_H_
|
|
#define _OS_H_
|
|
|
|
#include <sys/param.h>
|
|
#include <sys/systm.h>
|
|
#include <sys/proc.h>
|
|
#include <sys/conf.h>
|
|
#include <sys/fcntl.h>
|
|
#include <sys/filio.h>
|
|
#include <sys/uio.h>
|
|
#include <sys/kernel.h>
|
|
#include <sys/poll.h>
|
|
#include <sys/malloc.h>
|
|
#include <sys/buf.h>
|
|
#include <sys/signalvar.h>
|
|
|
|
#include <machine/soundcard.h>
|
|
|
|
#include <i386/isa/isa_device.h>
|
|
|
|
#undef DELAY
|
|
#define DELAY(x) tenmicrosec(x)
|
|
typedef struct uio snd_rw_buf;
|
|
|
|
struct snd_wait {
|
|
int mode;
|
|
int aborting;
|
|
};
|
|
|
|
|
|
unsigned long get_time(void);
|
|
|
|
#endif /* _OS_H_ */
|
|
|
|
typedef caddr_t ioctl_arg;
|
|
|
|
typedef struct sound_os_info {
|
|
int unit;
|
|
} sound_os_info;
|
|
|
|
|
|
/*
|
|
* The following macro calls tsleep. It should be implemented such that
|
|
* the process is resumed if it receives a signal.
|
|
* The q parameter is a wait_queue defined with DEFINE_WAIT_QUEUE(),
|
|
* and the second is a workarea parameter. The third is a timeout
|
|
* in ticks. Zero means no timeout.
|
|
*/
|
|
#define DO_SLEEP(q, f, time_limit) \
|
|
{ \
|
|
int flag; \
|
|
f.mode = WK_SLEEP; \
|
|
flag=tsleep(&q, (PRIBIO-5)|PCATCH, "sndint", time_limit); \
|
|
f.mode &= ~WK_SLEEP; \
|
|
if (flag == EWOULDBLOCK) { \
|
|
f.mode |= WK_TIMEOUT; \
|
|
f.aborting = 0; \
|
|
} else \
|
|
f.aborting = flag; \
|
|
}
|
|
|
|
#define DO_SLEEP1(q, f, time_limit) \
|
|
{ \
|
|
int flag; \
|
|
f.mode = WK_SLEEP; \
|
|
flag=tsleep(&q, (PRIBIO-5)|PCATCH, "snd1", time_limit); \
|
|
f.mode &= ~WK_SLEEP; \
|
|
if (flag == EWOULDBLOCK) { \
|
|
f.mode |= WK_TIMEOUT; \
|
|
f.aborting = 0; \
|
|
} else \
|
|
f.aborting = flag; \
|
|
}
|
|
|
|
#define DO_SLEEP2(q, f, time_limit) \
|
|
{ \
|
|
int flag; \
|
|
f.mode = WK_SLEEP; \
|
|
flag=tsleep(&q, (PRIBIO-5)|PCATCH, "snd2", time_limit); \
|
|
f.mode &= ~WK_SLEEP; \
|
|
if (flag == EWOULDBLOCK) { \
|
|
f.mode |= WK_TIMEOUT; \
|
|
f.aborting = 0; \
|
|
} else \
|
|
f.aborting = flag; \
|
|
}
|
|
|
|
#define PROCESS_ABORTING( f) (f.aborting || CURSIG(curproc))
|
|
#define TIMED_OUT( f) (f.mode & WK_TIMEOUT)
|
|
|
|
#ifdef ALLOW_POLL
|
|
typedef struct proc select_table;
|
|
extern struct selinfo selinfo[];
|
|
#endif
|