FILE
agilent_82357a.h
File preview with syntax highlighting.
linux-6.19.14/drivers/gpib/agilent_82357a/agilent_82357a.h
1/* SPDX-License-Identifier: GPL-2.0 */ 2 3/*************************************************************************** 4 * copyright : (C) 2004 by Frank Mori Hess * 5 ***************************************************************************/ 6 7#include <linux/kernel.h> 8#include <linux/mutex.h> 9#include <linux/completion.h> 10#include <linux/usb.h> 11#include <linux/timer.h> 12#include <linux/compiler_attributes.h> 13#include "gpibP.h" 14#include "tms9914.h" 15 16enum usb_vendor_ids { 17 USB_VENDOR_ID_AGILENT = 0x0957 18}; 19 20enum usb_device_ids { 21 USB_DEVICE_ID_AGILENT_82357A = 0x0107, 22 USB_DEVICE_ID_AGILENT_82357A_PREINIT = 0x0007, // device id before firmware is loaded 23 USB_DEVICE_ID_AGILENT_82357B = 0x0718, // device id before firmware is loaded 24 USB_DEVICE_ID_AGILENT_82357B_PREINIT = 0x0518, // device id before firmware is loaded 25}; 26 27enum endpoint_addresses { 28 AGILENT_82357_CONTROL_ENDPOINT = 0x0, 29 AGILENT_82357_BULK_IN_ENDPOINT = 0x2, 30 AGILENT_82357A_BULK_OUT_ENDPOINT = 0x4, 31 AGILENT_82357A_INTERRUPT_IN_ENDPOINT = 0x6, 32 AGILENT_82357B_BULK_OUT_ENDPOINT = 0x6, 33 AGILENT_82357B_INTERRUPT_IN_ENDPOINT = 0x8, 34}; 35 36enum bulk_commands { 37 DATA_PIPE_CMD_WRITE = 0x1, 38 DATA_PIPE_CMD_READ = 0x3, 39 DATA_PIPE_CMD_WR_REGS = 0x4, 40 DATA_PIPE_CMD_RD_REGS = 0x5 41}; 42 43enum agilent_82357a_read_flags { 44 ARF_END_ON_EOI = 0x1, 45 ARF_NO_ADDRESS = 0x2, 46 ARF_END_ON_EOS_CHAR = 0x4, 47 ARF_SPOLL = 0x8 48}; 49 50enum agilent_82357a_trailing_read_flags { 51 ATRF_EOI = 0x1, 52 ATRF_ATN = 0x2, 53 ATRF_IFC = 0x4, 54 ATRF_EOS = 0x8, 55 ATRF_ABORT = 0x10, 56 ATRF_COUNT = 0x20, 57 ATRF_DEAD_BUS = 0x40, 58 ATRF_UNADDRESSED = 0x80 59}; 60 61enum agilent_82357a_write_flags { 62 AWF_SEND_EOI = 0x1, 63 AWF_NO_FAST_TALKER_FIRST_BYTE = 0x2, 64 AWF_NO_FAST_TALKER = 0x4, 65 AWF_NO_ADDRESS = 0x8, 66 AWF_ATN = 0x10, 67 AWF_SEPARATE_HEADER = 0x80 68}; 69 70enum agilent_82357a_interrupt_flag_bit_numbers { 71 AIF_SRQ_BN = 0, 72 AIF_WRITE_COMPLETE_BN = 1, 73 AIF_READ_COMPLETE_BN = 2, 74}; 75 76enum agilent_82357_error_codes { 77 UGP_SUCCESS = 0, 78 UGP_ERR_INVALID_CMD = 1, 79 UGP_ERR_INVALID_PARAM = 2, 80 UGP_ERR_INVALID_REG = 3, 81 UGP_ERR_GPIB_READ = 4, 82 UGP_ERR_GPIB_WRITE = 5, 83 UGP_ERR_FLUSHING = 6, 84 UGP_ERR_FLUSHING_ALREADY = 7, 85 UGP_ERR_UNSUPPORTED = 8, 86 UGP_ERR_OTHER = 9 87}; 88 89enum agilent_82357_control_values { 90 XFER_ABORT = 0xa0, 91 XFER_STATUS = 0xb0, 92}; 93 94enum xfer_status_bits { 95 XS_COMPLETED = 0x1, 96 XS_READ = 0x2, 97}; 98 99enum xfer_status_completion_bits { 100 XSC_EOI = 0x1, 101 XSC_ATN = 0x2, 102 XSC_IFC = 0x4, 103 XSC_EOS = 0x8, 104 XSC_ABORT = 0x10, 105 XSC_COUNT = 0x20, 106 XSC_DEAD_BUS = 0x40, 107 XSC_BUS_NOT_ADDRESSED = 0x80 108}; 109 110enum xfer_abort_type { 111 XA_FLUSH = 0x1 112}; 113 114#define STATUS_DATA_LEN 8 115#define INTERRUPT_BUF_LEN 8 116 117struct agilent_82357a_urb_ctx { 118 struct completion complete; 119 unsigned timed_out : 1; 120}; 121 122// struct which defines local data for each 82357 device 123struct agilent_82357a_priv { 124 struct usb_interface *bus_interface; 125 unsigned short eos_char; 126 unsigned short eos_mode; 127 unsigned short hw_control_bits; 128 unsigned long interrupt_flags; 129 struct urb *bulk_urb; 130 struct urb *interrupt_urb; 131 u8 *interrupt_buffer; 132 struct mutex bulk_transfer_lock; // bulk transfer lock 133 struct mutex bulk_alloc_lock; // bulk transfer allocation lock 134 struct mutex interrupt_alloc_lock; // interrupt allocation lock 135 struct mutex control_alloc_lock; // control message allocation lock 136 struct timer_list bulk_timer; 137 struct agilent_82357a_urb_ctx context; 138 unsigned int bulk_out_endpoint; 139 unsigned int interrupt_in_endpoint; 140 unsigned is_cic : 1; 141 unsigned ren_state : 1; 142}; 143 144struct agilent_82357a_register_pairlet { 145 short address; 146 unsigned short value; 147}; 148 149enum firmware_registers { 150 HW_CONTROL = 0xa, 151 LED_CONTROL = 0xb, 152 RESET_TO_POWERUP = 0xc, 153 PROTOCOL_CONTROL = 0xd, 154 FAST_TALKER_T1 = 0xe 155}; 156 157enum hardware_control_bits { 158 NOT_TI_RESET = 0x1, 159 SYSTEM_CONTROLLER = 0x2, 160 NOT_PARALLEL_POLL = 0x4, 161 OSCILLATOR_5V_ON = 0x8, 162 OUTPUT_5V_ON = 0x20, 163 CPLD_3V_ON = 0x80, 164}; 165 166enum led_control_bits { 167 FIRMWARE_LED_CONTROL = 0x1, 168 FAIL_LED_ON = 0x20, 169 READY_LED_ON = 0x40, 170 ACCESS_LED_ON = 0x80 171}; 172 173enum reset_to_powerup_bits { 174 RESET_SPACEBALL = 0x1, // wait 2 millisec after sending 175}; 176 177enum protocol_control_bits { 178 WRITE_COMPLETE_INTERRUPT_EN = 0x1, 179}; 180 181static const int agilent_82357a_control_request = 0x4; 182
~/
Read-only file preview.