Commit 6c52d5e3 authored by Dave Penkler's avatar Dave Penkler Committed by Greg Kroah-Hartman
Browse files

staging: gpib: Add common include files for GPIB drivers

parent f11192a2
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */

/***************************************************************************
 *  Header for amcc5920 pci chip
 *
 *   copyright		  : (C) 2002 by Frank Mori Hess
 ***************************************************************************/

// plx pci chip registers and bits
enum amcc_registers {
	AMCC_INTCS_REG = 0x38,
	AMCC_PASS_THRU_REG	= 0x60,
};

enum amcc_incsr_bits {
	AMCC_ADDON_INTR_ENABLE_BIT = 0x2000,
	AMCC_ADDON_INTR_ACTIVE_BIT = 0x400000,
	AMCC_INTR_ACTIVE_BIT = 0x800000,
};

static const int bits_per_region = 8;

static inline uint32_t amcc_wait_state_bits(unsigned int region, unsigned int num_wait_states)
{
	return (num_wait_states & 0x7) << (-region * bits_per_region);
};

enum amcc_prefetch_bits {
	PREFETCH_DISABLED = 0x0,
	PREFETCH_SMALL = 0x8,
	PREFETCH_MEDIUM = 0x10,
	PREFETCH_LARGE = 0x18,
};

static inline uint32_t amcc_prefetch_bits(unsigned int region, enum amcc_prefetch_bits prefetch)
{
	return prefetch << (--region * bits_per_region);
};

static inline uint32_t amcc_PTADR_mode_bit(unsigned int region)
{
	return 0x80 << (--region * bits_per_region);
};

static inline uint32_t amcc_disable_write_fifo_bit(unsigned int region)
{
	return 0x20 << (--region * bits_per_region);
};
+59 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */

/***************************************************************************
 * Registers and bits for amccs5933 pci chip
 *    copyright            : (C) 2002 by Frank Mori Hess
 ***************************************************************************/

// register offsets
enum {
	MBEF_REG = 0x34,	// mailbux empty/full
	INTCSR_REG = 0x38,	// interrupt control and status
	BMCSR_REG = 0x3c,	// bus master control and status
};

// incoming mailbox 0-3  register offsets
extern inline int INCOMING_MAILBOX_REG(unsigned int mailbox)
{
	return (0x10 + 4 * mailbox);
};

// bit definitions

// INTCSR bits
enum {
	OUTBOX_EMPTY_INTR_BIT = 0x10,	// enable outbox empty interrupt
	INBOX_FULL_INTR_BIT = 0x1000,	// enable inbox full interrupt
	INBOX_INTR_CS_BIT = 0x20000, // read, or write clear inbox full interrupt
	INTR_ASSERTED_BIT = 0x800000,	// read only, interrupt asserted
};

// select byte 0 to 3 of incoming mailbox
extern inline int INBOX_BYTE_BITS(unsigned int byte)
{
	return (byte & 0x3) << 8;
};

// select incoming mailbox 0 to 3
extern inline int INBOX_SELECT_BITS(unsigned int mailbox)
{
	return (mailbox & 0x3) << 10;
};

// select byte 0 to 3 of outgoing mailbox
extern inline int OUTBOX_BYTE_BITS(unsigned int byte)
{
	return (byte & 0x3);
};

// select outgoing mailbox 0 to 3
extern inline int OUTBOX_SELECT_BITS(unsigned int mailbox)
{
	return (mailbox & 0x3) << 2;
};

//BMCSR bits
enum {
	MBOX_FLAGS_RESET_BIT = 0x08000000,	// resets mailbox empty/full flags
};
+56 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */

/***************************************************************************
 *    copyright		   : (C) 2002,2003 by Frank Mori Hess
 ***************************************************************************/

#ifndef _GPIB_P_H
#define _GPIB_P_H

#include <linux/types.h>

#include "gpib_types.h"
#include "gpib_proto.h"
#include "gpib_user.h"
#include "gpib_ioctl.h"

#include <linux/fs.h>
#include <linux/interrupt.h>

void gpib_register_driver(gpib_interface_t *interface, struct module *mod);
void gpib_unregister_driver(gpib_interface_t *interface);
struct pci_dev *gpib_pci_get_device(const gpib_board_config_t *config, unsigned int vendor_id,
				    unsigned int device_id, struct pci_dev *from);
struct pci_dev *gpib_pci_get_subsys(const gpib_board_config_t *config, unsigned int vendor_id,
				    unsigned int device_id, unsigned int ss_vendor,
				    unsigned int ss_device, struct pci_dev *from);
