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

vlynq.h (3300B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Copyright (C) 2006, 2007 Eugene Konev <ejka@openwrt.org>
      4 */
      5
      6#ifndef __VLYNQ_H__
      7#define __VLYNQ_H__
      8
      9#include <linux/device.h>
     10#include <linux/types.h>
     11
     12struct module;
     13
     14#define VLYNQ_NUM_IRQS 32
     15
     16struct vlynq_mapping {
     17	u32 size;
     18	u32 offset;
     19};
     20
     21enum vlynq_divisor {
     22	vlynq_div_auto = 0,
     23	vlynq_ldiv1,
     24	vlynq_ldiv2,
     25	vlynq_ldiv3,
     26	vlynq_ldiv4,
     27	vlynq_ldiv5,
     28	vlynq_ldiv6,
     29	vlynq_ldiv7,
     30	vlynq_ldiv8,
     31	vlynq_rdiv1,
     32	vlynq_rdiv2,
     33	vlynq_rdiv3,
     34	vlynq_rdiv4,
     35	vlynq_rdiv5,
     36	vlynq_rdiv6,
     37	vlynq_rdiv7,
     38	vlynq_rdiv8,
     39	vlynq_div_external
     40};
     41
     42struct vlynq_device_id {
     43	u32 id;
     44	enum vlynq_divisor divisor;
     45	unsigned long driver_data;
     46};
     47
     48struct vlynq_regs;
     49struct vlynq_device {
     50	u32 id, dev_id;
     51	int local_irq;
     52	int remote_irq;
     53	enum vlynq_divisor divisor;
     54	u32 regs_start, regs_end;
     55	u32 mem_start, mem_end;
     56	u32 irq_start, irq_end;
     57	int irq;
     58	int enabled;
     59	struct vlynq_regs *local;
     60	struct vlynq_regs *remote;
     61	struct device dev;
     62};
     63
     64struct vlynq_driver {
     65	char *name;
     66	struct vlynq_device_id *id_table;
     67	int (*probe)(struct vlynq_device *dev, struct vlynq_device_id *id);
     68	void (*remove)(struct vlynq_device *dev);
     69	struct device_driver driver;
     70};
     71
     72struct plat_vlynq_ops {
     73	int (*on)(struct vlynq_device *dev);
     74	void (*off)(struct vlynq_device *dev);
     75};
     76
     77static inline struct vlynq_driver *to_vlynq_driver(struct device_driver *drv)
     78{
     79	return container_of(drv, struct vlynq_driver, driver);
     80}
     81
     82static inline struct vlynq_device *to_vlynq_device(struct device *device)
     83{
     84	return container_of(device, struct vlynq_device, dev);
     85}
     86
     87extern struct bus_type vlynq_bus_type;
     88
     89extern int __vlynq_register_driver(struct vlynq_driver *driver,
     90				   struct module *owner);
     91
     92static inline int vlynq_register_driver(struct vlynq_driver *driver)
     93{
     94	return __vlynq_register_driver(driver, THIS_MODULE);
     95}
     96
     97static inline void *vlynq_get_drvdata(struct vlynq_device *dev)
     98{
     99	return dev_get_drvdata(&dev->dev);
    100}
    101
    102static inline void vlynq_set_drvdata(struct vlynq_device *dev, void *data)
    103{
    104	dev_set_drvdata(&dev->dev, data);
    105}
    106
    107static inline u32 vlynq_mem_start(struct vlynq_device *dev)
    108{
    109	return dev->mem_start;
    110}
    111
    112static inline u32 vlynq_mem_end(struct vlynq_device *dev)
    113{
    114	return dev->mem_end;
    115}
    116
    117static inline u32 vlynq_mem_len(struct vlynq_device *dev)
    118{
    119	return dev->mem_end - dev->mem_start + 1;
    120}
    121
    122static inline int vlynq_virq_to_irq(struct vlynq_device *dev, int virq)
    123{
    124	int irq = dev->irq_start + virq;
    125	if ((irq < dev->irq_start) || (irq > dev->irq_end))
    126		return -EINVAL;
    127
    128	return irq;
    129}
    130
    131static inline int vlynq_irq_to_virq(struct vlynq_device *dev, int irq)
    132{
    133	if ((irq < dev->irq_start) || (irq > dev->irq_end))
    134		return -EINVAL;
    135
    136	return irq - dev->irq_start;
    137}
    138
    139extern void vlynq_unregister_driver(struct vlynq_driver *driver);
    140extern int vlynq_enable_device(struct vlynq_device *dev);
    141extern void vlynq_disable_device(struct vlynq_device *dev);
    142extern int vlynq_set_local_mapping(struct vlynq_device *dev, u32 tx_offset,
    143				   struct vlynq_mapping *mapping);
    144extern int vlynq_set_remote_mapping(struct vlynq_device *dev, u32 tx_offset,
    145				    struct vlynq_mapping *mapping);
    146extern int vlynq_set_local_irq(struct vlynq_device *dev, int virq);
    147extern int vlynq_set_remote_irq(struct vlynq_device *dev, int virq);
    148
    149#endif /* __VLYNQ_H__ */