cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

seq_queue.h (3028B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 *   ALSA sequencer Queue handling
      4 *   Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
      5 */
      6#ifndef __SND_SEQ_QUEUE_H
      7#define __SND_SEQ_QUEUE_H
      8
      9#include "seq_memory.h"
     10#include "seq_prioq.h"
     11#include "seq_timer.h"
     12#include "seq_lock.h"
     13#include <linux/interrupt.h>
     14#include <linux/list.h>
     15#include <linux/bitops.h>
     16
     17#define SEQ_QUEUE_NO_OWNER (-1)
     18
     19struct snd_seq_queue {
     20	int queue;		/* queue number */
     21
     22	char name[64];		/* name of this queue */
     23
     24	struct snd_seq_prioq	*tickq;		/* midi tick event queue */
     25	struct snd_seq_prioq	*timeq;		/* real-time event queue */	
     26	
     27	struct snd_seq_timer *timer;	/* time keeper for this queue */
     28	int	owner;		/* client that 'owns' the timer */
     29	bool	locked;		/* timer is only accesibble by owner if set */
     30	bool	klocked;	/* kernel lock (after START) */
     31	bool	check_again;	/* concurrent access happened during check */
     32	bool	check_blocked;	/* queue being checked */
     33
     34	unsigned int flags;		/* status flags */
     35	unsigned int info_flags;	/* info for sync */
     36
     37	spinlock_t owner_lock;
     38	spinlock_t check_lock;
     39
     40	/* clients which uses this queue (bitmap) */
     41	DECLARE_BITMAP(clients_bitmap, SNDRV_SEQ_MAX_CLIENTS);
     42	unsigned int clients;	/* users of this queue */
     43	struct mutex timer_mutex;
     44
     45	snd_use_lock_t use_lock;
     46};
     47
     48
     49/* get the number of current queues */
     50int snd_seq_queue_get_cur_queues(void);
     51
     52/* delete queues */ 
     53void snd_seq_queues_delete(void);
     54
     55
     56/* create new queue (constructor) */
     57struct snd_seq_queue *snd_seq_queue_alloc(int client, int locked, unsigned int flags);
     58
     59/* delete queue (destructor) */
     60int snd_seq_queue_delete(int client, int queueid);
     61
     62/* final stage */
     63void snd_seq_queue_client_leave(int client);
     64
     65/* enqueue a event received from one the clients */
     66int snd_seq_enqueue_event(struct snd_seq_event_cell *cell, int atomic, int hop);
     67
     68/* Remove events */
     69void snd_seq_queue_client_leave_cells(int client);
     70void snd_seq_queue_remove_cells(int client, struct snd_seq_remove_events *info);
     71
     72/* return pointer to queue structure for specified id */
     73struct snd_seq_queue *queueptr(int queueid);
     74/* unlock */
     75#define queuefree(q) snd_use_lock_free(&(q)->use_lock)
     76
     77/* return the (first) queue matching with the specified name */
     78struct snd_seq_queue *snd_seq_queue_find_name(char *name);
     79
     80/* check single queue and dispatch events */
     81void snd_seq_check_queue(struct snd_seq_queue *q, int atomic, int hop);
     82
     83/* access to queue's parameters */
     84int snd_seq_queue_check_access(int queueid, int client);
     85int snd_seq_queue_timer_set_tempo(int queueid, int client, struct snd_seq_queue_tempo *info);
     86int snd_seq_queue_set_owner(int queueid, int client, int locked);
     87int snd_seq_queue_set_locked(int queueid, int client, int locked);
     88int snd_seq_queue_timer_open(int queueid);
     89int snd_seq_queue_timer_close(int queueid);
     90int snd_seq_queue_use(int queueid, int client, int use);
     91int snd_seq_queue_is_used(int queueid, int client);
     92
     93int snd_seq_control_queue(struct snd_seq_event *ev, int atomic, int hop);
     94
     95#endif