unsigned int num_gpib_events(const gpib_event_queue_t *queue);
int push_gpib_event(gpib_board_t *board, short event_type);
int pop_gpib_event(gpib_event_queue_t *queue, short *event_type);
int gpib_request_pseudo_irq(gpib_board_t *board, irqreturn_t (*handler)(int, void *));
void gpib_free_pseudo_irq(gpib_board_t *board);
int gpib_match_device_path(struct device *dev, const char *device_path_in);

extern gpib_board_t board_array[GPIB_MAX_NUM_BOARDS];

extern struct list_head registered_drivers;

#ifdef GPIB_DEBUG
#define GPIB_DPRINTK(format, args...) pr_info("gpib debug: " format, ## args)
#else
#define GPIB_DPRINTK(arg...)
#endif

#include <linux/io.h>

void writeb_wrapper(unsigned int value, void *address);
unsigned int readb_wrapper(void *address);
void outb_wrapper(unsigned int value, void *address);
unsigned int inb_wrapper(void *address);
void writew_wrapper(unsigned int value, void *address);
unsigned int readw_wrapper(void *address);
void outw_wrapper(unsigned int value, void *address);
unsigned int inw_wrapper(void *address);

#endif	// _GPIB_P_H
+23 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */

#ifndef __GPIB_PCI_IDS_H
#define __GPIB_LINUX_PCI_IDS_H

#ifndef PCI_VENDOR_ID_AMCC
#define PCI_VENDOR_ID_AMCC	0x10e8
#endif

#ifndef PCI_VENDOR_ID_CBOARDS
#define PCI_VENDOR_ID_CBOARDS	0x1307
#endif

#ifndef PCI_VENDOR_ID_QUANCOM
#define PCI_VENDOR_ID_QUANCOM	0x8008
#endif

#ifndef PCI_DEVICE_ID_QUANCOM_GPIB
#define PCI_DEVICE_ID_QUANCOM_GPIB	0x3302
#endif

#endif	// __GPIB_PCI_IDS_H
+56 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */

#ifndef GPIB_PROTO_INCLUDED
#define GPIB_PROTO_INCLUDED

#include <linux/fs.h>

int ibopen(struct inode *inode, struct file *filep);
int ibclose(struct inode *inode, struct file *file);
long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg);
int osInit(void);
void osReset(void);
void os_start_timer(gpib_board_t *board, unsigned int usec_timeout);
void os_remove_timer(gpib_board_t *board);
void osSendEOI(void);
void osSendEOI(void);
void init_gpib_board(gpib_board_t *board);
static inline unsigned long usec_to_jiffies(unsigned int usec)
{
	unsigned long usec_per_jiffy = 1000000 / HZ;

	return 1 + (usec + usec_per_jiffy - 1) / usec_per_jiffy;
};

int serial_poll_all(gpib_board_t *board, unsigned int usec_timeout);
void init_gpib_descriptor(gpib_descriptor_t *desc);
int dvrsp(gpib_board_t *board, unsigned int pad, int sad,
	  unsigned int usec_timeout, uint8_t *result);
int ibAPWait(gpib_board_t *board, int pad);
int ibAPrsp(gpib_board_t *board, int padsad, char *spb);
void ibAPE(gpib_board_t *board, int pad, int v);
int ibcac(gpib_board_t *board, int sync, int fallback_to_async);
int ibcmd(gpib_board_t *board, uint8_t *buf, size_t length, size_t *bytes_written);
int ibgts(gpib_board_t *board);
int ibonline(gpib_board_t *board);
int iboffline(gpib_board_t *board);
int iblines(const gpib_board_t *board, short *lines);
int ibrd(gpib_board_t *board, uint8_t *buf, size_t length, int *end_flag, size_t *bytes_read);
int ibrpp(gpib_board_t *board, uint8_t *buf);
int ibrsv2(gpib_board_t *board, uint8_t status_byte, int new_reason_for_service);
void ibrsc(gpib_board_t *board, int request_control);
int ibsic(gpib_board_t *board, unsigned int usec_duration);
int ibsre(gpib_board_t *board, int enable);
int ibpad(gpib_board_t *board, unsigned int addr);
int ibsad(gpib_board_t *board, int addr);
int ibeos(gpib_board_t *board, int eos, int eosflags);
int ibwait(gpib_board_t *board, int wait_mask, int clear_mask, int set_mask,
	   int *status, unsigned long usec_timeout, gpib_descriptor_t *desc);
int ibwrt(gpib_board_t *board, uint8_t *buf, size_t cnt, int send_eoi, size_t *bytes_written);
int ibstatus(gpib_board_t *board);
int general_ibstatus(gpib_board_t *board, const gpib_status_queue_t *device,
		     int clear_mask, int set_mask, gpib_descriptor_t *desc);
int io_timed_out(gpib_board_t *board);
int ibppc(gpib_board_t *board, uint8_t configuration);

#endif /* GPIB_PROTO_INCLUDED */
Loading