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

saa7164-types.h (8968B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 *  Driver for the NXP SAA7164 PCIe bridge
      4 *
      5 *  Copyright (c) 2010-2015 Steven Toth <stoth@kernellabs.com>
      6 */
      7
      8/* TODO: Cleanup and shorten the namespace */
      9
     10/* Some structures are passed directly to/from the firmware and
     11 * have strict alignment requirements. This is one of them.
     12 */
     13struct tmComResHWDescr {
     14	u8	bLength;
     15	u8	bDescriptorType;
     16	u8	bDescriptorSubtype;
     17	u16	bcdSpecVersion;
     18	u32	dwClockFrequency;
     19	u32	dwClockUpdateRes;
     20	u8	bCapabilities;
     21	u32	dwDeviceRegistersLocation;
     22	u32	dwHostMemoryRegion;
     23	u32	dwHostMemoryRegionSize;
     24	u32	dwHostHibernatMemRegion;
     25	u32	dwHostHibernatMemRegionSize;
     26} __attribute__((packed));
     27
     28/* This is DWORD aligned on windows but I can't find the right
     29 * gcc syntax to match the binary data from the device.
     30 * I've manually padded with Reserved[3] bytes to match the hardware,
     31 * but this could break if GCC decides to pack in a different way.
     32 */
     33struct tmComResInterfaceDescr {
     34	u8	bLength;
     35	u8	bDescriptorType;
     36	u8	bDescriptorSubtype;
     37	u8	bFlags;
     38	u8	bInterfaceType;
     39	u8	bInterfaceId;
     40	u8	bBaseInterface;
     41	u8	bInterruptId;
     42	u8	bDebugInterruptId;
     43	u8	BARLocation;
     44	u8	Reserved[3];
     45};
     46
     47struct tmComResBusDescr {
     48	u64	CommandRing;
     49	u64	ResponseRing;
     50	u32	CommandWrite;
     51	u32	CommandRead;
     52	u32	ResponseWrite;
     53	u32	ResponseRead;
     54};
     55
     56enum tmBusType {
     57	NONE		= 0,
     58	TYPE_BUS_PCI	= 1,
     59	TYPE_BUS_PCIe	= 2,
     60	TYPE_BUS_USB	= 3,
     61	TYPE_BUS_I2C	= 4
     62};
     63
     64struct tmComResBusInfo {
     65	enum tmBusType Type;
     66	u16	m_wMaxReqSize;
     67	u8 __iomem *m_pdwSetRing;
     68	u32	m_dwSizeSetRing;
     69	u8 __iomem *m_pdwGetRing;
     70	u32	m_dwSizeGetRing;
     71	u32	m_dwSetWritePos;
     72	u32	m_dwSetReadPos;
     73	u32	m_dwGetWritePos;
     74	u32	m_dwGetReadPos;
     75
     76	/* All access is protected */
     77	struct mutex lock;
     78
     79};
     80
     81struct tmComResInfo {
     82	u8	id;
     83	u8	flags;
     84	u16	size;
     85	u32	command;
     86	u16	controlselector;
     87	u8	seqno;
     88} __attribute__((packed));
     89
     90enum tmComResCmd {
     91	SET_CUR  = 0x01,
     92	GET_CUR  = 0x81,
     93	GET_MIN  = 0x82,
     94	GET_MAX  = 0x83,
     95	GET_RES  = 0x84,
     96	GET_LEN  = 0x85,
     97	GET_INFO = 0x86,
     98	GET_DEF  = 0x87
     99};
    100
    101struct cmd {
    102	u8 seqno;
    103	u32 inuse;
    104	u32 timeout;
    105	u32 signalled;
    106	struct mutex lock;
    107	wait_queue_head_t wait;
    108};
    109
    110struct tmDescriptor {
    111	u32	pathid;
    112	u32	size;
    113	void	*descriptor;
    114};
    115
    116struct tmComResDescrHeader {
    117	u8	len;
    118	u8	type;
    119	u8	subtype;
    120	u8	unitid;
    121} __attribute__((packed));
    122
    123struct tmComResExtDevDescrHeader {
    124	u8	len;
    125	u8	type;
    126	u8	subtype;
    127	u8	unitid;
    128	u32	devicetype;
    129	u16	deviceid;
    130	u32	numgpiopins;
    131	u8	numgpiogroups;
    132	u8	controlsize;
    133} __attribute__((packed));
    134
    135struct tmComResGPIO {
    136	u32	pin;
    137	u8	state;
    138} __attribute__((packed));
    139
    140struct tmComResPathDescrHeader {
    141	u8	len;
    142	u8	type;
    143	u8	subtype;
    144	u8	pathid;
    145} __attribute__((packed));
    146
    147/* terminaltype */
    148enum tmComResTermType {
    149	ITT_ANTENNA              = 0x0203,
    150	LINE_CONNECTOR           = 0x0603,
    151	SPDIF_CONNECTOR          = 0x0605,
    152	COMPOSITE_CONNECTOR      = 0x0401,
    153	SVIDEO_CONNECTOR         = 0x0402,
    154	COMPONENT_CONNECTOR      = 0x0403,
    155	STANDARD_DMA             = 0xF101
    156};
    157
    158struct tmComResAntTermDescrHeader {
    159	u8	len;
    160	u8	type;
    161	u8	subtype;
    162	u8	terminalid;
    163	u16	terminaltype;
    164	u8	assocterminal;
    165	u8	iterminal;
    166	u8	controlsize;
    167} __attribute__((packed));
    168
    169struct tmComResTunerDescrHeader {
    170	u8	len;
    171	u8	type;
    172	u8	subtype;
    173	u8	unitid;
    174	u8	sourceid;
    175	u8	iunit;
    176	u32	tuningstandards;
    177	u8	controlsize;
    178	u32	controls;
    179} __attribute__((packed));
    180
    181enum tmBufferFlag {
    182	/* the buffer does not contain any valid data */
    183	TM_BUFFER_FLAG_EMPTY,
    184
    185	/* the buffer is filled with valid data */
    186	TM_BUFFER_FLAG_DONE,
    187
    188	/* the buffer is the dummy buffer - TODO??? */
    189	TM_BUFFER_FLAG_DUMMY_BUFFER
    190};
    191
    192struct tmBuffer {
    193	u64		*pagetablevirt;
    194	u64		pagetablephys;
    195	u16		offset;
    196	u8		*context;
    197	u64		timestamp;
    198	enum tmBufferFlag BufferFlag;
    199	u32		lostbuffers;
    200	u32		validbuffers;
    201	u64		*dummypagevirt;
    202	u64		dummypagephys;
    203	u64		*addressvirt;
    204};
    205
    206struct tmHWStreamParameters {
    207	u32	bitspersample;
    208	u32	samplesperline;
    209	u32	numberoflines;
    210	u32	pitch;
    211	u32	linethreshold;
    212	u64	**pagetablelistvirt;
    213	u64	*pagetablelistphys;
    214	u32	numpagetables;
    215	u32	numpagetableentries;
    216};
    217
    218struct tmStreamParameters {
    219	struct tmHWStreamParameters	HWStreamParameters;
    220	u64				qwDummyPageTablePhys;
    221	u64				*pDummyPageTableVirt;
    222};
    223
    224struct tmComResDMATermDescrHeader {
    225	u8	len;
    226	u8	type;
    227	u8	subtyle;
    228	u8	unitid;
    229	u16	terminaltype;
    230	u8	assocterminal;
    231	u8	sourceid;
    232	u8	iterminal;
    233	u32	BARLocation;
    234	u8	flags;
    235	u8	interruptid;
    236	u8	buffercount;
    237	u8	metadatasize;
    238	u8	numformats;
    239	u8	controlsize;
    240} __attribute__((packed));
    241
    242/*
    243 *
    244 * Description:
    245 *  This is the transport stream format header.
    246 *
    247 * Settings:
    248 *  bLength                 - The size of this descriptor in bytes.
    249 *  bDescriptorType         - CS_INTERFACE.
    250 *  bDescriptorSubtype      - VS_FORMAT_MPEG2TS descriptor subtype.
    251 *  bFormatIndex            - A non-zero constant that uniquely identifies the
    252 *                            format.
    253 *  bDataOffset             - Offset to TSP packet within MPEG-2 TS transport
    254 *                            stride, in bytes.
    255 *  bPacketLength           - Length of TSP packet, in bytes (typically 188).
    256 *  bStrideLength           - Length of MPEG-2 TS transport stride.
    257 *  guidStrideFormat        - A Globally Unique Identifier indicating the
    258 *                            format of the stride data (if any). Set to zeros
    259 *                            if there is no Stride Data, or if the Stride
    260 *                            Data is to be ignored by the application.
    261 *
    262 */
    263struct tmComResTSFormatDescrHeader {
    264	u8	len;
    265	u8	type;
    266	u8	subtype;
    267	u8	bFormatIndex;
    268	u8	bDataOffset;
    269	u8	bPacketLength;
    270	u8	bStrideLength;
    271	u8	guidStrideFormat[16];
    272} __attribute__((packed));
    273
    274/* Encoder related structures */
    275
    276/* A/V Mux Selector */
    277struct tmComResSelDescrHeader {
    278	u8	len;
    279	u8	type;
    280	u8	subtype;
    281	u8	unitid;
    282	u8	nrinpins;
    283	u8	sourceid;
    284} __attribute__((packed));
    285
    286/* A/V Audio processor definitions */
    287struct tmComResProcDescrHeader {
    288	u8	len;
    289	u8	type;
    290	u8	subtype;
    291	u8	unitid;
    292	u8	sourceid;
    293	u16	wreserved;
    294	u8	controlsize;
    295} __attribute__((packed));
    296
    297/* Video bitrate control message */
    298#define EU_VIDEO_BIT_RATE_MODE_CONSTANT		(0)
    299#define EU_VIDEO_BIT_RATE_MODE_VARIABLE_AVERAGE (1)
    300#define EU_VIDEO_BIT_RATE_MODE_VARIABLE_PEAK	(2)
    301struct tmComResEncVideoBitRate {
    302	u8	ucVideoBitRateMode;
    303	u32	dwVideoBitRate;
    304	u32	dwVideoBitRatePeak;
    305} __attribute__((packed));
    306
    307/* Video Encoder Aspect Ratio message */
    308struct tmComResEncVideoInputAspectRatio {
    309	u8	width;
    310	u8	height;
    311} __attribute__((packed));
    312
    313/* Video Encoder GOP IBP message */
    314/* 1. IPPPPPPPPPPPPPP */
    315/* 2. IBPBPBPBPBPBPBP */
    316/* 3. IBBPBBPBBPBBP   */
    317#define SAA7164_ENCODER_DEFAULT_GOP_DIST (1)
    318#define SAA7164_ENCODER_DEFAULT_GOP_SIZE (15)
    319struct tmComResEncVideoGopStructure {
    320	u8	ucGOPSize;	/* GOP Size 12, 15 */
    321	u8	ucRefFrameDist; /* Reference Frame Distance */
    322} __attribute__((packed));
    323
    324/* Encoder processor definition */
    325struct tmComResEncoderDescrHeader {
    326	u8	len;
    327	u8	type;
    328	u8	subtype;
    329	u8	unitid;
    330	u8	vsourceid;
    331	u8	asourceid;
    332	u8	iunit;
    333	u32	dwmControlCap;
    334	u32	dwmProfileCap;
    335	u32	dwmVidFormatCap;
    336	u8	bmVidBitrateCap;
    337	u16	wmVidResolutionsCap;
    338	u16	wmVidFrmRateCap;
    339	u32	dwmAudFormatCap;
    340	u8	bmAudBitrateCap;
    341} __attribute__((packed));
    342
    343/* Audio processor definition */
    344struct tmComResAFeatureDescrHeader {
    345	u8	len;
    346	u8	type;
    347	u8	subtype;
    348	u8	unitid;
    349	u8	sourceid;
    350	u8	controlsize;
    351} __attribute__((packed));
    352
    353/* Audio control messages */
    354struct tmComResAudioDefaults {
    355	u8	ucDecoderLevel;
    356	u8	ucDecoderFM_Level;
    357	u8	ucMonoLevel;
    358	u8	ucNICAM_Level;
    359	u8	ucSAP_Level;
    360	u8	ucADC_Level;
    361} __attribute__((packed));
    362
    363/* Audio bitrate control message */
    364struct tmComResEncAudioBitRate {
    365	u8	ucAudioBitRateMode;
    366	u32	dwAudioBitRate;
    367	u32	dwAudioBitRatePeak;
    368} __attribute__((packed));
    369
    370/* Tuner / AV Decoder messages */
    371struct tmComResTunerStandard {
    372	u8	std;
    373	u32	country;
    374} __attribute__((packed));
    375
    376struct tmComResTunerStandardAuto {
    377	u8	mode;
    378} __attribute__((packed));
    379
    380/* EEPROM definition for PS stream types */
    381struct tmComResPSFormatDescrHeader {
    382	u8	len;
    383	u8	type;
    384	u8	subtype;
    385	u8	bFormatIndex;
    386	u16	wPacketLength;
    387	u16	wPackLength;
    388	u8	bPackDataType;
    389} __attribute__((packed));
    390
    391/* VBI control structure */
    392struct tmComResVBIFormatDescrHeader {
    393	u8	len;
    394	u8	type;
    395	u8	subtype; /* VS_FORMAT_VBI */
    396	u8	bFormatIndex;
    397	u32	VideoStandard; /* See KS_AnalogVideoStandard, NTSC = 1 */
    398	u8	StartLine; /* NTSC Start = 10 */
    399	u8	EndLine; /* NTSC = 21 */
    400	u8	FieldRate; /* 60 for NTSC */
    401	u8	bNumLines; /* Unused - scheduled for removal */
    402} __attribute__((packed));
    403
    404struct tmComResProbeCommit {
    405	u16	bmHint;
    406	u8	bFormatIndex;
    407	u8	bFrameIndex;
    408} __attribute__((packed));
    409
    410struct tmComResDebugSetLevel {
    411	u32	dwDebugLevel;
    412} __attribute__((packed));
    413
    414struct tmComResDebugGetData {
    415	u32	dwResult;
    416	u8	ucDebugData[256];
    417} __attribute__((packed));
    418
    419struct tmFwInfoStruct {
    420	u32	status;
    421	u32	mode;
    422	u32	devicespec;
    423	u32	deviceinst;
    424	u32	CPULoad;
    425	u32	RemainHeap;
    426	u32	CPUClock;
    427	u32	RAMSpeed;
    428} __attribute__((packed));