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

dvb_ca_en50221.h (4455B)


      1/*
      2 * dvb_ca.h: generic DVB functions for EN50221 CA interfaces
      3 *
      4 * Copyright (C) 2004 Andrew de Quincey
      5 *
      6 * This program is free software; you can redistribute it and/or
      7 * modify it under the terms of the GNU Lesser General Public License
      8 * as published by the Free Software Foundation; either version 2.1
      9 * of the License, or (at your option) any later version.
     10 *
     11 * This program is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
     14 * GNU General Public License for more details.
     15 */
     16
     17#ifndef _DVB_CA_EN50221_H_
     18#define _DVB_CA_EN50221_H_
     19
     20#include <linux/list.h>
     21#include <linux/dvb/ca.h>
     22
     23#include <media/dvbdev.h>
     24
     25#define DVB_CA_EN50221_POLL_CAM_PRESENT	1
     26#define DVB_CA_EN50221_POLL_CAM_CHANGED	2
     27#define DVB_CA_EN50221_POLL_CAM_READY		4
     28
     29#define DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE	1
     30#define DVB_CA_EN50221_FLAG_IRQ_FR		2
     31#define DVB_CA_EN50221_FLAG_IRQ_DA		4
     32
     33#define DVB_CA_EN50221_CAMCHANGE_REMOVED		0
     34#define DVB_CA_EN50221_CAMCHANGE_INSERTED		1
     35
     36/**
     37 * struct dvb_ca_en50221- Structure describing a CA interface
     38 *
     39 * @owner:		the module owning this structure
     40 * @read_attribute_mem:	function for reading attribute memory on the CAM
     41 * @write_attribute_mem: function for writing attribute memory on the CAM
     42 * @read_cam_control:	function for reading the control interface on the CAM
     43 * @write_cam_control:	function for reading the control interface on the CAM
     44 * @read_data:		function for reading data (block mode)
     45 * @write_data:		function for writing data (block mode)
     46 * @slot_reset:		function to reset the CAM slot
     47 * @slot_shutdown:	function to shutdown a CAM slot
     48 * @slot_ts_enable:	function to enable the Transport Stream on a CAM slot
     49 * @poll_slot_status:	function to poll slot status. Only necessary if
     50 *			DVB_CA_FLAG_EN50221_IRQ_CAMCHANGE is not set.
     51 * @data:		private data, used by caller.
     52 * @private:		Opaque data used by the dvb_ca core. Do not modify!
     53 *
     54 * NOTE: the read_*, write_* and poll_slot_status functions will be
     55 * called for different slots concurrently and need to use locks where
     56 * and if appropriate. There will be no concurrent access to one slot.
     57 */
     58struct dvb_ca_en50221 {
     59	struct module *owner;
     60
     61	int (*read_attribute_mem)(struct dvb_ca_en50221 *ca,
     62				  int slot, int address);
     63	int (*write_attribute_mem)(struct dvb_ca_en50221 *ca,
     64				   int slot, int address, u8 value);
     65
     66	int (*read_cam_control)(struct dvb_ca_en50221 *ca,
     67				int slot, u8 address);
     68	int (*write_cam_control)(struct dvb_ca_en50221 *ca,
     69				 int slot, u8 address, u8 value);
     70
     71	int (*read_data)(struct dvb_ca_en50221 *ca,
     72			 int slot, u8 *ebuf, int ecount);
     73	int (*write_data)(struct dvb_ca_en50221 *ca,
     74			  int slot, u8 *ebuf, int ecount);
     75
     76	int (*slot_reset)(struct dvb_ca_en50221 *ca, int slot);
     77	int (*slot_shutdown)(struct dvb_ca_en50221 *ca, int slot);
     78	int (*slot_ts_enable)(struct dvb_ca_en50221 *ca, int slot);
     79
     80	int (*poll_slot_status)(struct dvb_ca_en50221 *ca, int slot, int open);
     81
     82	void *data;
     83
     84	void *private;
     85};
     86
     87/*
     88 * Functions for reporting IRQ events
     89 */
     90
     91/**
     92 * dvb_ca_en50221_camchange_irq - A CAMCHANGE IRQ has occurred.
     93 *
     94 * @pubca: CA instance.
     95 * @slot: Slot concerned.
     96 * @change_type: One of the DVB_CA_CAMCHANGE_* values
     97 */
     98void dvb_ca_en50221_camchange_irq(struct dvb_ca_en50221 *pubca, int slot,
     99				  int change_type);
    100
    101/**
    102 * dvb_ca_en50221_camready_irq - A CAMREADY IRQ has occurred.
    103 *
    104 * @pubca: CA instance.
    105 * @slot: Slot concerned.
    106 */
    107void dvb_ca_en50221_camready_irq(struct dvb_ca_en50221 *pubca, int slot);
    108
    109/**
    110 * dvb_ca_en50221_frda_irq - An FR or a DA IRQ has occurred.
    111 *
    112 * @ca: CA instance.
    113 * @slot: Slot concerned.
    114 */
    115void dvb_ca_en50221_frda_irq(struct dvb_ca_en50221 *ca, int slot);
    116
    117/*
    118 * Initialisation/shutdown functions
    119 */
    120
    121/**
    122 * dvb_ca_en50221_init - Initialise a new DVB CA device.
    123 *
    124 * @dvb_adapter: DVB adapter to attach the new CA device to.
    125 * @ca: The dvb_ca instance.
    126 * @flags: Flags describing the CA device (DVB_CA_EN50221_FLAG_*).
    127 * @slot_count: Number of slots supported.
    128 *
    129 * @return 0 on success, nonzero on failure
    130 */
    131int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter,
    132			struct dvb_ca_en50221 *ca, int flags,
    133			       int slot_count);
    134
    135/**
    136 * dvb_ca_en50221_release - Release a DVB CA device.
    137 *
    138 * @ca: The associated dvb_ca instance.
    139 */
    140void dvb_ca_en50221_release(struct dvb_ca_en50221 *ca);
    141
    142#endif