Path: blob/master/drivers/gpib/agilent_82357a/agilent_82357a.h
38184 views
/* SPDX-License-Identifier: GPL-2.0 */12/***************************************************************************3* copyright : (C) 2004 by Frank Mori Hess *4***************************************************************************/56#include <linux/kernel.h>7#include <linux/mutex.h>8#include <linux/completion.h>9#include <linux/usb.h>10#include <linux/timer.h>11#include <linux/compiler_attributes.h>12#include "gpibP.h"13#include "tms9914.h"1415enum usb_vendor_ids {16USB_VENDOR_ID_AGILENT = 0x095717};1819enum usb_device_ids {20USB_DEVICE_ID_AGILENT_82357A = 0x0107,21USB_DEVICE_ID_AGILENT_82357A_PREINIT = 0x0007, // device id before firmware is loaded22USB_DEVICE_ID_AGILENT_82357B = 0x0718, // device id before firmware is loaded23USB_DEVICE_ID_AGILENT_82357B_PREINIT = 0x0518, // device id before firmware is loaded24};2526enum endpoint_addresses {27AGILENT_82357_CONTROL_ENDPOINT = 0x0,28AGILENT_82357_BULK_IN_ENDPOINT = 0x2,29AGILENT_82357A_BULK_OUT_ENDPOINT = 0x4,30AGILENT_82357A_INTERRUPT_IN_ENDPOINT = 0x6,31AGILENT_82357B_BULK_OUT_ENDPOINT = 0x6,32AGILENT_82357B_INTERRUPT_IN_ENDPOINT = 0x8,33};3435enum bulk_commands {36DATA_PIPE_CMD_WRITE = 0x1,37DATA_PIPE_CMD_READ = 0x3,38DATA_PIPE_CMD_WR_REGS = 0x4,39DATA_PIPE_CMD_RD_REGS = 0x540};4142enum agilent_82357a_read_flags {43ARF_END_ON_EOI = 0x1,44ARF_NO_ADDRESS = 0x2,45ARF_END_ON_EOS_CHAR = 0x4,46ARF_SPOLL = 0x847};4849enum agilent_82357a_trailing_read_flags {50ATRF_EOI = 0x1,51ATRF_ATN = 0x2,52ATRF_IFC = 0x4,53ATRF_EOS = 0x8,54ATRF_ABORT = 0x10,55ATRF_COUNT = 0x20,56ATRF_DEAD_BUS = 0x40,57ATRF_UNADDRESSED = 0x8058};5960enum agilent_82357a_write_flags {61AWF_SEND_EOI = 0x1,62AWF_NO_FAST_TALKER_FIRST_BYTE = 0x2,63AWF_NO_FAST_TALKER = 0x4,64AWF_NO_ADDRESS = 0x8,65AWF_ATN = 0x10,66AWF_SEPARATE_HEADER = 0x8067};6869enum agilent_82357a_interrupt_flag_bit_numbers {70AIF_SRQ_BN = 0,71AIF_WRITE_COMPLETE_BN = 1,72AIF_READ_COMPLETE_BN = 2,73};7475enum agilent_82357_error_codes {76UGP_SUCCESS = 0,77UGP_ERR_INVALID_CMD = 1,78UGP_ERR_INVALID_PARAM = 2,79UGP_ERR_INVALID_REG = 3,80UGP_ERR_GPIB_READ = 4,81UGP_ERR_GPIB_WRITE = 5,82UGP_ERR_FLUSHING = 6,83UGP_ERR_FLUSHING_ALREADY = 7,84UGP_ERR_UNSUPPORTED = 8,85UGP_ERR_OTHER = 986};8788enum agilent_82357_control_values {89XFER_ABORT = 0xa0,90XFER_STATUS = 0xb0,91};9293enum xfer_status_bits {94XS_COMPLETED = 0x1,95XS_READ = 0x2,96};9798enum xfer_status_completion_bits {99XSC_EOI = 0x1,100XSC_ATN = 0x2,101XSC_IFC = 0x4,102XSC_EOS = 0x8,103XSC_ABORT = 0x10,104XSC_COUNT = 0x20,105XSC_DEAD_BUS = 0x40,106XSC_BUS_NOT_ADDRESSED = 0x80107};108109enum xfer_abort_type {110XA_FLUSH = 0x1111};112113#define STATUS_DATA_LEN 8114#define INTERRUPT_BUF_LEN 8115116struct agilent_82357a_urb_ctx {117struct completion complete;118unsigned timed_out : 1;119};120121// struct which defines local data for each 82357 device122struct agilent_82357a_priv {123struct usb_interface *bus_interface;124unsigned short eos_char;125unsigned short eos_mode;126unsigned short hw_control_bits;127unsigned long interrupt_flags;128struct urb *bulk_urb;129struct urb *interrupt_urb;130u8 *interrupt_buffer;131struct mutex bulk_transfer_lock; // bulk transfer lock132struct mutex bulk_alloc_lock; // bulk transfer allocation lock133struct mutex interrupt_alloc_lock; // interrupt allocation lock134struct mutex control_alloc_lock; // control message allocation lock135struct timer_list bulk_timer;136struct agilent_82357a_urb_ctx context;137unsigned int bulk_out_endpoint;138unsigned int interrupt_in_endpoint;139unsigned is_cic : 1;140unsigned ren_state : 1;141};142143struct agilent_82357a_register_pairlet {144short address;145unsigned short value;146};147148enum firmware_registers {149HW_CONTROL = 0xa,150LED_CONTROL = 0xb,151RESET_TO_POWERUP = 0xc,152PROTOCOL_CONTROL = 0xd,153FAST_TALKER_T1 = 0xe154};155156enum hardware_control_bits {157NOT_TI_RESET = 0x1,158SYSTEM_CONTROLLER = 0x2,159NOT_PARALLEL_POLL = 0x4,160OSCILLATOR_5V_ON = 0x8,161OUTPUT_5V_ON = 0x20,162CPLD_3V_ON = 0x80,163};164165enum led_control_bits {166FIRMWARE_LED_CONTROL = 0x1,167FAIL_LED_ON = 0x20,168READY_LED_ON = 0x40,169ACCESS_LED_ON = 0x80170};171172enum reset_to_powerup_bits {173RESET_SPACEBALL = 0x1, // wait 2 millisec after sending174};175176enum protocol_control_bits {177WRITE_COMPLETE_INTERRUPT_EN = 0x1,178};179180static const int agilent_82357a_control_request = 0x4;181182183184