File Index
Files and directories
Sign in
FILE

nec7210.h

File preview with syntax highlighting.

linux-6.19.14/drivers/gpib/include/nec7210.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2
  3/***************************************************************************
  4 *    copyright            : (C) 2002 by Frank Mori Hess
  5 ***************************************************************************/
  6
  7#ifndef _NEC7210_H
  8#define _NEC7210_H
  9
 10#include "gpib_state_machines.h"
 11#include <linux/types.h>
 12#include <linux/spinlock.h>
 13#include <linux/string.h>
 14#include <linux/interrupt.h>
 15
 16#include "gpib_types.h"
 17#include "nec7210_registers.h"
 18
 19/* struct used to provide variables local to a nec7210 chip */
 20struct nec7210_priv {
 21#ifdef CONFIG_HAS_IOPORT
 22	u32 iobase;
 23#endif
 24	void __iomem *mmiobase;
 25	unsigned int offset;		// offset between successive nec7210 io addresses
 26	unsigned int dma_channel;
 27	u8 *dma_buffer;
 28	unsigned int dma_buffer_length;	// length of dma buffer
 29	dma_addr_t dma_buffer_addr;	// bus address of board->buffer for use with dma
 30	// software copy of bits written to registers
 31	u8 reg_bits[8];
 32	u8 auxa_bits;			// bits written to auxiliary register A
 33	u8 auxb_bits;			// bits written to auxiliary register B
 34	// used to keep track of board's state, bit definitions given below
 35	unsigned long state;
 36	// lock for chips that extend the nec7210 registers by paging in alternate regs
 37	spinlock_t register_page_lock;
 38	// wrappers for outb, inb, readb, or writeb
 39	u8 (*read_byte)(struct nec7210_priv *priv, unsigned int register_number);
 40	void (*write_byte)(struct nec7210_priv *priv, u8 byte, unsigned int register_number);
 41	enum nec7210_chipset type;
 42	enum talker_function_state talker_state;
 43	enum listener_function_state listener_state;
 44	void *private;
 45	unsigned srq_pending : 1;
 46};
 47
 48static inline void init_nec7210_private(struct nec7210_priv *priv)
 49{
 50	memset(priv, 0, sizeof(struct nec7210_priv));
 51	spin_lock_init(&priv->register_page_lock);
 52}
 53
 54// slightly shorter way to access read_byte and write_byte
 55static inline u8 read_byte(struct nec7210_priv *priv, unsigned int register_number)
 56{
 57	return priv->read_byte(priv, register_number);
 58}
 59
 60static inline void write_byte(struct nec7210_priv *priv, u8 byte, unsigned int register_number)
 61{
 62	priv->write_byte(priv, byte, register_number);
 63}
 64
 65// struct nec7210_priv.state bit numbers
 66enum {
 67	PIO_IN_PROGRESS_BN,		// pio transfer in progress
 68	DMA_READ_IN_PROGRESS_BN,	// dma read transfer in progress
 69	DMA_WRITE_IN_PROGRESS_BN,	// dma write transfer in progress
 70	READ_READY_BN,			// board has data byte available to read
 71	WRITE_READY_BN,			// board is ready to send a data byte
 72	COMMAND_READY_BN,		// board is ready to send a command byte
 73	RECEIVED_END_BN,		// received END
 74	BUS_ERROR_BN,			// output error has occurred
 75	RFD_HOLDOFF_BN,			// rfd holdoff in effect
 76	DEV_CLEAR_BN,			// device clear received
 77	ADR_CHANGE_BN,			// address state change occurred
 78};
 79
 80// interface functions
 81int nec7210_read(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer,
 82		 size_t length, int *end, size_t *bytes_read);
 83int nec7210_write(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer,
 84		  size_t length, int send_eoi, size_t *bytes_written);
 85int nec7210_command(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer,
 86		    size_t length, size_t *bytes_written);
 87int nec7210_take_control(struct gpib_board *board, struct nec7210_priv *priv, int syncronous);
 88int nec7210_go_to_standby(struct gpib_board *board, struct nec7210_priv *priv);
 89int nec7210_request_system_control(struct gpib_board *board,
 90				   struct nec7210_priv *priv, int request_control);
 91void nec7210_interface_clear(struct gpib_board *board, struct nec7210_priv *priv, int assert);
 92void nec7210_remote_enable(struct gpib_board *board, struct nec7210_priv *priv, int enable);
 93int nec7210_enable_eos(struct gpib_board *board, struct nec7210_priv *priv, u8 eos_bytes,
 94		       int compare_8_bits);
 95void nec7210_disable_eos(struct gpib_board *board, struct nec7210_priv *priv);
 96unsigned int nec7210_update_status(struct gpib_board *board, struct nec7210_priv *priv,
 97				   unsigned int clear_mask);
 98unsigned int nec7210_update_status_nolock(struct gpib_board *board, struct nec7210_priv *priv);
 99int nec7210_primary_address(const struct gpib_board *board,
100			    struct nec7210_priv *priv, unsigned int address);
101int nec7210_secondary_address(const struct gpib_board *board, struct nec7210_priv *priv,
102			      unsigned int address, int enable);
103int nec7210_parallel_poll(struct gpib_board *board, struct nec7210_priv *priv, u8 *result);
104void nec7210_serial_poll_response(struct gpib_board *board,
105				  struct nec7210_priv *priv, u8 status);
106void nec7210_parallel_poll_configure(struct gpib_board *board,
107				     struct nec7210_priv *priv, unsigned int configuration);
108void nec7210_parallel_poll_response(struct gpib_board *board,
109				    struct nec7210_priv *priv, int ist);
110u8 nec7210_serial_poll_status(struct gpib_board *board, struct nec7210_priv *priv);
111int nec7210_t1_delay(struct gpib_board *board,
112		     struct nec7210_priv *priv, unsigned int nano_sec);
113void nec7210_return_to_local(const struct gpib_board *board, struct nec7210_priv *priv);
114
115// utility functions
116void nec7210_board_reset(struct nec7210_priv *priv, const struct gpib_board *board);
117void nec7210_board_online(struct nec7210_priv *priv, const struct gpib_board *board);
118unsigned int nec7210_set_reg_bits(struct nec7210_priv *priv, unsigned int reg,
119				  unsigned int mask, unsigned int bits);
120void nec7210_set_handshake_mode(struct gpib_board *board, struct nec7210_priv *priv, int mode);
121void nec7210_release_rfd_holdoff(struct gpib_board *board, struct nec7210_priv *priv);
122u8 nec7210_read_data_in(struct gpib_board *board, struct nec7210_priv *priv, int *end);
123
124// wrappers for io functions
125u8 nec7210_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num);
126void nec7210_ioport_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num);
127u8 nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num);
128void nec7210_iomem_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num);
129u8 nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num);
130void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, u8 data,
131				       unsigned int register_num);
132u8 nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num);
133void nec7210_locking_iomem_write_byte(struct nec7210_priv *priv, u8 data,
134				      unsigned int register_num);
135
136// interrupt service routine
137irqreturn_t nec7210_interrupt(struct gpib_board *board, struct nec7210_priv *priv);
138irqreturn_t nec7210_interrupt_have_status(struct gpib_board *board,
139					  struct nec7210_priv *priv, int status1, int status2);
140
141#endif	//_NEC7210_H
~/ Read-only file preview.