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

controller.h (2669B)


      1/* SPDX-License-Identifier: GPL-2.0
      2 *
      3 * Copyright (C) 2016 Robert Jarzmik <robert.jarzmik@free.fr>
      4 */
      5
      6#ifndef AC97_CONTROLLER_H
      7#define AC97_CONTROLLER_H
      8
      9#include <linux/device.h>
     10#include <linux/list.h>
     11
     12#define AC97_BUS_MAX_CODECS 4
     13#define AC97_SLOTS_AVAILABLE_ALL 0xf
     14
     15struct ac97_controller_ops;
     16
     17/**
     18 * struct ac97_controller - The AC97 controller of the AC-Link
     19 * @ops:		the AC97 operations.
     20 * @controllers:	linked list of all existing controllers.
     21 * @adap:		the shell device ac97-%d, ie. ac97 adapter
     22 * @nr:			the number of the shell device
     23 * @slots_available:	the mask of accessible/scanable codecs.
     24 * @parent:		the device providing the AC97 controller.
     25 * @codecs:		the 4 possible AC97 codecs (NULL if none found).
     26 * @codecs_pdata:	platform_data for each codec (NULL if no pdata).
     27 *
     28 * This structure is internal to AC97 bus, and should not be used by the
     29 * controllers themselves, excepting for using @dev.
     30 */
     31struct ac97_controller {
     32	const struct ac97_controller_ops *ops;
     33	struct list_head controllers;
     34	struct device adap;
     35	int nr;
     36	unsigned short slots_available;
     37	struct device *parent;
     38	struct ac97_codec_device *codecs[AC97_BUS_MAX_CODECS];
     39	void *codecs_pdata[AC97_BUS_MAX_CODECS];
     40};
     41
     42/**
     43 * struct ac97_controller_ops - The AC97 operations
     44 * @reset:	Cold reset of the AC97 AC-Link.
     45 * @warm_reset:	Warm reset of the AC97 AC-Link.
     46 * @read:	Read of a single AC97 register.
     47 *		Returns the register value or a negative error code.
     48 * @write:	Write of a single AC97 register.
     49 *
     50 * These are the basic operation an AC97 controller must provide for an AC97
     51 * access functions. Amongst these, all but the last 2 are mandatory.
     52 * The slot number is also known as the AC97 codec number, between 0 and 3.
     53 */
     54struct ac97_controller_ops {
     55	void (*reset)(struct ac97_controller *adrv);
     56	void (*warm_reset)(struct ac97_controller *adrv);
     57	int (*write)(struct ac97_controller *adrv, int slot,
     58		     unsigned short reg, unsigned short val);
     59	int (*read)(struct ac97_controller *adrv, int slot, unsigned short reg);
     60};
     61
     62#if IS_ENABLED(CONFIG_AC97_BUS_NEW)
     63struct ac97_controller *snd_ac97_controller_register(
     64	const struct ac97_controller_ops *ops, struct device *dev,
     65	unsigned short slots_available, void **codecs_pdata);
     66void snd_ac97_controller_unregister(struct ac97_controller *ac97_ctrl);
     67#else
     68static inline struct ac97_controller *
     69snd_ac97_controller_register(const struct ac97_controller_ops *ops,
     70			     struct device *dev,
     71			     unsigned short slots_available,
     72			     void **codecs_pdata)
     73{
     74	return ERR_PTR(-ENODEV);
     75}
     76
     77static inline void
     78snd_ac97_controller_unregister(struct ac97_controller *ac97_ctrl)
     79{
     80}
     81#endif
     82
     83#endif