Blame src/iec61883-private.h

Packit 0bbbb1
/*
Packit 0bbbb1
 * iec61883-private.h - Linux IEEE 1394 streaming media library.
Packit 0bbbb1
 * Copyright (C) 2004 Kristian Hogsberg, Dan Dennedy, and Dan Maas.
Packit 0bbbb1
 *
Packit 0bbbb1
 * This library is free software; you can redistribute it and/or
Packit 0bbbb1
 * modify it under the terms of the GNU Lesser General Public
Packit 0bbbb1
 * License as published by the Free Software Foundation; either
Packit 0bbbb1
 * version 2 of the License, or (at your option) any later version.
Packit 0bbbb1
 *
Packit 0bbbb1
 * This library is distributed in the hope that it will be useful,
Packit 0bbbb1
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 0bbbb1
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 0bbbb1
 * Lesser General Public License for more details.
Packit 0bbbb1
 *
Packit 0bbbb1
 * You should have received a copy of the GNU Lesser General Public
Packit 0bbbb1
 * License along with this library; if not, write to the Free Software
Packit 0bbbb1
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit 0bbbb1
 */
Packit 0bbbb1
Packit 0bbbb1
#ifndef _IEC61883_PRIVATE_H
Packit 0bbbb1
#define _IEC61883_PRIVATE_H
Packit 0bbbb1
Packit 0bbbb1
#include <libraw1394/raw1394.h>
Packit 0bbbb1
#include <endian.h>
Packit 0bbbb1
#include "tsbuffer.h"
Packit 0bbbb1
Packit 0bbbb1
#ifdef __cplusplus
Packit 0bbbb1
extern "C" {
Packit 0bbbb1
#endif
Packit 0bbbb1
Packit 0bbbb1
#ifdef IEC61883_DEBUG
Packit 0bbbb1
#define DEBUG(s, args...) fprintf(stderr, "libiec61883 debug: " s "\n", ## args)
Packit 0bbbb1
#else
Packit 0bbbb1
#define DEBUG(s, args...)
Packit 0bbbb1
#endif
Packit 0bbbb1
#ifndef QUIET
Packit 0bbbb1
#define WARN(s, args...) {fprintf(stderr, "libiec61883 warning: " s "\n", ## args);}
Packit 0bbbb1
#else
Packit 0bbbb1
#define WARN(s, args...) {}
Packit 0bbbb1
#endif
Packit 0bbbb1
#define FAIL(s, args...) {fprintf(stderr, "libiec61883 error: " s "\n", ## args);return(-1);}
Packit 0bbbb1
Packit 0bbbb1
/*
Packit 0bbbb1
 * The TAG value is present in the isochronous header (first quadlet). It
Packit 0bbbb1
 * provides a high level label for the format of data carried by the
Packit 0bbbb1
 * isochronous packet.
Packit 0bbbb1
 */
Packit 0bbbb1
Packit 0bbbb1
#define IEC61883_TAG_WITHOUT_CIP 0 /* CIP header NOT included */
Packit 0bbbb1
#define IEC61883_TAG_WITH_CIP    1 /* CIP header included. */
Packit 0bbbb1
#define IEC61883_TAG_RESERVED1   2 /* Reserved */
Packit 0bbbb1
#define IEC61883_TAG_RESERVED2   3 /* Reserved */
Packit 0bbbb1
Packit 0bbbb1
/**
Packit 0bbbb1
 * Common Isochronous Protocol
Packit 0bbbb1
 **/
Packit 0bbbb1
Packit 0bbbb1
#define IEC61883_FMT_DV 0x00
Packit 0bbbb1
#define IEC61883_FMT_AMDTP 0x10
Packit 0bbbb1
#define IEC61883_FMT_MPEG2 0x20
Packit 0bbbb1
Packit 0bbbb1
#if __BYTE_ORDER == __BIG_ENDIAN
Packit 0bbbb1
Packit 0bbbb1
struct iso_packet_header {
Packit 0bbbb1
	unsigned int data_length : 16;
Packit 0bbbb1
	unsigned int tag         : 2;
Packit 0bbbb1
	unsigned int channel     : 6;
Packit 0bbbb1
	unsigned int tcode       : 4;
Packit 0bbbb1
	unsigned int sy          : 4;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_packet {
Packit 0bbbb1
	/* First quadlet */
Packit 0bbbb1
	unsigned int dbs      : 8;
Packit 0bbbb1
	unsigned int eoh0     : 2;
Packit 0bbbb1
	unsigned int sid      : 6;
Packit 0bbbb1
Packit 0bbbb1
	unsigned int dbc      : 8;
Packit 0bbbb1
	unsigned int fn       : 2;
Packit 0bbbb1
	unsigned int qpc      : 3;
Packit 0bbbb1
	unsigned int sph      : 1;
Packit 0bbbb1
	unsigned int reserved : 2;
Packit 0bbbb1
Packit 0bbbb1
	/* Second quadlet */
Packit 0bbbb1
	unsigned int fdf      : 8;
Packit 0bbbb1
	unsigned int eoh1     : 2;
Packit 0bbbb1
	unsigned int fmt      : 6;
Packit 0bbbb1
Packit 0bbbb1
	unsigned int syt      : 16;
Packit 0bbbb1
Packit 0bbbb1
	unsigned char data[0];
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
#elif __BYTE_ORDER == __LITTLE_ENDIAN
Packit 0bbbb1
Packit 0bbbb1
struct iso_packet_header {
Packit 0bbbb1
	unsigned int data_length : 16;
Packit 0bbbb1
	unsigned int channel     : 6;
Packit 0bbbb1
	unsigned int tag         : 2;
Packit 0bbbb1
	unsigned int sy          : 4;
Packit 0bbbb1
	unsigned int tcode       : 4;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_packet {
Packit 0bbbb1
	/* First quadlet */
Packit 0bbbb1
	unsigned int sid      : 6;
Packit 0bbbb1
	unsigned int eoh0     : 2;
Packit 0bbbb1
	unsigned int dbs      : 8;
Packit 0bbbb1
Packit 0bbbb1
	unsigned int reserved : 2;
Packit 0bbbb1
	unsigned int sph      : 1;
Packit 0bbbb1
	unsigned int qpc      : 3;
Packit 0bbbb1
	unsigned int fn       : 2;
Packit 0bbbb1
	unsigned int dbc      : 8;
Packit 0bbbb1
Packit 0bbbb1
	/* Second quadlet */
Packit 0bbbb1
	unsigned int fmt      : 6;
Packit 0bbbb1
	unsigned int eoh1     : 2;
Packit 0bbbb1
	unsigned int fdf      : 8;
Packit 0bbbb1
Packit 0bbbb1
	unsigned int syt      : 16;
Packit 0bbbb1
Packit 0bbbb1
	unsigned char data[0];
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
#else
Packit 0bbbb1
Packit 0bbbb1
#error Unknown bitfield type
Packit 0bbbb1
Packit 0bbbb1
#endif
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_fraction {
Packit 0bbbb1
	int integer;
Packit 0bbbb1
	int numerator;
Packit 0bbbb1
	int denominator;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_cip {
Packit 0bbbb1
	struct iec61883_fraction cycle_offset;
Packit 0bbbb1
	struct iec61883_fraction ticks_per_syt_offset;
Packit 0bbbb1
	struct iec61883_fraction ready_samples;
Packit 0bbbb1
	struct iec61883_fraction samples_per_cycle;
Packit 0bbbb1
	int dbc, dbs;
Packit 0bbbb1
	int cycle_count;
Packit 0bbbb1
	int mode;
Packit 0bbbb1
	int syt_interval;
Packit 0bbbb1
	int dimension;
Packit 0bbbb1
	int rate;
Packit 0bbbb1
	int fdf;
Packit 0bbbb1
	int format;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
void
Packit 0bbbb1
iec61883_cip_init(struct iec61883_cip *cip, int format, int fdf,
Packit 0bbbb1
		int rate, int dbs, int syt_interval);
Packit 0bbbb1
void
Packit 0bbbb1
iec61883_cip_resync(struct iec61883_cip *ptz, int cycle);
Packit 0bbbb1
void 
Packit 0bbbb1
iec61883_cip_set_transmission_mode(struct iec61883_cip *ptz, int mode);
Packit 0bbbb1
Packit 0bbbb1
int 
Packit 0bbbb1
iec61883_cip_get_max_packet_size(struct iec61883_cip *ptz);
Packit 0bbbb1
Packit 0bbbb1
int
Packit 0bbbb1
iec61883_cip_fill_header(raw1394handle_t handle, struct iec61883_cip *cip,
Packit 0bbbb1
		struct iec61883_packet *packet);
Packit 0bbbb1
Packit 0bbbb1
		
Packit 0bbbb1
/**
Packit 0bbbb1
 * Audio and Music Data Transport Protocol 
Packit 0bbbb1
 **/
Packit 0bbbb1
Packit 0bbbb1
#define IEC61883_FDF_NODATA   0xFF
Packit 0bbbb1
		
Packit 0bbbb1
/* AM824 format definitions. */
Packit 0bbbb1
#define IEC61883_FDF_AM824 0x00
Packit 0bbbb1
#define IEC61883_FDF_AM824_CONTROLLED 0x04
Packit 0bbbb1
#define IEC61883_FDF_SFC_MASK 0x03
Packit 0bbbb1
Packit 0bbbb1
#define IEC61883_AM824_LABEL              0x40
Packit 0bbbb1
#define IEC61883_AM824_LABEL_RAW_24BITS   0x40
Packit 0bbbb1
#define IEC61883_AM824_LABEL_RAW_20BITS   0x41
Packit 0bbbb1
#define IEC61883_AM824_LABEL_RAW_16BITS   0x42
Packit 0bbbb1
#define IEC61883_AM824_LABEL_RAW_RESERVED 0x43
Packit 0bbbb1
Packit 0bbbb1
#define IEC61883_AM824_VBL_24BITS   0x0
Packit 0bbbb1
#define IEC61883_AM824_VBL_20BITS   0x1
Packit 0bbbb1
#define IEC61883_AM824_VBL_16BITS   0x2
Packit 0bbbb1
#define IEC61883_AM824_VBL_RESERVED 0x3
Packit 0bbbb1
Packit 0bbbb1
/* IEC-60958 format definitions. */
Packit 0bbbb1
#define IEC60958_LABEL   0x0
Packit 0bbbb1
#define IEC60958_PAC_B   0x3 /* Preamble Code 'B': Start of channel 1, at
Packit 0bbbb1
			      * the start of a data block. */
Packit 0bbbb1
#define IEC60958_PAC_RSV 0x2 /* Preamble Code 'RESERVED' */
Packit 0bbbb1
#define IEC60958_PAC_M   0x1 /* Preamble Code 'M': Start of channel 1 that
Packit 0bbbb1
			      *	is not at the start of a data block. */
Packit 0bbbb1
#define IEC60958_PAC_W   0x0 /* Preamble Code 'W': start of channel 2. */
Packit 0bbbb1
#define IEC60958_DATA_VALID   0 /* When cleared means data is valid. */
Packit 0bbbb1
#define IEC60958_DATA_INVALID 1 /* When set means data is not suitable for an ADC. */
Packit 0bbbb1
Packit 0bbbb1
#if __BYTE_ORDER == __BIG_ENDIAN
Packit 0bbbb1
Packit 0bbbb1
struct iec60958_data {
Packit 0bbbb1
	u_int32_t data      : 24;
Packit 0bbbb1
	u_int32_t validity  : 1;
Packit 0bbbb1
	u_int32_t user_data : 1;
Packit 0bbbb1
	u_int32_t ch_status : 1;
Packit 0bbbb1
	u_int32_t parity    : 1;
Packit 0bbbb1
	u_int32_t pac       : 2;
Packit 0bbbb1
	u_int32_t label     : 2;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
#elif __BYTE_ORDER == __LITTLE_ENDIAN
Packit 0bbbb1
Packit 0bbbb1
struct iec60958_data {
Packit 0bbbb1
	u_int32_t data      : 24;
Packit 0bbbb1
	u_int32_t validity  : 1;
Packit 0bbbb1
	u_int32_t user_data : 1;
Packit 0bbbb1
	u_int32_t ch_status : 1;
Packit 0bbbb1
	u_int32_t parity    : 1;
Packit 0bbbb1
	u_int32_t pac       : 2;
Packit 0bbbb1
	u_int32_t label     : 2;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
#else
Packit 0bbbb1
Packit 0bbbb1
#error Unknown bitfield type
Packit 0bbbb1
Packit 0bbbb1
#endif
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_amdtp {
Packit 0bbbb1
	struct iec61883_cip cip;
Packit 0bbbb1
	int dimension;
Packit 0bbbb1
	int rate;
Packit 0bbbb1
	int iec958_rate_code;
Packit 0bbbb1
	int sample_format;
Packit 0bbbb1
	int iec958_frame_count;
Packit 0bbbb1
	iec61883_amdtp_recv_t put_data;
Packit 0bbbb1
	iec61883_amdtp_xmit_t get_data;
Packit 0bbbb1
	void *callback_data;
Packit 0bbbb1
	int format;
Packit 0bbbb1
	int syt_interval;
Packit 0bbbb1
	raw1394handle_t handle;
Packit 0bbbb1
	int channel;
Packit 0bbbb1
	unsigned int buffer_packets;
Packit 0bbbb1
	unsigned int prebuffer_packets;
Packit 0bbbb1
	unsigned int irq_interval;
Packit 0bbbb1
	int synch;
Packit 0bbbb1
	int speed;
Packit 0bbbb1
	unsigned int total_dropped;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
Packit 0bbbb1
/**
Packit 0bbbb1
 * DV Digital Video
Packit 0bbbb1
 **/
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_dv {
Packit 0bbbb1
	struct iec61883_cip cip;
Packit 0bbbb1
	iec61883_dv_recv_t put_data;
Packit 0bbbb1
	iec61883_dv_xmit_t get_data;
Packit 0bbbb1
	void *callback_data;
Packit 0bbbb1
	raw1394handle_t handle;
Packit 0bbbb1
	int channel;
Packit 0bbbb1
	unsigned int buffer_packets;
Packit 0bbbb1
	unsigned int prebuffer_packets;
Packit 0bbbb1
	unsigned int irq_interval;
Packit 0bbbb1
	int synch;
Packit 0bbbb1
	int speed;
Packit 0bbbb1
	unsigned int total_dropped;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_dv_fb {
Packit 0bbbb1
	iec61883_dv_t dv;
Packit 0bbbb1
	unsigned char data[480*300];
Packit 0bbbb1
	int len;
Packit 0bbbb1
	iec61883_dv_fb_recv_t put_data;
Packit 0bbbb1
	void *callback_data;
Packit 0bbbb1
	int ff;
Packit 0bbbb1
	unsigned int total_incomplete;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
Packit 0bbbb1
/**
Packit 0bbbb1
 * MPEG-2 Transport Stream
Packit 0bbbb1
 **/
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_mpeg2 {
Packit 0bbbb1
	struct iec61883_cip cip;
Packit 0bbbb1
	iec61883_mpeg2_recv_t put_data;
Packit 0bbbb1
	iec61883_mpeg2_xmit_t get_data;
Packit 0bbbb1
	void *callback_data;
Packit 0bbbb1
	int syt_interval;
Packit 0bbbb1
	raw1394handle_t handle;
Packit 0bbbb1
	int channel;
Packit 0bbbb1
	struct tsbuffer *tsbuffer;
Packit 0bbbb1
	unsigned int buffer_packets;
Packit 0bbbb1
	unsigned int prebuffer_packets;
Packit 0bbbb1
	unsigned int irq_interval;
Packit 0bbbb1
	int synch;
Packit 0bbbb1
	int speed;
Packit 0bbbb1
	unsigned int total_dropped;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
Packit 0bbbb1
/**
Packit 0bbbb1
 * Plug Control Registers
Packit 0bbbb1
 **/
Packit 0bbbb1
Packit 0bbbb1
/* maximum number of PCRs allowed within the standard 
Packit 0bbbb1
 * MPR/PCR addresses defined in IEC-61883.
Packit 0bbbb1
 * This refers to the number of output or input PCRs--
Packit 0bbbb1
 * not the MPRs and not the combined total.
Packit 0bbbb1
 */
Packit 0bbbb1
#define IEC61883_PCR_MAX 31
Packit 0bbbb1
Packit 0bbbb1
/* standard CSR offsets for plugs */
Packit 0bbbb1
#define CSR_O_MPR   0x900
Packit 0bbbb1
#define CSR_O_PCR_0 0x904
Packit 0bbbb1
Packit 0bbbb1
#define CSR_I_MPR   0x980
Packit 0bbbb1
#define CSR_I_PCR_0 0x984
Packit 0bbbb1
Packit 0bbbb1
#if ( __BYTE_ORDER == __BIG_ENDIAN )
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_oMPR {
Packit 0bbbb1
	unsigned int data_rate:2;
Packit 0bbbb1
	unsigned int bcast_channel:6;
Packit 0bbbb1
	unsigned int non_persist_ext:8;
Packit 0bbbb1
	unsigned int persist_ext:8;
Packit 0bbbb1
	unsigned int reserved:3;
Packit 0bbbb1
	unsigned int n_plugs:5;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_iMPR {
Packit 0bbbb1
	unsigned int data_rate:2;
Packit 0bbbb1
	unsigned int reserved:6;
Packit 0bbbb1
	unsigned int non_persist_ext:8;
Packit 0bbbb1
	unsigned int persist_ext:8;
Packit 0bbbb1
	unsigned int reserved2:3;
Packit 0bbbb1
	unsigned int n_plugs:5;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_oPCR {
Packit 0bbbb1
	unsigned int online:1;
Packit 0bbbb1
	unsigned int bcast_connection:1;
Packit 0bbbb1
	unsigned int n_p2p_connections:6;
Packit 0bbbb1
	unsigned int reserved:2;
Packit 0bbbb1
	unsigned int channel:6;
Packit 0bbbb1
	unsigned int data_rate:2;
Packit 0bbbb1
	unsigned int overhead_id:4;
Packit 0bbbb1
	unsigned int payload:10;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_iPCR {
Packit 0bbbb1
	unsigned int online:1;
Packit 0bbbb1
	unsigned int bcast_connection:1;
Packit 0bbbb1
	unsigned int n_p2p_connections:6;
Packit 0bbbb1
	unsigned int reserved:2;
Packit 0bbbb1
	unsigned int channel:6;
Packit 0bbbb1
	unsigned int reserved2:16;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
#else
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_oMPR {
Packit 0bbbb1
	unsigned int n_plugs:5;
Packit 0bbbb1
	unsigned int reserved:3;
Packit 0bbbb1
	unsigned int persist_ext:8;
Packit 0bbbb1
	unsigned int non_persist_ext:8;
Packit 0bbbb1
	unsigned int bcast_channel:6;
Packit 0bbbb1
	unsigned int data_rate:2;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_iMPR {
Packit 0bbbb1
	unsigned int n_plugs:5;
Packit 0bbbb1
	unsigned int reserved2:3;
Packit 0bbbb1
	unsigned int persist_ext:8;
Packit 0bbbb1
	unsigned int non_persist_ext:8;
Packit 0bbbb1
	unsigned int reserved:6;
Packit 0bbbb1
	unsigned int data_rate:2;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_oPCR {
Packit 0bbbb1
	unsigned int payload:10;
Packit 0bbbb1
	unsigned int overhead_id:4;
Packit 0bbbb1
	unsigned int data_rate:2;
Packit 0bbbb1
	unsigned int channel:6;
Packit 0bbbb1
	unsigned int reserved:2;
Packit 0bbbb1
	unsigned int n_p2p_connections:6;
Packit 0bbbb1
	unsigned int bcast_connection:1;
Packit 0bbbb1
	unsigned int online:1;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
struct iec61883_iPCR {
Packit 0bbbb1
	unsigned int reserved2:16;
Packit 0bbbb1
	unsigned int channel:6;
Packit 0bbbb1
	unsigned int reserved:2;
Packit 0bbbb1
	unsigned int n_p2p_connections:6;
Packit 0bbbb1
	unsigned int bcast_connection:1;
Packit 0bbbb1
	unsigned int online:1;
Packit 0bbbb1
};
Packit 0bbbb1
Packit 0bbbb1
#endif
Packit 0bbbb1
Packit 0bbbb1
/**
Packit 0bbbb1
 * iec61883_plug_get - Read a node's plug register.
Packit 0bbbb1
 * @h: A raw1394 handle.
Packit 0bbbb1
 * @n: The node id of the node to read
Packit 0bbbb1
 * @a: The CSR offset address (relative to base) of the register to read.
Packit 0bbbb1
 * @value: A pointer to a quadlet where the plug register's value will be stored.
Packit 0bbbb1
 * 
Packit 0bbbb1
 * This function handles bus to host endian conversion. It returns 0 for 
Packit 0bbbb1
 * suceess or -1 for error (errno available).
Packit 0bbbb1
 **/
Packit 0bbbb1
int
Packit 0bbbb1
iec61883_plug_get(raw1394handle_t h, nodeid_t n, nodeaddr_t a, quadlet_t *value);
Packit 0bbbb1
Packit 0bbbb1
Packit 0bbbb1
/** 
Packit 0bbbb1
 * iec61883_plug_set - Write a node's plug register.
Packit 0bbbb1
 * @h: A raw1394 handle.
Packit 0bbbb1
 * @n: The node id of the node to read
Packit 0bbbb1
 * @a: The CSR offset address (relative to CSR base) of the register to write.
Packit 0bbbb1
 * @value: A quadlet containing the new register value.
Packit 0bbbb1
 *
Packit 0bbbb1
 * This uses a compare/swap lock operation to safely write the
Packit 0bbbb1
 * new register value, as required by IEC 61883-1.
Packit 0bbbb1
 * This function handles host to bus endian conversion. It returns 0 for success
Packit 0bbbb1
 * or -1 for error (errno available).
Packit 0bbbb1
 **/
Packit 0bbbb1
int
Packit 0bbbb1
iec61883_plug_set(raw1394handle_t h, nodeid_t n, nodeaddr_t a, quadlet_t value);
Packit 0bbbb1
Packit 0bbbb1
/**
Packit 0bbbb1
 * High level plug access macros
Packit 0bbbb1
 */
Packit 0bbbb1
Packit 0bbbb1
#define iec61883_get_oMPR(h,n,v) iec61883_plug_get((h), (n), CSR_O_MPR, (quadlet_t *)(v))
Packit 0bbbb1
#define iec61883_set_oMPR(h,n,v) iec61883_plug_set((h), (n), CSR_O_MPR, *((quadlet_t *)&(v)))
Packit 0bbbb1
#define iec61883_get_oPCR0(h,n,v) iec61883_plug_get((h), (n), CSR_O_PCR_0, (quadlet_t *)(v))
Packit 0bbbb1
#define iec61883_set_oPCR0(h,n,v) iec61883_plug_set((h), (n), CSR_O_PCR_0, *((quadlet_t *)&(v)))
Packit 0bbbb1
#define iec61883_get_oPCRX(h,n,v,x) iec61883_plug_get((h), (n), CSR_O_PCR_0+(4*(x)), (quadlet_t *)(v))
Packit 0bbbb1
#define iec61883_set_oPCRX(h,n,v,x) iec61883_plug_set((h), (n), CSR_O_PCR_0+(4*(x)), *((quadlet_t *)&(v)))
Packit 0bbbb1
#define iec61883_get_iMPR(h,n,v) iec61883_plug_get((h), (n), CSR_I_MPR, (quadlet_t *)(v))
Packit 0bbbb1
#define iec61883_set_iMPR(h,n,v) iec61883_plug_set((h), (n), CSR_I_MPR, *((quadlet_t *)&(v)))
Packit 0bbbb1
#define iec61883_get_iPCR0(h,n,v) iec61883_plug_get((h), (n), CSR_I_PCR_0, (quadlet_t *)(v))
Packit 0bbbb1
#define iec61883_set_iPCR0(h,n,v) iec61883_plug_set((h), (n), CSR_I_PCR_0, *((quadlet_t *)&(v)))
Packit 0bbbb1
#define iec61883_get_iPCRX(h,n,v,x) iec61883_plug_get((h), (n), CSR_I_PCR_0+(4*(x)), (quadlet_t *)(v))
Packit 0bbbb1
#define iec61883_set_iPCRX(h,n,v,x) iec61883_plug_set((h), (n), CSR_I_PCR_0+(4*(x)), *((quadlet_t *)&(v)))
Packit 0bbbb1
Packit 0bbbb1
Packit 0bbbb1
#ifdef __cplusplus
Packit 0bbbb1
}
Packit 0bbbb1
#endif
Packit 0bbbb1
Packit 0bbbb1
#endif /* _IEC61883_PRIVATE_H */