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

ctatc.h (5202B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
      4 *
      5 * @File	ctatc.h
      6 *
      7 * @Brief
      8 * This file contains the definition of the device resource management object.
      9 *
     10 * @Author	Liu Chun
     11 * @Date 	Mar 28 2008
     12 */
     13
     14#ifndef CTATC_H
     15#define CTATC_H
     16
     17#include <linux/types.h>
     18#include <linux/mutex.h>
     19#include <linux/pci.h>
     20#include <linux/timer.h>
     21#include <sound/core.h>
     22
     23#include "ctvmem.h"
     24#include "cthardware.h"
     25#include "ctresource.h"
     26
     27enum CTALSADEVS {		/* Types of alsa devices */
     28	FRONT,
     29	SURROUND,
     30	CLFE,
     31	SIDE,
     32	IEC958,
     33	MIXER,
     34	NUM_CTALSADEVS		/* This should always be the last */
     35};
     36
     37struct ct_atc_chip_sub_details {
     38	u16 subsys;
     39	const char *nm_model;
     40};
     41
     42struct ct_atc_chip_details {
     43	u16 vendor;
     44	u16 device;
     45	const struct ct_atc_chip_sub_details *sub_details;
     46	const char *nm_card;
     47};
     48
     49struct ct_atc;
     50struct ct_timer;
     51struct ct_timer_instance;
     52
     53/* alsa pcm stream descriptor */
     54struct ct_atc_pcm {
     55	struct snd_pcm_substream *substream;
     56	void (*interrupt)(struct ct_atc_pcm *apcm);
     57	struct ct_timer_instance *timer;
     58	unsigned int started:1;
     59
     60	/* Only mono and interleaved modes are supported now. */
     61	struct ct_vm_block *vm_block;
     62	void *src;		/* SRC for interacting with host memory */
     63	void **srccs;		/* SRCs for sample rate conversion */
     64	void **srcimps;		/* SRC Input Mappers */
     65	void **amixers;		/* AMIXERs for routing converted data */
     66	void *mono;		/* A SUM resource for mixing chs to one */
     67	unsigned char n_srcc;	/* Number of converting SRCs */
     68	unsigned char n_srcimp;	/* Number of SRC Input Mappers */
     69	unsigned char n_amixer;	/* Number of AMIXERs */
     70};
     71
     72/* Chip resource management object */
     73struct ct_atc {
     74	struct pci_dev *pci;
     75	struct snd_card *card;
     76	unsigned int rsr; /* reference sample rate in Hz */
     77	unsigned int msr; /* master sample rate in rsr */
     78	unsigned int pll_rate; /* current rate of Phase Lock Loop */
     79
     80	int chip_type;
     81	int model;
     82	const char *chip_name;
     83	const char *model_name;
     84
     85	struct ct_vm *vm; /* device virtual memory manager for this card */
     86	int (*map_audio_buffer)(struct ct_atc *atc, struct ct_atc_pcm *apcm);
     87	void (*unmap_audio_buffer)(struct ct_atc *atc, struct ct_atc_pcm *apcm);
     88	unsigned long (*get_ptp_phys)(struct ct_atc *atc, int index);
     89
     90	struct mutex atc_mutex;
     91
     92	int (*pcm_playback_prepare)(struct ct_atc *atc,
     93				    struct ct_atc_pcm *apcm);
     94	int (*pcm_playback_start)(struct ct_atc *atc, struct ct_atc_pcm *apcm);
     95	int (*pcm_playback_stop)(struct ct_atc *atc, struct ct_atc_pcm *apcm);
     96	int (*pcm_playback_position)(struct ct_atc *atc,
     97				     struct ct_atc_pcm *apcm);
     98	int (*spdif_passthru_playback_prepare)(struct ct_atc *atc,
     99					       struct ct_atc_pcm *apcm);
    100	int (*pcm_capture_prepare)(struct ct_atc *atc, struct ct_atc_pcm *apcm);
    101	int (*pcm_capture_start)(struct ct_atc *atc, struct ct_atc_pcm *apcm);
    102	int (*pcm_capture_stop)(struct ct_atc *atc, struct ct_atc_pcm *apcm);
    103	int (*pcm_capture_position)(struct ct_atc *atc,
    104				    struct ct_atc_pcm *apcm);
    105	int (*pcm_release_resources)(struct ct_atc *atc,
    106				     struct ct_atc_pcm *apcm);
    107	int (*select_line_in)(struct ct_atc *atc);
    108	int (*select_mic_in)(struct ct_atc *atc);
    109	int (*select_digit_io)(struct ct_atc *atc);
    110	int (*line_front_unmute)(struct ct_atc *atc, unsigned char state);
    111	int (*line_surround_unmute)(struct ct_atc *atc, unsigned char state);
    112	int (*line_clfe_unmute)(struct ct_atc *atc, unsigned char state);
    113	int (*line_rear_unmute)(struct ct_atc *atc, unsigned char state);
    114	int (*line_in_unmute)(struct ct_atc *atc, unsigned char state);
    115	int (*mic_unmute)(struct ct_atc *atc, unsigned char state);
    116	int (*spdif_out_unmute)(struct ct_atc *atc, unsigned char state);
    117	int (*spdif_in_unmute)(struct ct_atc *atc, unsigned char state);
    118	int (*spdif_out_get_status)(struct ct_atc *atc, unsigned int *status);
    119	int (*spdif_out_set_status)(struct ct_atc *atc, unsigned int status);
    120	int (*spdif_out_passthru)(struct ct_atc *atc, unsigned char state);
    121	struct capabilities (*capabilities)(struct ct_atc *atc);
    122	int (*output_switch_get)(struct ct_atc *atc);
    123	int (*output_switch_put)(struct ct_atc *atc, int position);
    124	int (*mic_source_switch_get)(struct ct_atc *atc);
    125	int (*mic_source_switch_put)(struct ct_atc *atc, int position);
    126
    127	/* Don't touch! Used for internal object. */
    128	void *rsc_mgrs[NUM_RSCTYP]; /* chip resource managers */
    129	void *mixer;		/* internal mixer object */
    130	struct hw *hw;		/* chip specific hardware access object */
    131	void **daios;		/* digital audio io resources */
    132	void **pcm;		/* SUMs for collecting all pcm stream */
    133	void **srcs;		/* Sample Rate Converters for input signal */
    134	void **srcimps;		/* input mappers for SRCs */
    135	unsigned char n_daio;
    136	unsigned char n_src;
    137	unsigned char n_srcimp;
    138	unsigned char n_pcm;
    139
    140	struct ct_timer *timer;
    141
    142#ifdef CONFIG_PM_SLEEP
    143	int (*suspend)(struct ct_atc *atc);
    144	int (*resume)(struct ct_atc *atc);
    145#define NUM_PCMS (NUM_CTALSADEVS - 1)
    146	struct snd_pcm *pcms[NUM_PCMS];
    147#endif
    148};
    149
    150
    151int ct_atc_create(struct snd_card *card, struct pci_dev *pci,
    152		  unsigned int rsr, unsigned int msr, int chip_type,
    153		  unsigned int subsysid, struct ct_atc **ratc);
    154int ct_atc_create_alsa_devs(struct ct_atc *atc);
    155
    156#endif /* CTATC_H */