diff options
Diffstat (limited to 'drivers/staging/gpib')
43 files changed, 3755 insertions, 4433 deletions
diff --git a/drivers/staging/gpib/Kconfig b/drivers/staging/gpib/Kconfig index 81510db3072e..aa01538d5beb 100644 --- a/drivers/staging/gpib/Kconfig +++ b/drivers/staging/gpib/Kconfig @@ -50,7 +50,6 @@ config GPIB_CEC_PCI tristate "CEC PCI board" depends on PCI depends on HAS_IOPORT - depends on !X86_PAE select GPIB_COMMON select GPIB_NEC7210 help @@ -64,7 +63,6 @@ config GPIB_NI_PCI_ISA tristate "NI PCI/ISA compatible boards" depends on ISA_BUS || PCI || PCMCIA depends on HAS_IOPORT - depends on !X86_PAE depends on PCMCIA || !PCMCIA depends on HAS_IOPORT_MAP select GPIB_COMMON @@ -90,7 +88,6 @@ config GPIB_CB7210 tristate "Measurement Computing compatible boards" depends on HAS_IOPORT depends on ISA_BUS || PCI || PCMCIA - depends on !X86_PAE depends on PCMCIA || !PCMCIA select GPIB_COMMON select GPIB_NEC7210 @@ -169,7 +166,6 @@ config GPIB_HP82341 tristate "HP82341x" select GPIB_COMMON select GPIB_TMS9914 - depends on BROKEN depends on ISA_BUS || EISA help GPIB driver for HP82341 A/B/C/D boards @@ -182,7 +178,6 @@ config GPIB_INES depends on PCI || ISA_BUS || PCMCIA depends on PCMCIA || !PCMCIA depends on HAS_IOPORT - depends on !X86_PAE select GPIB_COMMON select GPIB_NEC7210 help diff --git a/drivers/staging/gpib/agilent_82350b/agilent_82350b.c b/drivers/staging/gpib/agilent_82350b/agilent_82350b.c index 3f4f95b7fe34..94bbb3b6576d 100644 --- a/drivers/staging/gpib/agilent_82350b/agilent_82350b.c +++ b/drivers/staging/gpib/agilent_82350b/agilent_82350b.c @@ -4,6 +4,10 @@ * copyright : (C) 2002, 2004 by Frank Mori Hess * ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include "agilent_82350b.h" #include <linux/delay.h> #include <linux/ioport.h> @@ -20,8 +24,14 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB driver for Agilent 82350b"); -int agilent_82350b_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, - size_t *bytes_read) +static int read_transfer_counter(struct agilent_82350b_priv *a_priv); +static unsigned short read_and_clear_event_status(struct gpib_board *board); +static void set_transfer_counter(struct agilent_82350b_priv *a_priv, int count); +static int agilent_82350b_write(struct gpib_board *board, u8 *buffer, + size_t length, int send_eoi, size_t *bytes_written); + +static int agilent_82350b_accel_read(struct gpib_board *board, u8 *buffer, + size_t length, int *end, size_t *bytes_read) { struct agilent_82350b_priv *a_priv = board->private_data; @@ -29,7 +39,7 @@ int agilent_82350b_accel_read(gpib_board_t *board, uint8_t *buffer, size_t lengt int retval = 0; unsigned short event_status; int i, num_fifo_bytes; - //hardware doesn't support checking for end-of-string character when using fifo + /* hardware doesn't support checking for end-of-string character when using fifo */ if (tms_priv->eos_flags & REOS) return tms9914_read(board, tms_priv, buffer, length, end, bytes_read); @@ -40,17 +50,14 @@ int agilent_82350b_accel_read(gpib_board_t *board, uint8_t *buffer, size_t lengt *bytes_read = 0; if (length == 0) return 0; - //disable fifo for the moment + /* disable fifo for the moment */ writeb(DIRECTION_GPIB_TO_HOST, a_priv->gpib_base + SRAM_ACCESS_CONTROL_REG); - // handle corner case of board not in holdoff and one byte might slip in early + /* handle corner case of board not in holdoff and one byte might slip in early */ if (tms_priv->holdoff_active == 0 && length > 1) { size_t num_bytes; retval = tms9914_read(board, tms_priv, buffer, 1, end, &num_bytes); *bytes_read += num_bytes; - if (retval < 0) - dev_err(board->gpib_dev, "%s: tms9914_read failed retval=%i\n", - driver_name, retval); if (retval < 0 || *end) return retval; ++buffer; @@ -60,16 +67,14 @@ int agilent_82350b_accel_read(gpib_board_t *board, uint8_t *buffer, size_t lengt tms9914_release_holdoff(tms_priv); i = 0; num_fifo_bytes = length - 1; - write_byte(tms_priv, tms_priv->imr0_bits & ~HR_BIIE, IMR0); // disable BI interrupts + /* disable BI interrupts */ + write_byte(tms_priv, tms_priv->imr0_bits & ~HR_BIIE, IMR0); while (i < num_fifo_bytes && *end == 0) { int block_size; int j; int count; - if (num_fifo_bytes - i < agilent_82350b_fifo_size) - block_size = num_fifo_bytes - i; - else - block_size = agilent_82350b_fifo_size; + block_size = min(num_fifo_bytes - i, agilent_82350b_fifo_size); set_transfer_counter(a_priv, block_size); writeb(ENABLE_TI_TO_SRAM | DIRECTION_GPIB_TO_HOST, a_priv->gpib_base + SRAM_ACCESS_CONTROL_REG); @@ -86,7 +91,6 @@ int agilent_82350b_accel_read(gpib_board_t *board, uint8_t *buffer, size_t lengt test_bit(DEV_CLEAR_BN, &tms_priv->state) || test_bit(TIMO_NUM, &board->status)); if (retval) { - dev_dbg(board->gpib_dev, "%s: read wait interrupted\n", driver_name); retval = -ERESTARTSYS; break; } @@ -100,28 +104,26 @@ int agilent_82350b_accel_read(gpib_board_t *board, uint8_t *buffer, size_t lengt *end = 1; } if (test_bit(TIMO_NUM, &board->status)) { - dev_err(board->gpib_dev, "%s: read timed out\n", driver_name); retval = -ETIMEDOUT; break; } if (test_bit(DEV_CLEAR_BN, &tms_priv->state)) { - dev_err(board->gpib_dev, "%s: device clear interrupted read\n", - driver_name); retval = -EINTR; break; } } - write_byte(tms_priv, tms_priv->imr0_bits, IMR0); // re-enable BI interrupts + /* re-enable BI interrupts */ + write_byte(tms_priv, tms_priv->imr0_bits, IMR0); *bytes_read += i; buffer += i; length -= i; writeb(DIRECTION_GPIB_TO_HOST, a_priv->gpib_base + SRAM_ACCESS_CONTROL_REG); if (retval < 0) return retval; - // read last bytes if we havn't received an END yet + /* read last bytes if we havn't received an END yet */ if (*end == 0) { size_t num_bytes; - // try to make sure we holdoff after last byte read + /* try to make sure we holdoff after last byte read */ retval = tms9914_read(board, tms_priv, buffer, length, end, &num_bytes); *bytes_read += num_bytes; if (retval < 0) @@ -130,30 +132,24 @@ int agilent_82350b_accel_read(gpib_board_t *board, uint8_t *buffer, size_t lengt return 0; } -static int translate_wait_return_value(gpib_board_t *board, int retval) +static int translate_wait_return_value(struct gpib_board *board, int retval) { struct agilent_82350b_priv *a_priv = board->private_data; struct tms9914_priv *tms_priv = &a_priv->tms9914_priv; - if (retval) { - dev_err(board->gpib_dev, "%s: write wait interrupted\n", driver_name); + if (retval) return -ERESTARTSYS; - } - if (test_bit(TIMO_NUM, &board->status)) { - dev_err(board->gpib_dev, "%s: write timed out\n", driver_name); + if (test_bit(TIMO_NUM, &board->status)) return -ETIMEDOUT; - } - if (test_bit(DEV_CLEAR_BN, &tms_priv->state)) { - dev_err(board->gpib_dev, "%s: device clear interrupted write\n", driver_name); + if (test_bit(DEV_CLEAR_BN, &tms_priv->state)) return -EINTR; - } return 0; } -int agilent_82350b_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) - +static int agilent_82350b_accel_write(struct gpib_board *board, u8 *buffer, + size_t length, int send_eoi, + size_t *bytes_written) { struct agilent_82350b_priv *a_priv = board->private_data; struct tms9914_priv *tms_priv = &a_priv->tms9914_priv; @@ -174,10 +170,8 @@ int agilent_82350b_accel_write(gpib_board_t *board, uint8_t *buffer, size_t leng event_status = read_and_clear_event_status(board); - //pr_info("ag_ac_wr: event status 0x%x tms state 0x%lx\n", event_status, tms_priv->state); - #ifdef EXPERIMENTAL - pr_info("ag_ac_wr: wait for previous BO to complete if any\n"); + /* wait for previous BO to complete if any */ retval = wait_event_interruptible(board->wait, test_bit(DEV_CLEAR_BN, &tms_priv->state) || test_bit(WRITE_READY_BN, &tms_priv->state) || @@ -188,36 +182,25 @@ int agilent_82350b_accel_write(gpib_board_t *board, uint8_t *buffer, size_t leng return retval; #endif - //pr_info("ag_ac_wr: sending first byte\n"); retval = agilent_82350b_write(board, buffer, 1, 0, &num_bytes); *bytes_written += num_bytes; if (retval < 0) return retval; - //pr_info("ag_ac_wr: %ld bytes eoi %d tms state 0x%lx\n",length, send_eoi, tms_priv->state); - write_byte(tms_priv, tms_priv->imr0_bits & ~HR_BOIE, IMR0); for (i = 1; i < fifotransferlength;) { clear_bit(WRITE_READY_BN, &tms_priv->state); - if (fifotransferlength - i < agilent_82350b_fifo_size) - block_size = fifotransferlength - i; - else - block_size = agilent_82350b_fifo_size; + block_size = min(fifotransferlength - i, agilent_82350b_fifo_size); set_transfer_counter(a_priv, block_size); for (j = 0; j < block_size; ++j, ++i) { - // load data into board's sram + /* load data into board's sram */ writeb(buffer[i], a_priv->sram_base + j); } writeb(ENABLE_TI_TO_SRAM, a_priv->gpib_base + SRAM_ACCESS_CONTROL_REG); - //pr_info("ag_ac_wr: send block: %d bytes tms 0x%lx\n", block_size, - // tms_priv->state); - - if (agilent_82350b_fifo_is_halted(a_priv)) { + if (agilent_82350b_fifo_is_halted(a_priv)) writeb(RESTART_STREAM_BIT, a_priv->gpib_base + STREAM_STATUS_REG); - // pr_info("ag_ac_wr: needed restart\n"); - } retval = wait_event_interruptible(board->wait, ((event_status = @@ -227,7 +210,6 @@ int agilent_82350b_accel_write(gpib_board_t *board, uint8_t *buffer, size_t leng test_bit(TIMO_NUM, &board->status)); writeb(0, a_priv->gpib_base + SRAM_ACCESS_CONTROL_REG); num_bytes = block_size - read_transfer_counter(a_priv); - //pr_info("ag_ac_wr: sent %ld bytes tms 0x%lx\n", num_bytes, tms_priv->state); *bytes_written += num_bytes; retval = translate_wait_return_value(board, retval); @@ -239,9 +221,6 @@ int agilent_82350b_accel_write(gpib_board_t *board, uint8_t *buffer, size_t leng return retval; if (send_eoi) { - //pr_info("ag_ac_wr: sending last byte with eoi byte no: %d\n", - // fifotransferlength+1); - retval = agilent_82350b_write(board, buffer + fifotransferlength, 1, send_eoi, &num_bytes); *bytes_written += num_bytes; @@ -251,8 +230,7 @@ int agilent_82350b_accel_write(gpib_board_t *board, uint8_t *buffer, size_t leng return 0; } -unsigned short read_and_clear_event_status(gpib_board_t *board) - +static unsigned short read_and_clear_event_status(struct gpib_board *board) { struct agilent_82350b_priv *a_priv = board->private_data; unsigned long flags; @@ -265,12 +243,12 @@ unsigned short read_and_clear_event_status(gpib_board_t *board) return status; } -irqreturn_t agilent_82350b_interrupt(int irq, void *arg) +static irqreturn_t agilent_82350b_interrupt(int irq, void *arg) { int tms9914_status1 = 0, tms9914_status2 = 0; int event_status; - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct agilent_82350b_priv *a_priv = board->private_data; unsigned long flags; irqreturn_t retval = IRQ_NONE; @@ -286,8 +264,7 @@ irqreturn_t agilent_82350b_interrupt(int irq, void *arg) tms9914_interrupt_have_status(board, &a_priv->tms9914_priv, tms9914_status1, tms9914_status2); } -//pr_info("event_status=0x%x s1 %x s2 %x\n", event_status,tms9914_status1,tms9914_status2); -//write-clear status bits + /* write-clear status bits */ if (event_status & (BUFFER_END_STATUS_BIT | TERM_COUNT_STATUS_BIT)) { writeb(event_status & (BUFFER_END_STATUS_BIT | TERM_COUNT_STATUS_BIT), a_priv->gpib_base + EVENT_STATUS_REG); @@ -298,12 +275,9 @@ irqreturn_t agilent_82350b_interrupt(int irq, void *arg) return retval; } -void agilent_82350b_detach(gpib_board_t *board); - -const char *driver_name = "agilent_82350b"; - -int read_transfer_counter(struct agilent_82350b_priv *a_priv) +static void agilent_82350b_detach(struct gpib_board *board); +static int read_transfer_counter(struct agilent_82350b_priv *a_priv) { int lo, mid, value; @@ -314,29 +288,27 @@ int read_transfer_counter(struct agilent_82350b_priv *a_priv) return value; } -void set_transfer_counter(struct agilent_82350b_priv *a_priv, int count) - +static void set_transfer_counter(struct agilent_82350b_priv *a_priv, int count) { int complement = -count; writeb(complement & 0xff, a_priv->gpib_base + XFER_COUNT_LO_REG); writeb((complement >> 8) & 0xff, a_priv->gpib_base + XFER_COUNT_MID_REG); - //I don't think the hi count reg is even used, but oh well + /* I don't think the hi count reg is even used, but oh well */ writeb((complement >> 16) & 0xf, a_priv->gpib_base + XFER_COUNT_HI_REG); } -// wrappers for interface functions -int agilent_82350b_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, - size_t *bytes_read) - +/* wrappers for interface functions */ +static int agilent_82350b_read(struct gpib_board *board, u8 *buffer, + size_t length, int *end, size_t *bytes_read) { struct agilent_82350b_priv *priv = board->private_data; return tms9914_read(board, &priv->tms9914_priv, buffer, length, end, bytes_read); } -int agilent_82350b_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) +static int agilent_82350b_write(struct gpib_board *board, u8 *buffer, + size_t length, int send_eoi, size_t *bytes_written) { struct agilent_82350b_priv *priv = board->private_data; @@ -344,8 +316,8 @@ int agilent_82350b_write(gpib_board_t *board, uint8_t *buffer, size_t length, in return tms9914_write(board, &priv->tms9914_priv, buffer, length, send_eoi, bytes_written); } -int agilent_82350b_command(gpib_board_t *board, uint8_t *buffer, size_t length, - size_t *bytes_written) +static int agilent_82350b_command(struct gpib_board *board, u8 *buffer, + size_t length, size_t *bytes_written) { struct agilent_82350b_priv *priv = board->private_data; @@ -353,7 +325,7 @@ int agilent_82350b_command(gpib_board_t *board, uint8_t *buffer, size_t length, return tms9914_command(board, &priv->tms9914_priv, buffer, length, bytes_written); } -int agilent_82350b_take_control(gpib_board_t *board, int synchronous) +static int agilent_82350b_take_control(struct gpib_board *board, int synchronous) { struct agilent_82350b_priv *priv = board->private_data; @@ -361,7 +333,7 @@ int agilent_82350b_take_control(gpib_board_t *board, int synchronous) return tms9914_take_control_workaround(board, &priv->tms9914_priv, synchronous); } -int agilent_82350b_go_to_standby(gpib_board_t *board) +static int agilent_82350b_go_to_standby(struct gpib_board *board) { struct agilent_82350b_priv *priv = board->private_data; @@ -369,8 +341,7 @@ int agilent_82350b_go_to_standby(gpib_board_t *board) return tms9914_go_to_standby(board, &priv->tms9914_priv); } -void agilent_82350b_request_system_control(gpib_board_t *board, int request_control) - +static int agilent_82350b_request_system_control(struct gpib_board *board, int request_control) { struct agilent_82350b_priv *a_priv = board->private_data; @@ -384,10 +355,10 @@ void agilent_82350b_request_system_control(gpib_board_t *board, int request_cont writeb(0, a_priv->gpib_base + INTERNAL_CONFIG_REG); } writeb(a_priv->card_mode_bits, a_priv->gpib_base + CARD_MODE_REG); - tms9914_request_system_control(board, &a_priv->tms9914_priv, request_control); + return tms9914_request_system_control(board, &a_priv->tms9914_priv, request_control); } -void agilent_82350b_interface_clear(gpib_board_t *board, int assert) +static void agilent_82350b_interface_clear(struct gpib_board *board, int assert) { struct agilent_82350b_priv *priv = board->private_data; @@ -395,104 +366,96 @@ void agilent_82350b_interface_clear(gpib_board_t *board, int assert) tms9914_interface_clear(board, &priv->tms9914_priv, assert); } -void agilent_82350b_remote_enable(gpib_board_t *board, int enable) - +static void agilent_82350b_remote_enable(struct gpib_board *board, int enable) { struct agilent_82350b_priv *priv = board->private_data; tms9914_remote_enable(board, &priv->tms9914_priv, enable); } -int agilent_82350b_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) - +static int agilent_82350b_enable_eos(struct gpib_board *board, u8 eos_byte, + int compare_8_bits) { struct agilent_82350b_priv *priv = board->private_data; return tms9914_enable_eos(board, &priv->tms9914_priv, eos_byte, compare_8_bits); } -void agilent_82350b_disable_eos(gpib_board_t *board) - +static void agilent_82350b_disable_eos(struct gpib_board *board) { struct agilent_82350b_priv *priv = board->private_data; tms9914_disable_eos(board, &priv->tms9914_priv); } -unsigned int agilent_82350b_update_status(gpib_board_t *board, unsigned int clear_mask) - +static unsigned int agilent_82350b_update_status(struct gpib_board *board, + unsigned int clear_mask) { struct agilent_82350b_priv *priv = board->private_data; return tms9914_update_status(board, &priv->tms9914_priv, clear_mask); } -int agilent_82350b_primary_address(gpib_board_t *board, unsigned int address) - +static int agilent_82350b_primary_address(struct gpib_board *board, + unsigned int address) { struct agilent_82350b_priv *priv = board->private_data; return tms9914_primary_address(board, &priv->tms9914_priv, address); } -int agilent_82350b_secondary_address(gpib_board_t *board, unsigned int address, int enable) - +static int agilent_82350b_secondary_address(struct gpib_board *board, + unsigned int address, int enable) { struct agilent_82350b_priv *priv = board->private_data; return tms9914_secondary_address(board, &priv->tms9914_priv, address, enable); } -int agilent_82350b_parallel_poll(gpib_board_t *board, uint8_t *result) - +static int agilent_82350b_parallel_poll(struct gpib_board *board, u8 *result) { struct agilent_82350b_priv *priv = board->private_data; return tms9914_parallel_poll(board, &priv->tms9914_priv, result); } -void agilent_82350b_parallel_poll_configure(gpib_board_t *board, uint8_t config) - +static void agilent_82350b_parallel_poll_configure(struct gpib_board *board, + u8 config) { struct agilent_82350b_priv *priv = board->private_data; tms9914_parallel_poll_configure(board, &priv->tms9914_priv, config); } -void agilent_82350b_parallel_poll_response(gpib_board_t *board, int ist) - +static void agilent_82350b_parallel_poll_response(struct gpib_board *board, int ist) { struct agilent_82350b_priv *priv = board->private_data; tms9914_parallel_poll_response(board, &priv->tms9914_priv, ist); } -void agilent_82350b_serial_poll_response(gpib_board_t *board, uint8_t status) - +static void agilent_82350b_serial_poll_response(struct gpib_board *board, u8 status) { struct agilent_82350b_priv *priv = board->private_data; tms9914_serial_poll_response(board, &priv->tms9914_priv, status); } -uint8_t agilent_82350b_serial_poll_status(gpib_board_t *board) - +static u8 agilent_82350b_serial_poll_status(struct gpib_board *board) { struct agilent_82350b_priv *priv = board->private_data; return tms9914_serial_poll_status(board, &priv->tms9914_priv); } -int agilent_82350b_line_status(const gpib_board_t *board) - +static int agilent_82350b_line_status(const struct gpib_board *board) { struct agilent_82350b_priv *priv = board->private_data; return tms9914_line_status(board, &priv->tms9914_priv); } -unsigned int agilent_82350b_t1_delay(gpib_board_t *board, unsigned int nanosec) - +static int agilent_82350b_t1_delay(struct gpib_board *board, unsigned int nanosec) { struct agilent_82350b_priv *a_priv = board->private_data; static const int nanosec_per_clock = 30; @@ -507,16 +470,14 @@ unsigned int agilent_82350b_t1_delay(gpib_board_t *board, unsigned int nanosec) return value * nanosec_per_clock; } -void agilent_82350b_return_to_local(gpib_board_t *board) - +static void agilent_82350b_return_to_local(struct gpib_board *board) { struct agilent_82350b_priv *priv = board->private_data; tms9914_return_to_local(board, &priv->tms9914_priv); } -int agilent_82350b_allocate_private(gpib_board_t *board) - +static int agilent_82350b_allocate_private(struct gpib_board *board) { board->private_data = kzalloc(sizeof(struct agilent_82350b_priv), GFP_KERNEL); if (!board->private_data) @@ -524,15 +485,14 @@ int agilent_82350b_allocate_private(gpib_board_t *board) return 0; } -void agilent_82350b_free_private(gpib_board_t *board) - +static void agilent_82350b_free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; } -static int init_82350a_hardware(gpib_board_t *board, const gpib_board_config_t *config) - +static int init_82350a_hardware(struct gpib_board *board, + const struct gpib_board_config *config) { struct agilent_82350b_priv *a_priv = board->private_data; static const unsigned int firmware_length = 5302; @@ -551,19 +511,18 @@ static int init_82350a_hardware(gpib_board_t *board, const gpib_board_config_t * PLX9050_PCI_RETRY_DELAY_BITS(64) | PLX9050_DIRECT_SLAVE_LOCK_ENABLE_BIT; -// load borg data + /* load borg data */ borg_status = readb(a_priv->borg_base); if ((borg_status & BORG_DONE_BIT)) return 0; - // need to programme borg + /* need to programme borg */ if (!config->init_data || config->init_data_length != firmware_length) { - dev_err(board->gpib_dev, "%s: the 82350A board requires firmware after powering on.\n", - driver_name); + dev_err(board->gpib_dev, "the 82350A board requires firmware after powering on.\n"); return -EIO; } - dev_info(board->gpib_dev, "%s: Loading firmware...\n", driver_name); + dev_dbg(board->gpib_dev, "Loading firmware...\n"); - // tickle the borg + /* tickle the borg */ writel(plx_cntrl_static_bits | PLX9050_USER3_DATA_BIT, a_priv->plx_base + PLX9050_CNTRL_REG); usleep_range(1000, 2000); @@ -580,7 +539,7 @@ static int init_82350a_hardware(gpib_board_t *board, const gpib_board_config_t * usleep_range(10, 20); } if (j == timeout) { - dev_err(board->gpib_dev, "%s: timed out loading firmware.\n", driver_name); + dev_err(board->gpib_dev, "timed out loading firmware.\n"); return -ETIMEDOUT; } writeb(firmware_data[i], a_priv->gpib_base + CONFIG_DATA_REG); @@ -591,21 +550,20 @@ static int init_82350a_hardware(gpib_board_t *board, const gpib_board_config_t * usleep_range(10, 20); } if (j == timeout) { - dev_err(board->gpib_dev, "%s: timed out waiting for firmware load to complete.\n", - driver_name); + dev_err(board->gpib_dev, "timed out waiting for firmware load to complete.\n"); return -ETIMEDOUT; } - dev_info(board->gpib_dev, "%s: ...done.\n", driver_name); + dev_dbg(board->gpib_dev, " ...done.\n"); return 0; } -static int test_sram(gpib_board_t *board) +static int test_sram(struct gpib_board *board) { struct agilent_82350b_priv *a_priv = board->private_data; unsigned int i; const unsigned int sram_length = pci_resource_len(a_priv->pci_device, SRAM_82350A_REGION); - // test SRAM + /* test SRAM */ const unsigned int byte_mask = 0xff; for (i = 0; i < sram_length; ++i) { @@ -617,19 +575,19 @@ static int test_sram(gpib_board_t *board) unsigned int read_value = readb(a_priv->sram_base + i); if ((i & byte_mask) != read_value) { - dev_err(board->gpib_dev, "%s: SRAM test failed at %d wanted %d got %d\n", - driver_name, i, (i & byte_mask), read_value); + dev_err(board->gpib_dev, "SRAM test failed at %d wanted %d got %d\n", + i, (i & byte_mask), read_value); return -EIO; } if (need_resched()) schedule(); } - dev_info(board->gpib_dev, "%s: SRAM test passed 0x%x bytes checked\n", - driver_name, sram_length); + dev_dbg(board->gpib_dev, "SRAM test passed 0x%x bytes checked\n", sram_length); return 0; } -static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_config_t *config, +static int agilent_82350b_generic_attach(struct gpib_board *board, + const struct gpib_board_config *config, int use_fifos) { @@ -648,19 +606,19 @@ static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_c tms_priv->write_byte = tms9914_iomem_write_byte; tms_priv->offset = 1; - // find board + /* find board */ a_priv->pci_device = gpib_pci_get_device(config, PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_82350B, NULL); if (a_priv->pci_device) { a_priv->model = MODEL_82350B; - dev_info(board->gpib_dev, "%s: Agilent 82350B board found\n", driver_name); + dev_dbg(board->gpib_dev, "Agilent 82350B board found\n"); } else { a_priv->pci_device = gpib_pci_get_device(config, PCI_VENDOR_ID_AGILENT, PCI_DEVICE_ID_82351A, NULL); if (a_priv->pci_device) { a_priv->model = MODEL_82351A; - dev_info(board->gpib_dev, "%s: Agilent 82351B board found\n", driver_name); + dev_dbg(board->gpib_dev, "Agilent 82351B board found\n"); } else { a_priv->pci_device = gpib_pci_get_subsys(config, PCI_VENDOR_ID_PLX, @@ -670,46 +628,40 @@ static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_c a_priv->pci_device); if (a_priv->pci_device) { a_priv->model = MODEL_82350A; - dev_info(board->gpib_dev, "%s: HP/Agilent 82350A board found\n", - driver_name); + dev_dbg(board->gpib_dev, "HP/Agilent 82350A board found\n"); } else { - dev_err(board->gpib_dev, "%s: no 82350/82351 board found\n", - driver_name); + dev_err(board->gpib_dev, "no 82350/82351 board found\n"); return -ENODEV; } } } if (pci_enable_device(a_priv->pci_device)) { - dev_err(board->gpib_dev, "%s: error enabling pci device\n", driver_name); + dev_err(board->gpib_dev, "error enabling pci device\n"); return -EIO; } - if (pci_request_regions(a_priv->pci_device, driver_name)) - return -EIO; + if (pci_request_regions(a_priv->pci_device, DRV_NAME)) + return -ENOMEM; switch (a_priv->model) { case MODEL_82350A: a_priv->plx_base = ioremap(pci_resource_start(a_priv->pci_device, PLX_MEM_REGION), pci_resource_len(a_priv->pci_device, PLX_MEM_REGION)); - dev_dbg(board->gpib_dev, "%s: plx base address remapped to 0x%p\n", - driver_name, a_priv->plx_base); + dev_dbg(board->gpib_dev, "plx base address remapped to 0x%p\n", a_priv->plx_base); a_priv->gpib_base = ioremap(pci_resource_start(a_priv->pci_device, GPIB_82350A_REGION), pci_resource_len(a_priv->pci_device, GPIB_82350A_REGION)); - dev_dbg(board->gpib_dev, "%s: gpib base address remapped to 0x%p\n", - driver_name, a_priv->gpib_base); + dev_dbg(board->gpib_dev, "chip base address remapped to 0x%p\n", a_priv->gpib_base); tms_priv->mmiobase = a_priv->gpib_base + TMS9914_BASE_REG; a_priv->sram_base = ioremap(pci_resource_start(a_priv->pci_device, SRAM_82350A_REGION), pci_resource_len(a_priv->pci_device, SRAM_82350A_REGION)); - dev_dbg(board->gpib_dev, "%s: sram base address remapped to 0x%p\n", - driver_name, a_priv->sram_base); + dev_dbg(board->gpib_dev, "sram base address remapped to 0x%p\n", a_priv->sram_base); a_priv->borg_base = ioremap(pci_resource_start(a_priv->pci_device, BORG_82350A_REGION), pci_resource_len(a_priv->pci_device, BORG_82350A_REGION)); - dev_dbg(board->gpib_dev, "%s: borg base address remapped to 0x%p\n", - driver_name, a_priv->borg_base); + dev_dbg(board->gpib_dev, "borg base address remapped to 0x%p\n", a_priv->borg_base); retval = init_82350a_hardware(board, config); if (retval < 0) @@ -719,21 +671,18 @@ static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_c case MODEL_82351A: a_priv->gpib_base = ioremap(pci_resource_start(a_priv->pci_device, GPIB_REGION), pci_resource_len(a_priv->pci_device, GPIB_REGION)); - dev_dbg(board->gpib_dev, "%s: gpib base address remapped to 0x%p\n", - driver_name, a_priv->gpib_base); + dev_dbg(board->gpib_dev, "chip base address remapped to 0x%p\n", a_priv->gpib_base); tms_priv->mmiobase = a_priv->gpib_base + TMS9914_BASE_REG; a_priv->sram_base = ioremap(pci_resource_start(a_priv->pci_device, SRAM_REGION), pci_resource_len(a_priv->pci_device, SRAM_REGION)); - dev_dbg(board->gpib_dev, "%s: sram base address remapped to 0x%p\n", - driver_name, a_priv->sram_base); + dev_dbg(board->gpib_dev, "sram base address remapped to 0x%p\n", a_priv->sram_base); a_priv->misc_base = ioremap(pci_resource_start(a_priv->pci_device, MISC_REGION), pci_resource_len(a_priv->pci_device, MISC_REGION)); - dev_dbg(board->gpib_dev, "%s: misc base address remapped to 0x%p\n", - driver_name, a_priv->misc_base); + dev_dbg(board->gpib_dev, "misc base address remapped to 0x%p\n", a_priv->misc_base); break; default: - pr_err("%s: invalid board\n", driver_name); - return -1; + dev_err(board->gpib_dev, "invalid board\n"); + return -ENODEV; } retval = test_sram(board); @@ -741,19 +690,19 @@ static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_c return retval; if (request_irq(a_priv->pci_device->irq, agilent_82350b_interrupt, - IRQF_SHARED, driver_name, board)) { - pr_err("%s: can't request IRQ %d\n", driver_name, a_priv->pci_device->irq); + IRQF_SHARED, DRV_NAME, board)) { + dev_err(board->gpib_dev, "failed to obtain irq %d\n", a_priv->pci_device->irq); return -EIO; } a_priv->irq = a_priv->pci_device->irq; - dev_dbg(board->gpib_dev, "%s: IRQ %d\n", driver_name, a_priv->irq); + dev_dbg(board->gpib_dev, " IRQ %d\n", a_priv->irq); writeb(0, a_priv->gpib_base + SRAM_ACCESS_CONTROL_REG); a_priv->card_mode_bits = ENABLE_PCI_IRQ_BIT; writeb(a_priv->card_mode_bits, a_priv->gpib_base + CARD_MODE_REG); if (a_priv->model == MODEL_82350A) { - // enable PCI interrupts for 82350a + /* enable PCI interrupts for 82350a */ writel(PLX9050_LINTR1_EN_BIT | PLX9050_LINTR2_POLARITY_BIT | PLX9050_PCI_INTR_EN_BIT, a_priv->plx_base + PLX9050_INTCSR_REG); @@ -764,7 +713,7 @@ static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_c a_priv->gpib_base + EVENT_ENABLE_REG); writeb(ENABLE_TERM_COUNT_INTERRUPT_BIT | ENABLE_BUFFER_END_INTERRUPT_BIT | ENABLE_TMS9914_INTERRUPTS_BIT, a_priv->gpib_base + INTERRUPT_ENABLE_REG); - //write-clear event status bits + /* write-clear event status bits */ writeb(BUFFER_END_STATUS_BIT | TERM_COUNT_STATUS_BIT, a_priv->gpib_base + EVENT_STATUS_REG); } else { @@ -780,26 +729,25 @@ static int agilent_82350b_generic_attach(gpib_board_t *board, const gpib_board_c return 0; } -int agilent_82350b_unaccel_attach(gpib_board_t *board, const gpib_board_config_t *config) - +static int agilent_82350b_unaccel_attach(struct gpib_board *board, + const struct gpib_board_config *config) { return agilent_82350b_generic_attach(board, config, 0); } -int agilent_82350b_accel_attach(gpib_board_t *board, const gpib_board_config_t *config) - +static int agilent_82350b_accel_attach(struct gpib_board *board, + const struct gpib_board_config *config) { return agilent_82350b_generic_attach(board, config, 1); } -void agilent_82350b_detach(gpib_board_t *board) - +static void agilent_82350b_detach(struct gpib_board *board) { struct agilent_82350b_priv *a_priv = board->private_data; struct tms9914_priv *tms_priv; if (a_priv) { - if (a_priv->plx_base) // disable interrupts + if (a_priv->plx_base) /* disable interrupts */ writel(0, a_priv->plx_base + PLX9050_INTCSR_REG); tms_priv = &a_priv->tms9914_priv; @@ -825,7 +773,7 @@ void agilent_82350b_detach(gpib_board_t *board) agilent_82350b_free_private(board); } -static gpib_interface_t agilent_82350b_unaccel_interface = { +static struct gpib_interface agilent_82350b_unaccel_interface = { .name = "agilent_82350b_unaccel", .attach = agilent_82350b_unaccel_attach, .detach = agilent_82350b_detach, @@ -842,17 +790,18 @@ static gpib_interface_t agilent_82350b_unaccel_interface = { .parallel_poll = agilent_82350b_parallel_poll, .parallel_poll_configure = agilent_82350b_parallel_poll_configure, .parallel_poll_response = agilent_82350b_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX + .local_parallel_poll_mode = NULL, /* XXX */ .line_status = agilent_82350b_line_status, .update_status = agilent_82350b_update_status, .primary_address = agilent_82350b_primary_address, .secondary_address = agilent_82350b_secondary_address, .serial_poll_response = agilent_82350b_serial_poll_response, + .serial_poll_status = agilent_82350b_serial_poll_status, .t1_delay = agilent_82350b_t1_delay, .return_to_local = agilent_82350b_return_to_local, }; -static gpib_interface_t agilent_82350b_interface = { +static struct gpib_interface agilent_82350b_interface = { .name = "agilent_82350b", .attach = agilent_82350b_accel_attach, .detach = agilent_82350b_detach, @@ -869,12 +818,13 @@ static gpib_interface_t agilent_82350b_interface = { .parallel_poll = agilent_82350b_parallel_poll, .parallel_poll_configure = agilent_82350b_parallel_poll_configure, .parallel_poll_response = agilent_82350b_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX + .local_parallel_poll_mode = NULL, /* XXX */ .line_status = agilent_82350b_line_status, .update_status = agilent_82350b_update_status, .primary_address = agilent_82350b_primary_address, .secondary_address = agilent_82350b_secondary_address, .serial_poll_response = agilent_82350b_serial_poll_response, + .serial_poll_status = agilent_82350b_serial_poll_status, .t1_delay = agilent_82350b_t1_delay, .return_to_local = agilent_82350b_return_to_local, }; @@ -895,31 +845,30 @@ static const struct pci_device_id agilent_82350b_pci_table[] = { MODULE_DEVICE_TABLE(pci, agilent_82350b_pci_table); static struct pci_driver agilent_82350b_pci_driver = { - .name = "agilent_82350b", + .name = DRV_NAME, .id_table = agilent_82350b_pci_table, .probe = &agilent_82350b_pci_probe }; static int __init agilent_82350b_init_module(void) - { int result; result = pci_register_driver(&agilent_82350b_pci_driver); if (result) { - pr_err("agilent_82350b: pci_register_driver failed: error = %d\n", result); + pr_err("pci_register_driver failed: error = %d\n", result); return result; } result = gpib_register_driver(&agilent_82350b_unaccel_interface, THIS_MODULE); if (result) { - pr_err("agilent_82350b: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_unaccel; } result = gpib_register_driver(&agilent_82350b_interface, THIS_MODULE); if (result) { - pr_err("agilent_82350b: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_interface; } @@ -934,7 +883,6 @@ err_unaccel: } static void __exit agilent_82350b_exit_module(void) - { gpib_unregister_driver(&agilent_82350b_interface); gpib_unregister_driver(&agilent_82350b_unaccel_interface); diff --git a/drivers/staging/gpib/agilent_82350b/agilent_82350b.h b/drivers/staging/gpib/agilent_82350b/agilent_82350b.h index 32b322113c10..ef841957297f 100644 --- a/drivers/staging/gpib/agilent_82350b/agilent_82350b.h +++ b/drivers/staging/gpib/agilent_82350b/agilent_82350b.h @@ -41,11 +41,11 @@ enum board_model { MODEL_82351A }; -// struct which defines private_data for board +/* struct which defines private_data for board */ struct agilent_82350b_priv { struct tms9914_priv tms9914_priv; struct pci_dev *pci_device; - void __iomem *plx_base; //82350a only + void __iomem *plx_base; /* 82350a only */ void __iomem *gpib_base; void __iomem *sram_base; void __iomem *misc_base; @@ -57,62 +57,12 @@ struct agilent_82350b_priv { bool using_fifos; }; -// driver name -extern const char *driver_name; - -// init functions - -int agilent_82350b_unaccel_attach(gpib_board_t *board, const gpib_board_config_t *config); -int agilent_82350b_accel_attach(gpib_board_t *board, const gpib_board_config_t *config); - -// interface functions -int agilent_82350b_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, - size_t *bytes_read); -int agilent_82350b_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written); -int agilent_82350b_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, - size_t *bytes_read); -int agilent_82350b_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written); -int agilent_82350b_command(gpib_board_t *board, uint8_t *buffer, size_t length, - size_t *bytes_written); -int agilent_82350b_take_control(gpib_board_t *board, int synchronous); -int agilent_82350b_go_to_standby(gpib_board_t *board); -void agilent_82350b_request_system_control(gpib_board_t *board, int request_control); -void agilent_82350b_interface_clear(gpib_board_t *board, int assert); -void agilent_82350b_remote_enable(gpib_board_t *board, int enable); -int agilent_82350b_enable_eos(gpib_board_t *board, uint8_t eos_byte, int - compare_8_bits); -void agilent_82350b_disable_eos(gpib_board_t *board); -unsigned int agilent_82350b_update_status(gpib_board_t *board, unsigned int clear_mask); -int agilent_82350b_primary_address(gpib_board_t *board, unsigned int address); -int agilent_82350b_secondary_address(gpib_board_t *board, unsigned int address, int - enable); -int agilent_82350b_parallel_poll(gpib_board_t *board, uint8_t *result); -void agilent_82350b_parallel_poll_configure(gpib_board_t *board, uint8_t config); -void agilent_82350b_parallel_poll_response(gpib_board_t *board, int ist); -void agilent_82350b_serial_poll_response(gpib_board_t *board, uint8_t status); -void agilent_82350b_return_to_local(gpib_board_t *board); -uint8_t agilent_82350b_serial_poll_status(gpib_board_t *board); -int agilent_82350b_line_status(const gpib_board_t *board); -unsigned int agilent_82350b_t1_delay(gpib_board_t *board, unsigned int nanosec); - -// interrupt service routines -irqreturn_t agilent_82350b_interrupt(int irq, void *arg); - -// utility functions -int agilent_82350b_allocate_private(gpib_board_t *board); -void agilent_82350b_free_private(gpib_board_t *board); -unsigned short read_and_clear_event_status(gpib_board_t *board); -int read_transfer_counter(struct agilent_82350b_priv *a_priv); -void set_transfer_counter(struct agilent_82350b_priv *a_priv, int count); - -//registers +/* registers */ enum agilent_82350b_gpib_registers { CARD_MODE_REG = 0x1, - CONFIG_DATA_REG = 0x2, // 82350A specific + CONFIG_DATA_REG = 0x2, /* 82350A specific */ INTERRUPT_ENABLE_REG = 0x3, EVENT_STATUS_REG = 0x4, EVENT_ENABLE_REG = 0x5, @@ -126,8 +76,8 @@ enum agilent_82350b_gpib_registers XFER_COUNT_HI_REG = 0xe, TMS9914_BASE_REG = 0x10, INTERNAL_CONFIG_REG = 0x18, - IMR0_READ_REG = 0x19, //read - T1_DELAY_REG = 0x19, // write + IMR0_READ_REG = 0x19, /* read */ + T1_DELAY_REG = 0x19, /* write */ IMR1_READ_REG = 0x1a, ADR_READ_REG = 0x1b, SPMR_READ_REG = 0x1c, @@ -139,7 +89,7 @@ enum agilent_82350b_gpib_registers enum card_mode_bits { - ACTIVE_CONTROLLER_BIT = 0x2, // read-only + ACTIVE_CONTROLLER_BIT = 0x2, /* read-only */ CM_SYSTEM_CONTROLLER_BIT = 0x8, ENABLE_BUS_MONITOR_BIT = 0x10, ENABLE_PCI_IRQ_BIT = 0x20, @@ -165,15 +115,15 @@ enum event_status_bits { TMS9914_IRQ_STATUS_BIT = 0x1, IRQ_STATUS_BIT = 0x2, - BUFFER_END_STATUS_BIT = 0x10, // write-clear - TERM_COUNT_STATUS_BIT = 0x20, // write-clear + BUFFER_END_STATUS_BIT = 0x10, /* write-clear */ + TERM_COUNT_STATUS_BIT = 0x20, /* write-clear */ }; enum stream_status_bits { - HALTED_STATUS_BIT = 0x1, //read - RESTART_STREAM_BIT = 0x1, //write + HALTED_STATUS_BIT = 0x1, /* read */ + RESTART_STREAM_BIT = 0x1, /* write */ }; enum internal_config_bits @@ -185,9 +135,9 @@ enum internal_config_bits enum sram_access_control_bits { - DIRECTION_GPIB_TO_HOST = 0x20, // transfer direction - ENABLE_TI_TO_SRAM = 0x40, // enable fifo - ENABLE_FAST_TALKER = 0x80 // added for 82350A (not used) + DIRECTION_GPIB_TO_HOST = 0x20, /* transfer direction */ + ENABLE_TI_TO_SRAM = 0x40, /* enable fifo */ + ENABLE_FAST_TALKER = 0x80 /* added for 82350A (not used) */ }; enum borg_bits diff --git a/drivers/staging/gpib/agilent_82357a/agilent_82357a.c b/drivers/staging/gpib/agilent_82357a/agilent_82357a.c index 69f0e490d401..b923dc606d1d 100644 --- a/drivers/staging/gpib/agilent_82357a/agilent_82357a.c +++ b/drivers/staging/gpib/agilent_82357a/agilent_82357a.c @@ -7,6 +7,10 @@ #define _GNU_SOURCE +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> @@ -21,24 +25,26 @@ MODULE_DESCRIPTION("GPIB driver for Agilent 82357A/B usb adapters"); static struct usb_interface *agilent_82357a_driver_interfaces[MAX_NUM_82357A_INTERFACES]; static DEFINE_MUTEX(agilent_82357a_hotplug_lock); // protect board insertion and removal -static unsigned int agilent_82357a_update_status(gpib_board_t *board, unsigned int clear_mask); +static unsigned int agilent_82357a_update_status(struct gpib_board *board, + unsigned int clear_mask); -static int agilent_82357a_take_control_internal(gpib_board_t *board, int synchronous); +static int agilent_82357a_take_control_internal(struct gpib_board *board, int synchronous); static void agilent_82357a_bulk_complete(struct urb *urb) { struct agilent_82357a_urb_ctx *context = urb->context; - up(&context->complete); + complete(&context->complete); } static void agilent_82357a_timeout_handler(struct timer_list *t) { - struct agilent_82357a_priv *a_priv = from_timer(a_priv, t, bulk_timer); + struct agilent_82357a_priv *a_priv = timer_container_of(a_priv, t, + bulk_timer); struct agilent_82357a_urb_ctx *context = &a_priv->context; context->timed_out = 1; - up(&context->complete); + complete(&context->complete); } static int agilent_82357a_send_bulk_msg(struct agilent_82357a_priv *a_priv, void *data, @@ -69,7 +75,7 @@ static int agilent_82357a_send_bulk_msg(struct agilent_82357a_priv *a_priv, void } usb_dev = interface_to_usbdev(a_priv->bus_interface); out_pipe = usb_sndbulkpipe(usb_dev, a_priv->bulk_out_endpoint); - sema_init(&context->complete, 0); + init_completion(&context->complete); context->timed_out = 0; usb_fill_bulk_urb(a_priv->bulk_urb, usb_dev, out_pipe, data, data_length, &agilent_82357a_bulk_complete, context); @@ -79,14 +85,12 @@ static int agilent_82357a_send_bulk_msg(struct agilent_82357a_priv *a_priv, void retval = usb_submit_urb(a_priv->bulk_urb, GFP_KERNEL); if (retval) { - dev_err(&usb_dev->dev, "%s: failed to submit bulk out urb, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "failed to submit bulk out urb, retval=%i\n", retval); mutex_unlock(&a_priv->bulk_alloc_lock); goto cleanup; } mutex_unlock(&a_priv->bulk_alloc_lock); - if (down_interruptible(&context->complete)) { - dev_err(&usb_dev->dev, "%s: interrupted\n", __func__); + if (wait_for_completion_interruptible(&context->complete)) { retval = -ERESTARTSYS; goto cleanup; } @@ -99,7 +103,7 @@ static int agilent_82357a_send_bulk_msg(struct agilent_82357a_priv *a_priv, void cleanup: if (timeout_msecs) { if (timer_pending(&a_priv->bulk_timer)) - del_timer_sync(&a_priv->bulk_timer); + timer_delete_sync(&a_priv->bulk_timer); } mutex_lock(&a_priv->bulk_alloc_lock); if (a_priv->bulk_urb) { @@ -139,7 +143,7 @@ static int agilent_82357a_receive_bulk_msg(struct agilent_82357a_priv *a_priv, v } usb_dev = interface_to_usbdev(a_priv->bus_interface); in_pipe = usb_rcvbulkpipe(usb_dev, AGILENT_82357_BULK_IN_ENDPOINT); - sema_init(&context->complete, 0); + init_completion(&context->complete); context->timed_out = 0; usb_fill_bulk_urb(a_priv->bulk_urb, usb_dev, in_pipe, data, data_length, &agilent_82357a_bulk_complete, context); @@ -149,14 +153,12 @@ static int agilent_82357a_receive_bulk_msg(struct agilent_82357a_priv *a_priv, v retval = usb_submit_urb(a_priv->bulk_urb, GFP_KERNEL); if (retval) { - dev_err(&usb_dev->dev, "%s: failed to submit bulk out urb, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "failed to submit bulk in urb, retval=%i\n", retval); mutex_unlock(&a_priv->bulk_alloc_lock); goto cleanup; } mutex_unlock(&a_priv->bulk_alloc_lock); - if (down_interruptible(&context->complete)) { - dev_err(&usb_dev->dev, "%s: interrupted\n", __func__); + if (wait_for_completion_interruptible(&context->complete)) { retval = -ERESTARTSYS; goto cleanup; } @@ -168,7 +170,7 @@ static int agilent_82357a_receive_bulk_msg(struct agilent_82357a_priv *a_priv, v *actual_data_length = a_priv->bulk_urb->actual_length; cleanup: if (timeout_msecs) - del_timer_sync(&a_priv->bulk_timer); + timer_delete_sync(&a_priv->bulk_timer); mutex_lock(&a_priv->bulk_alloc_lock); if (a_priv->bulk_urb) { @@ -205,7 +207,6 @@ static int agilent_82357a_receive_control_msg(struct agilent_82357a_priv *a_priv static void agilent_82357a_dump_raw_block(const u8 *raw_data, int length) { - pr_info("hex block dump\n"); print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 8, 1, raw_data, length, true); } @@ -225,7 +226,7 @@ static int agilent_82357a_write_registers(struct agilent_82357a_priv *a_priv, static const int max_writes = 31; if (num_writes > max_writes) { - dev_err(&usb_dev->dev, "%s: bug! num_writes=%i too large\n", __func__, num_writes); + dev_err(&usb_dev->dev, "bug! num_writes=%i too large\n", num_writes); return -EIO; } out_data_length = num_writes * bytes_per_write + header_length; @@ -239,8 +240,7 @@ static int agilent_82357a_write_registers(struct agilent_82357a_priv *a_priv, out_data[i++] = writes[j].address; out_data[i++] = writes[j].value; } - if (i > out_data_length) - dev_err(&usb_dev->dev, "%s: bug! buffer overrun\n", __func__); + retval = mutex_lock_interruptible(&a_priv->bulk_transfer_lock); if (retval) { kfree(out_data); @@ -249,8 +249,8 @@ static int agilent_82357a_write_registers(struct agilent_82357a_priv *a_priv, retval = agilent_82357a_send_bulk_msg(a_priv, out_data, i, &bytes_written, 1000); kfree(out_data); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); mutex_unlock(&a_priv->bulk_transfer_lock); return retval; } @@ -265,20 +265,19 @@ static int agilent_82357a_write_registers(struct agilent_82357a_priv *a_priv, mutex_unlock(&a_priv->bulk_transfer_lock); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); agilent_82357a_dump_raw_block(in_data, bytes_read); kfree(in_data); return -EIO; } if (in_data[0] != (0xff & ~DATA_PIPE_CMD_WR_REGS)) { - dev_err(&usb_dev->dev, "%s: error, bulk command=0x%x != ~DATA_PIPE_CMD_WR_REGS\n", - __func__, in_data[0]); + dev_err(&usb_dev->dev, "bulk command=0x%x != ~DATA_PIPE_CMD_WR_REGS\n", in_data[0]); return -EIO; } if (in_data[1]) { - dev_err(&usb_dev->dev, "%s: nonzero error code 0x%x in DATA_PIPE_CMD_WR_REGS response\n", - __func__, in_data[1]); + dev_err(&usb_dev->dev, "nonzero error code 0x%x in DATA_PIPE_CMD_WR_REGS response\n", + in_data[1]); return -EIO; } kfree(in_data); @@ -299,9 +298,10 @@ static int agilent_82357a_read_registers(struct agilent_82357a_priv *a_priv, static const int header_length = 2; static const int max_reads = 62; - if (num_reads > max_reads) - dev_err(&usb_dev->dev, "%s: bug! num_reads=%i too large\n", __func__, num_reads); - + if (num_reads > max_reads) { + dev_err(&usb_dev->dev, "bug! num_reads=%i too large\n", num_reads); + return -EIO; + } out_data_length = num_reads + header_length; out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) @@ -311,8 +311,7 @@ static int agilent_82357a_read_registers(struct agilent_82357a_priv *a_priv, out_data[i++] = num_reads; for (j = 0; j < num_reads; j++) out_data[i++] = reads[j].address; - if (i > out_data_length) - dev_err(&usb_dev->dev, "%s: bug! buffer overrun\n", __func__); + if (blocking) { retval = mutex_lock_interruptible(&a_priv->bulk_transfer_lock); if (retval) { @@ -329,8 +328,8 @@ static int agilent_82357a_read_registers(struct agilent_82357a_priv *a_priv, retval = agilent_82357a_send_bulk_msg(a_priv, out_data, i, &bytes_written, 1000); kfree(out_data); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); mutex_unlock(&a_priv->bulk_transfer_lock); return retval; } @@ -345,21 +344,20 @@ static int agilent_82357a_read_registers(struct agilent_82357a_priv *a_priv, mutex_unlock(&a_priv->bulk_transfer_lock); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); agilent_82357a_dump_raw_block(in_data, bytes_read); kfree(in_data); return -EIO; } i = 0; if (in_data[i++] != (0xff & ~DATA_PIPE_CMD_RD_REGS)) { - dev_err(&usb_dev->dev, "%s: error, bulk command=0x%x != ~DATA_PIPE_CMD_RD_REGS\n", - __func__, in_data[0]); + dev_err(&usb_dev->dev, "bulk command=0x%x != ~DATA_PIPE_CMD_RD_REGS\n", in_data[0]); return -EIO; } if (in_data[i++]) { - dev_err(&usb_dev->dev, "%s: nonzero error code 0x%x in DATA_PIPE_CMD_RD_REGS response\n", - __func__, in_data[1]); + dev_err(&usb_dev->dev, "nonzero error code 0x%x in DATA_PIPE_CMD_RD_REGS response\n", + in_data[1]); return -EIO; } for (j = 0; j < num_reads; j++) @@ -390,14 +388,13 @@ static int agilent_82357a_abort(struct agilent_82357a_priv *a_priv, int flush) wIndex, status_data, status_data_len, 100); if (receive_control_retval < 0) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_receive_control_msg() returned %i\n", - __func__, receive_control_retval); + dev_err(&usb_dev->dev, "82357a_receive_control_msg() returned %i\n", + receive_control_retval); retval = -EIO; goto cleanup; } if (status_data[0] != (~XFER_ABORT & 0xff)) { - dev_err(&usb_dev->dev, "%s: error, major code=0x%x != ~XFER_ABORT\n", - __func__, status_data[0]); + dev_err(&usb_dev->dev, "major code=0x%x != ~XFER_ABORT\n", status_data[0]); retval = -EIO; goto cleanup; } @@ -413,8 +410,7 @@ static int agilent_82357a_abort(struct agilent_82357a_priv *a_priv, int flush) fallthrough; case UGP_ERR_FLUSHING_ALREADY: default: - dev_err(&usb_dev->dev, "%s: abort returned error code=0x%x\n", - __func__, status_data[1]); + dev_err(&usb_dev->dev, "abort returned error code=0x%x\n", status_data[1]); retval = -EIO; break; } @@ -425,15 +421,15 @@ cleanup: } // interface functions -int agilent_82357a_command(gpib_board_t *board, uint8_t *buffer, size_t length, +int agilent_82357a_command(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written); -static int agilent_82357a_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, +static int agilent_82357a_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *nbytes) { int retval; struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; int out_data_length, in_data_length; int bytes_written, bytes_read; @@ -444,6 +440,10 @@ static int agilent_82357a_read(gpib_board_t *board, uint8_t *buffer, size_t leng *nbytes = 0; *end = 0; + + if (!a_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(a_priv->bus_interface); out_data_length = 0x9; out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) @@ -469,8 +469,8 @@ static int agilent_82357a_read(gpib_board_t *board, uint8_t *buffer, size_t leng retval = agilent_82357a_send_bulk_msg(a_priv, out_data, i, &bytes_written, msec_timeout); kfree(out_data); if (retval || bytes_written != i) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); mutex_unlock(&a_priv->bulk_transfer_lock); if (retval < 0) return retval; @@ -501,19 +501,19 @@ static int agilent_82357a_read(gpib_board_t *board, uint8_t *buffer, size_t leng &extra_bytes_read, 100); bytes_read += extra_bytes_read; if (extra_bytes_retval) { - dev_err(&usb_dev->dev, "%s: extra_bytes_retval=%i, bytes_read=%i\n", - __func__, extra_bytes_retval, bytes_read); + dev_err(&usb_dev->dev, "extra_bytes_retval=%i, bytes_read=%i\n", + extra_bytes_retval, bytes_read); agilent_82357a_abort(a_priv, 0); } } else if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); agilent_82357a_abort(a_priv, 0); } mutex_unlock(&a_priv->bulk_transfer_lock); if (bytes_read > length + 1) { bytes_read = length + 1; - pr_warn("%s: bytes_read > length? truncating", __func__); + dev_warn(&usb_dev->dev, "bytes_read > length? truncating"); } if (bytes_read >= 1) { @@ -525,9 +525,10 @@ static int agilent_82357a_read(gpib_board_t *board, uint8_t *buffer, size_t leng } kfree(in_data); - /* Fix for a bug in 9914A that does not return the contents of ADSR - * when the board is in listener active state and ATN is not asserted. - * Set ATN here to obtain a valid board level ibsta + /* + * Fix for a bug in 9914A that does not return the contents of ADSR + * when the board is in listener active state and ATN is not asserted. + * Set ATN here to obtain a valid board level ibsta */ agilent_82357a_take_control_internal(board, 0); @@ -535,12 +536,14 @@ static int agilent_82357a_read(gpib_board_t *board, uint8_t *buffer, size_t leng return retval; } -static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_commands, int send_eoi, size_t *bytes_written) +static ssize_t agilent_82357a_generic_write(struct gpib_board *board, + u8 *buffer, size_t length, + int send_commands, int send_eoi, + size_t *bytes_written) { int retval; struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data = NULL; u8 *status_data = NULL; int out_data_length; @@ -551,6 +554,10 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer struct agilent_82357a_register_pairlet read_reg; *bytes_written = 0; + if (!a_priv->bus_interface) + return -ENODEV; + + usb_dev = interface_to_usbdev(a_priv->bus_interface); out_data_length = length + 0x8; out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) @@ -584,8 +591,8 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer kfree(out_data); if (retval || raw_bytes_written != i) { agilent_82357a_abort(a_priv, 0); - dev_err(&usb_dev->dev, "%s: agilent_82357a_send_bulk_msg returned %i, raw_bytes_written=%i, i=%i\n", - __func__, retval, raw_bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, raw_bytes_written=%i, i=%i\n", + retval, raw_bytes_written, i); mutex_unlock(&a_priv->bulk_transfer_lock); if (retval < 0) return retval; @@ -597,7 +604,7 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer &a_priv->interrupt_flags) || test_bit(TIMO_NUM, &board->status)); if (retval) { - dev_err(&usb_dev->dev, "%s: wait write complete interrupted\n", __func__); + dev_dbg(&usb_dev->dev, "wait write complete interrupted\n"); agilent_82357a_abort(a_priv, 0); mutex_unlock(&a_priv->bulk_transfer_lock); return -ERESTARTSYS; @@ -614,8 +621,7 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer read_reg.address = BSR; retval = agilent_82357a_read_registers(a_priv, &read_reg, 1, 1); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_read_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "read_registers() returned error\n"); return -ETIMEDOUT; } @@ -632,8 +638,7 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer read_reg.address = ADSR; retval = agilent_82357a_read_registers(a_priv, &read_reg, 1, 1); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_read_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "read_registers() returned error\n"); return -ETIMEDOUT; } adsr = read_reg.value; @@ -659,8 +664,7 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer 100); mutex_unlock(&a_priv->bulk_transfer_lock); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_receive_control_msg() returned %i\n", - __func__, retval); + dev_err(&usb_dev->dev, "receive_control_msg() returned %i\n", retval); kfree(status_data); return -EIO; } @@ -673,19 +677,19 @@ static ssize_t agilent_82357a_generic_write(gpib_board_t *board, uint8_t *buffer return 0; } -static int agilent_82357a_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written) +static int agilent_82357a_write(struct gpib_board *board, u8 *buffer, + size_t length, int send_eoi, size_t *bytes_written) { return agilent_82357a_generic_write(board, buffer, length, 0, send_eoi, bytes_written); } -int agilent_82357a_command(gpib_board_t *board, uint8_t *buffer, size_t length, +int agilent_82357a_command(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written) { return agilent_82357a_generic_write(board, buffer, length, 1, 0, bytes_written); } -int agilent_82357a_take_control_internal(gpib_board_t *board, int synchronous) +int agilent_82357a_take_control_internal(struct gpib_board *board, int synchronous) { struct agilent_82357a_priv *a_priv = board->private_data; struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); @@ -699,20 +703,24 @@ int agilent_82357a_take_control_internal(gpib_board_t *board, int synchronous) write.value = AUX_TCA; retval = agilent_82357a_write_registers(a_priv, &write, 1); if (retval) - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return retval; } -static int agilent_82357a_take_control(gpib_board_t *board, int synchronous) +static int agilent_82357a_take_control(struct gpib_board *board, int synchronous) { + struct agilent_82357a_priv *a_priv = board->private_data; const int timeout = 10; int i; -/* It looks like the 9914 does not handle tcs properly. - * See comment above tms9914_take_control_workaround() in - * drivers/gpib/tms9914/tms9914_aux.c + if (!a_priv->bus_interface) + return -ENODEV; + +/* + * It looks like the 9914 does not handle tcs properly. + * See comment above tms9914_take_control_workaround() in + * drivers/gpib/tms9914/tms9914_aux.c */ if (synchronous) return -ETIMEDOUT; @@ -730,40 +738,44 @@ static int agilent_82357a_take_control(gpib_board_t *board, int synchronous) return 0; } -static int agilent_82357a_go_to_standby(gpib_board_t *board) +static int agilent_82357a_go_to_standby(struct gpib_board *board) { struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; struct agilent_82357a_register_pairlet write; int retval; + if (!a_priv->bus_interface) + return -ENODEV; + + usb_dev = interface_to_usbdev(a_priv->bus_interface); write.address = AUXCR; write.value = AUX_GTS; retval = agilent_82357a_write_registers(a_priv, &write, 1); if (retval) - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return 0; } -//FIXME should change prototype to return int -static void agilent_82357a_request_system_control(gpib_board_t *board, int request_control) +static int agilent_82357a_request_system_control(struct gpib_board *board, int request_control) { struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; struct agilent_82357a_register_pairlet writes[2]; int retval; int i = 0; + if (!a_priv->bus_interface) + return -ENODEV; + + usb_dev = interface_to_usbdev(a_priv->bus_interface); /* 82357B needs bit to be set in 9914 AUXCR register */ writes[i].address = AUXCR; if (request_control) { writes[i].value = AUX_RQC; a_priv->hw_control_bits |= SYSTEM_CONTROLLER; } else { - writes[i].value = AUX_RLC; - a_priv->is_cic = 0; - a_priv->hw_control_bits &= ~SYSTEM_CONTROLLER; + return -EINVAL; } ++i; writes[i].address = HW_CONTROL; @@ -771,18 +783,21 @@ static void agilent_82357a_request_system_control(gpib_board_t *board, int reque ++i; retval = agilent_82357a_write_registers(a_priv, writes, i); if (retval) - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); - return;// retval; + dev_err(&usb_dev->dev, "write_registers() returned error\n"); + return retval; } -static void agilent_82357a_interface_clear(gpib_board_t *board, int assert) +static void agilent_82357a_interface_clear(struct gpib_board *board, int assert) { struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; struct agilent_82357a_register_pairlet write; int retval; + if (!a_priv->bus_interface) + return; // -ENODEV; + + usb_dev = interface_to_usbdev(a_priv->bus_interface); write.address = AUXCR; write.value = AUX_SIC; if (assert) { @@ -791,56 +806,64 @@ static void agilent_82357a_interface_clear(gpib_board_t *board, int assert) } retval = agilent_82357a_write_registers(a_priv, &write, 1); if (retval) - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); } -static void agilent_82357a_remote_enable(gpib_board_t *board, int enable) +static void agilent_82357a_remote_enable(struct gpib_board *board, int enable) { struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; struct agilent_82357a_register_pairlet write; int retval; + if (!a_priv->bus_interface) + return; //-ENODEV; + + usb_dev = interface_to_usbdev(a_priv->bus_interface); write.address = AUXCR; write.value = AUX_SRE; if (enable) write.value |= AUX_CS; retval = agilent_82357a_write_registers(a_priv, &write, 1); if (retval) - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); a_priv->ren_state = enable; return;// 0; } -static int agilent_82357a_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int agilent_82357a_enable_eos(struct gpib_board *board, u8 eos_byte, + int compare_8_bits) { struct agilent_82357a_priv *a_priv = board->private_data; - if (compare_8_bits == 0) { - pr_warn("%s: hardware only supports 8-bit EOS compare", __func__); + if (!a_priv->bus_interface) + return -ENODEV; + if (compare_8_bits == 0) return -EOPNOTSUPP; - } + a_priv->eos_char = eos_byte; a_priv->eos_mode = REOS | BIN; return 0; } -static void agilent_82357a_disable_eos(gpib_board_t *board) +static void agilent_82357a_disable_eos(struct gpib_board *board) { struct agilent_82357a_priv *a_priv = board->private_data; a_priv->eos_mode &= ~REOS; } -static unsigned int agilent_82357a_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int agilent_82357a_update_status(struct gpib_board *board, + unsigned int clear_mask) { struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; struct agilent_82357a_register_pairlet address_status, bus_status; int retval; + if (!a_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(a_priv->bus_interface); board->status &= ~clear_mask; if (a_priv->is_cic) set_bit(CIC_NUM, &board->status); @@ -850,8 +873,7 @@ static unsigned int agilent_82357a_update_status(gpib_board_t *board, unsigned i retval = agilent_82357a_read_registers(a_priv, &address_status, 1, 0); if (retval) { if (retval != -EAGAIN) - dev_err(&usb_dev->dev, "%s: agilent_82357a_read_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "read_registers() returned error\n"); return board->status; } // check for remote/local @@ -883,8 +905,7 @@ static unsigned int agilent_82357a_update_status(gpib_board_t *board, unsigned i retval = agilent_82357a_read_registers(a_priv, &bus_status, 1, 0); if (retval) { if (retval != -EAGAIN) - dev_err(&usb_dev->dev, "%s: agilent_82357a_read_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "read_registers() returned error\n"); return board->status; } if (bus_status.value & BSR_SRQ_BIT) @@ -895,40 +916,46 @@ static unsigned int agilent_82357a_update_status(gpib_board_t *board, unsigned i return board->status; } -static int agilent_82357a_primary_address(gpib_board_t *board, unsigned int address) +static int agilent_82357a_primary_address(struct gpib_board *board, unsigned int address) { struct agilent_82357a_priv *a_priv = board->private_data; struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); struct agilent_82357a_register_pairlet write; int retval; + if (!a_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(a_priv->bus_interface); // put primary address in address0 write.address = ADR; write.value = address & ADDRESS_MASK; retval = agilent_82357a_write_registers(a_priv, &write, 1); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return retval; } return retval; } -static int agilent_82357a_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int agilent_82357a_secondary_address(struct gpib_board *board, + unsigned int address, int enable) { if (enable) - pr_warn("%s: warning: assigning a secondary address not supported\n", __func__); - return -EOPNOTSUPP; + return -EOPNOTSUPP; + return 0; } -static int agilent_82357a_parallel_poll(gpib_board_t *board, uint8_t *result) +static int agilent_82357a_parallel_poll(struct gpib_board *board, u8 *result) { struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; struct agilent_82357a_register_pairlet writes[2]; struct agilent_82357a_register_pairlet read; int retval; + if (!a_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(a_priv->bus_interface); // execute parallel poll writes[0].address = AUXCR; writes[0].value = AUX_CS | AUX_RPP; @@ -936,16 +963,14 @@ static int agilent_82357a_parallel_poll(gpib_board_t *board, uint8_t *result) writes[1].value = a_priv->hw_control_bits & ~NOT_PARALLEL_POLL; retval = agilent_82357a_write_registers(a_priv, writes, 2); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return retval; } udelay(2); //silly, since usb write will take way longer read.address = CPTR; retval = agilent_82357a_read_registers(a_priv, &read, 1, 1); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_read_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "read_registers() returned error\n"); return retval; } *result = read.value; @@ -956,75 +981,76 @@ static int agilent_82357a_parallel_poll(gpib_board_t *board, uint8_t *result) writes[1].value = AUX_RPP; retval = agilent_82357a_write_registers(a_priv, writes, 2); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return retval; } return 0; } -static void agilent_82357a_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void agilent_82357a_parallel_poll_configure(struct gpib_board *board, u8 config) { //board can only be system controller return;// 0; } -static void agilent_82357a_parallel_poll_response(gpib_board_t *board, int ist) +static void agilent_82357a_parallel_poll_response(struct gpib_board *board, int ist) { //board can only be system controller return;// 0; } -static void agilent_82357a_serial_poll_response(gpib_board_t *board, uint8_t status) +static void agilent_82357a_serial_poll_response(struct gpib_board *board, u8 status) { //board can only be system controller return;// 0; } -static uint8_t agilent_82357a_serial_poll_status(gpib_board_t *board) +static u8 agilent_82357a_serial_poll_status(struct gpib_board *board) { //board can only be system controller return 0; } -static void agilent_82357a_return_to_local(gpib_board_t *board) +static void agilent_82357a_return_to_local(struct gpib_board *board) { //board can only be system controller return;// 0; } -static int agilent_82357a_line_status(const gpib_board_t *board) +static int agilent_82357a_line_status(const struct gpib_board *board) { struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; struct agilent_82357a_register_pairlet bus_status; int retval; - int status = ValidALL; + int status = VALID_ALL; + if (!a_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(a_priv->bus_interface); bus_status.address = BSR; retval = agilent_82357a_read_registers(a_priv, &bus_status, 1, 0); if (retval) { if (retval != -EAGAIN) - dev_err(&usb_dev->dev, "%s: agilent_82357a_read_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "read_registers() returned error\n"); return retval; } if (bus_status.value & BSR_REN_BIT) - status |= BusREN; + status |= BUS_REN; if (bus_status.value & BSR_IFC_BIT) - status |= BusIFC; + status |= BUS_IFC; if (bus_status.value & BSR_SRQ_BIT) - status |= BusSRQ; + status |= BUS_SRQ; if (bus_status.value & BSR_EOI_BIT) - status |= BusEOI; + status |= BUS_EOI; if (bus_status.value & BSR_NRFD_BIT) - status |= BusNRFD; + status |= BUS_NRFD; if (bus_status.value & BSR_NDAC_BIT) - status |= BusNDAC; + status |= BUS_NDAC; if (bus_status.value & BSR_DAV_BIT) - status |= BusDAV; + status |= BUS_DAV; if (bus_status.value & BSR_ATN_BIT) - status |= BusATN; + status |= BUS_ATN; return status; } @@ -1044,25 +1070,27 @@ static unsigned short nanosec_to_fast_talker_bits(unsigned int *nanosec) return bits; } -static unsigned int agilent_82357a_t1_delay(gpib_board_t *board, unsigned int nanosec) +static int agilent_82357a_t1_delay(struct gpib_board *board, unsigned int nanosec) { struct agilent_82357a_priv *a_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); + struct usb_device *usb_dev; struct agilent_82357a_register_pairlet write; int retval; + if (!a_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(a_priv->bus_interface); write.address = FAST_TALKER_T1; write.value = nanosec_to_fast_talker_bits(&nanosec); retval = agilent_82357a_write_registers(a_priv, &write, 1); if (retval) - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return nanosec; } static void agilent_82357a_interrupt_complete(struct urb *urb) { - gpib_board_t *board = urb->context; + struct gpib_board *board = urb->context; struct agilent_82357a_priv *a_priv = board->private_data; struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); int retval; @@ -1081,7 +1109,7 @@ static void agilent_82357a_interrupt_complete(struct urb *urb) default: /* other error, resubmit */ retval = usb_submit_urb(a_priv->interrupt_urb, GFP_ATOMIC); if (retval) - dev_err(&usb_dev->dev, "%s: failed to resubmit interrupt urb\n", __func__); + dev_err(&usb_dev->dev, "failed to resubmit interrupt urb\n"); return; } @@ -1097,10 +1125,10 @@ static void agilent_82357a_interrupt_complete(struct urb *urb) retval = usb_submit_urb(a_priv->interrupt_urb, GFP_ATOMIC); if (retval) - dev_err(&usb_dev->dev, "%s: failed to resubmit interrupt urb\n", __func__); + dev_err(&usb_dev->dev, "failed to resubmit interrupt urb\n"); } -static int agilent_82357a_setup_urbs(gpib_board_t *board) +static int agilent_82357a_setup_urbs(struct gpib_board *board) { struct agilent_82357a_priv *a_priv = board->private_data; struct usb_device *usb_dev; @@ -1133,8 +1161,7 @@ static int agilent_82357a_setup_urbs(gpib_board_t *board) if (retval) { usb_free_urb(a_priv->interrupt_urb); a_priv->interrupt_urb = NULL; - dev_err(&usb_dev->dev, "%s: failed to submit first interrupt urb, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "failed to submit first interrupt urb, retval=%i\n", retval); goto setup_exit; } mutex_unlock(&a_priv->interrupt_alloc_lock); @@ -1165,7 +1192,7 @@ static void agilent_82357a_release_urbs(struct agilent_82357a_priv *a_priv) } } -static int agilent_82357a_allocate_private(gpib_board_t *board) +static int agilent_82357a_allocate_private(struct gpib_board *board) { struct agilent_82357a_priv *a_priv; @@ -1180,112 +1207,82 @@ static int agilent_82357a_allocate_private(gpib_board_t *board) return 0; } -static void agilent_82357a_free_private(gpib_board_t *board) +static void agilent_82357a_free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; - } -static int agilent_82357a_init(gpib_board_t *board) +#define INIT_NUM_REG_WRITES 18 +static int agilent_82357a_init(struct gpib_board *board) { struct agilent_82357a_priv *a_priv = board->private_data; struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); struct agilent_82357a_register_pairlet hw_control; - struct agilent_82357a_register_pairlet writes[0x20]; + struct agilent_82357a_register_pairlet writes[INIT_NUM_REG_WRITES]; int retval; - int i; unsigned int nanosec; - i = 0; - writes[i].address = LED_CONTROL; - writes[i].value = FAIL_LED_ON; - ++i; - writes[i].address = RESET_TO_POWERUP; - writes[i].value = RESET_SPACEBALL; - ++i; - retval = agilent_82357a_write_registers(a_priv, writes, i); + writes[0].address = LED_CONTROL; + writes[0].value = FAIL_LED_ON; + writes[1].address = RESET_TO_POWERUP; + writes[1].value = RESET_SPACEBALL; + retval = agilent_82357a_write_registers(a_priv, writes, 2); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return -EIO; } set_current_state(TASK_INTERRUPTIBLE); if (schedule_timeout(usec_to_jiffies(2000))) return -ERESTARTSYS; - i = 0; - writes[i].address = AUXCR; - writes[i].value = AUX_NBAF; - ++i; - writes[i].address = AUXCR; - writes[i].value = AUX_HLDE; - ++i; - writes[i].address = AUXCR; - writes[i].value = AUX_TON; - ++i; - writes[i].address = AUXCR; - writes[i].value = AUX_LON; - ++i; - writes[i].address = AUXCR; - writes[i].value = AUX_RSV2; - ++i; - writes[i].address = AUXCR; - writes[i].value = AUX_INVAL; - ++i; - writes[i].address = AUXCR; - writes[i].value = AUX_RPP; - ++i; - writes[i].address = AUXCR; - writes[i].value = AUX_STDL; - ++i; - writes[i].address = AUXCR; - writes[i].value = AUX_VSTDL; - ++i; - writes[i].address = FAST_TALKER_T1; + writes[0].address = AUXCR; + writes[0].value = AUX_NBAF; + writes[1].address = AUXCR; + writes[1].value = AUX_HLDE; + writes[2].address = AUXCR; + writes[2].value = AUX_TON; + writes[3].address = AUXCR; + writes[3].value = AUX_LON; + writes[4].address = AUXCR; + writes[4].value = AUX_RSV2; + writes[5].address = AUXCR; + writes[5].value = AUX_INVAL; + writes[6].address = AUXCR; + writes[6].value = AUX_RPP; + writes[7].address = AUXCR; + writes[7].value = AUX_STDL; + writes[8].address = AUXCR; + writes[8].value = AUX_VSTDL; + writes[9].address = FAST_TALKER_T1; nanosec = board->t1_nano_sec; - writes[i].value = nanosec_to_fast_talker_bits(&nanosec); + writes[9].value = nanosec_to_fast_talker_bits(&nanosec); board->t1_nano_sec = nanosec; - ++i; - writes[i].address = ADR; - writes[i].value = board->pad & ADDRESS_MASK; - ++i; - writes[i].address = PPR; - writes[i].value = 0; - ++i; - writes[i].address = SPMR; - writes[i].value = 0; - ++i; - writes[i].address = PROTOCOL_CONTROL; - writes[i].value = WRITE_COMPLETE_INTERRUPT_EN; - ++i; - writes[i].address = IMR0; - writes[i].value = HR_BOIE | HR_BIIE; - ++i; - writes[i].address = IMR1; - writes[i].value = HR_SRQIE; - ++i; + writes[10].address = ADR; + writes[10].value = board->pad & ADDRESS_MASK; + writes[11].address = PPR; + writes[11].value = 0; + writes[12].address = SPMR; + writes[12].value = 0; + writes[13].address = PROTOCOL_CONTROL; + writes[13].value = WRITE_COMPLETE_INTERRUPT_EN; + writes[14].address = IMR0; + writes[14].value = HR_BOIE | HR_BIIE; + writes[15].address = IMR1; + writes[15].value = HR_SRQIE; // turn off reset state - writes[i].address = AUXCR; - writes[i].value = AUX_CHIP_RESET; - ++i; - writes[i].address = LED_CONTROL; - writes[i].value = FIRMWARE_LED_CONTROL; - ++i; - if (i > ARRAY_SIZE(writes)) { - dev_err(&usb_dev->dev, "%s: bug! writes[] overflow\n", __func__); - return -EFAULT; - } - retval = agilent_82357a_write_registers(a_priv, writes, i); + writes[16].address = AUXCR; + writes[16].value = AUX_CHIP_RESET; + writes[17].address = LED_CONTROL; + writes[17].value = FIRMWARE_LED_CONTROL; + retval = agilent_82357a_write_registers(a_priv, writes, INIT_NUM_REG_WRITES); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return -EIO; } hw_control.address = HW_CONTROL; retval = agilent_82357a_read_registers(a_priv, &hw_control, 1, 1); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_read_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "read_registers() returned error\n"); return -EIO; } a_priv->hw_control_bits = (hw_control.value & ~0x7) | NOT_TI_RESET | NOT_PARALLEL_POLL; @@ -1294,7 +1291,7 @@ static int agilent_82357a_init(gpib_board_t *board) } static inline int agilent_82357a_device_match(struct usb_interface *interface, - const gpib_board_config_t *config) + const struct gpib_board_config *config) { struct usb_device * const usbdev = interface_to_usbdev(interface); @@ -1307,7 +1304,7 @@ static inline int agilent_82357a_device_match(struct usb_interface *interface, return 1; } -static int agilent_82357a_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int agilent_82357a_attach(struct gpib_board *board, const struct gpib_board_config *config) { int retval; int i; @@ -1336,7 +1333,7 @@ static int agilent_82357a_attach(gpib_board_t *board, const gpib_board_config_t } if (i == MAX_NUM_82357A_INTERFACES) { dev_err(board->gpib_dev, - "No Agilent 82357 gpib adapters found, have you loaded its firmware?\n"); + "No supported adapters found, have you loaded its firmware?\n"); retval = -ENODEV; goto attach_fail; } @@ -1372,8 +1369,7 @@ static int agilent_82357a_attach(gpib_board_t *board, const gpib_board_config_t goto attach_fail; } - dev_info(&usb_dev->dev, - "bus %d dev num %d attached to gpib minor %d, agilent usb interface %i\n", + dev_info(&usb_dev->dev, "bus %d dev num %d attached to gpib%d, interface %i\n", usb_dev->bus->busnum, usb_dev->devnum, board->minor, i); mutex_unlock(&agilent_82357a_hotplug_lock); return retval; @@ -1384,49 +1380,36 @@ attach_fail: return retval; } -static int agilent_82357a_go_idle(gpib_board_t *board) +static int agilent_82357a_go_idle(struct gpib_board *board) { struct agilent_82357a_priv *a_priv = board->private_data; struct usb_device *usb_dev = interface_to_usbdev(a_priv->bus_interface); struct agilent_82357a_register_pairlet writes[0x20]; int retval; - int i; - i = 0; // turn on tms9914 reset state - writes[i].address = AUXCR; - writes[i].value = AUX_CS | AUX_CHIP_RESET; - ++i; + writes[0].address = AUXCR; + writes[0].value = AUX_CS | AUX_CHIP_RESET; a_priv->hw_control_bits &= ~NOT_TI_RESET; - writes[i].address = HW_CONTROL; - writes[i].value = a_priv->hw_control_bits; - ++i; - writes[i].address = PROTOCOL_CONTROL; - writes[i].value = 0; - ++i; - writes[i].address = IMR0; - writes[i].value = 0; - ++i; - writes[i].address = IMR1; - writes[i].value = 0; - ++i; - writes[i].address = LED_CONTROL; - writes[i].value = 0; - ++i; - if (i > ARRAY_SIZE(writes)) { - dev_err(&usb_dev->dev, "%s: bug! writes[] overflow\n", __func__); - return -EFAULT; - } - retval = agilent_82357a_write_registers(a_priv, writes, i); + writes[1].address = HW_CONTROL; + writes[1].value = a_priv->hw_control_bits; + writes[2].address = PROTOCOL_CONTROL; + writes[2].value = 0; + writes[3].address = IMR0; + writes[3].value = 0; + writes[4].address = IMR1; + writes[4].value = 0; + writes[5].address = LED_CONTROL; + writes[5].value = 0; + retval = agilent_82357a_write_registers(a_priv, writes, 6); if (retval) { - dev_err(&usb_dev->dev, "%s: agilent_82357a_write_registers() returned error\n", - __func__); + dev_err(&usb_dev->dev, "write_registers() returned error\n"); return -EIO; } return 0; } -static void agilent_82357a_detach(gpib_board_t *board) +static void agilent_82357a_detach(struct gpib_board *board) { struct agilent_82357a_priv *a_priv; @@ -1445,11 +1428,10 @@ static void agilent_82357a_detach(gpib_board_t *board) agilent_82357a_release_urbs(a_priv); agilent_82357a_free_private(board); } - dev_info(board->gpib_dev, "%s: detached\n", __func__); mutex_unlock(&agilent_82357a_hotplug_lock); } -static gpib_interface_t agilent_82357a_gpib_interface = { +static struct gpib_interface agilent_82357a_gpib_interface = { .name = "agilent_82357a", .attach = agilent_82357a_attach, .detach = agilent_82357a_detach, @@ -1510,8 +1492,7 @@ static int agilent_82357a_driver_probe(struct usb_interface *interface, if (i == MAX_NUM_82357A_INTERFACES) { usb_put_dev(usb_dev); mutex_unlock(&agilent_82357a_hotplug_lock); - dev_err(&usb_dev->dev, "%s: out of space in agilent_82357a_driver_interfaces[]\n", - __func__); + dev_err(&usb_dev->dev, "out of space in agilent_82357a_driver_interfaces[]\n"); return -1; } path = kmalloc(path_length, GFP_KERNEL); @@ -1536,7 +1517,7 @@ static void agilent_82357a_driver_disconnect(struct usb_interface *interface) for (i = 0; i < MAX_NUM_82357A_INTERFACES; ++i) { if (agilent_82357a_driver_interfaces[i] == interface) { - gpib_board_t *board = usb_get_intfdata(interface); + struct gpib_board *board = usb_get_intfdata(interface); if (board) { struct agilent_82357a_priv *a_priv = board->private_data; @@ -1552,13 +1533,12 @@ static void agilent_82357a_driver_disconnect(struct usb_interface *interface) mutex_unlock(&a_priv->control_alloc_lock); } } - dev_dbg(&usb_dev->dev, "nulled agilent_82357a_driver_interfaces[%i]\n", i); agilent_82357a_driver_interfaces[i] = NULL; break; } } if (i == MAX_NUM_82357A_INTERFACES) - dev_err(&usb_dev->dev, "unable to find interface in agilent_82357a_driver_interfaces[]? bug?\n"); + dev_err(&usb_dev->dev, "unable to find interface - bug?\n"); usb_put_dev(usb_dev); mutex_unlock(&agilent_82357a_hotplug_lock); @@ -1573,7 +1553,7 @@ static int agilent_82357a_driver_suspend(struct usb_interface *interface, pm_mes for (i = 0; i < MAX_NUM_82357A_INTERFACES; ++i) { if (agilent_82357a_driver_interfaces[i] == interface) { - gpib_board_t *board = usb_get_intfdata(interface); + struct gpib_board *board = usb_get_intfdata(interface); if (board) { struct agilent_82357a_priv *a_priv = board->private_data; @@ -1583,18 +1563,18 @@ static int agilent_82357a_driver_suspend(struct usb_interface *interface, pm_mes agilent_82357a_abort(a_priv, 0); retval = agilent_82357a_go_idle(board); if (retval) { - dev_err(&usb_dev->dev, "%s: failed to go idle, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "failed to go idle, retval=%i\n", + retval); mutex_unlock(&agilent_82357a_hotplug_lock); return retval; } mutex_lock(&a_priv->interrupt_alloc_lock); agilent_82357a_cleanup_urbs(a_priv); mutex_unlock(&a_priv->interrupt_alloc_lock); - dev_info(&usb_dev->dev, - "bus %d dev num %d gpib minor %d, agilent usb interface %i suspended\n", - usb_dev->bus->busnum, usb_dev->devnum, - board->minor, i); + dev_dbg(&usb_dev->dev, + "bus %d dev num %d gpib %d, interface %i suspended\n", + usb_dev->bus->busnum, usb_dev->devnum, + board->minor, i); } } break; @@ -1609,8 +1589,8 @@ static int agilent_82357a_driver_suspend(struct usb_interface *interface, pm_mes static int agilent_82357a_driver_resume(struct usb_interface *interface) { struct usb_device *usb_dev = interface_to_usbdev(interface); - gpib_board_t *board; - int i, retval; + struct gpib_board *board; + int i, retval = 0; mutex_lock(&agilent_82357a_hotplug_lock); @@ -1621,8 +1601,10 @@ static int agilent_82357a_driver_resume(struct usb_interface *interface) break; } } - if (i == MAX_NUM_82357A_INTERFACES) + if (i == MAX_NUM_82357A_INTERFACES) { + retval = -ENOENT; goto resume_exit; + } struct agilent_82357a_priv *a_priv = board->private_data; @@ -1631,8 +1613,8 @@ static int agilent_82357a_driver_resume(struct usb_interface *interface) mutex_lock(&a_priv->interrupt_alloc_lock); retval = usb_submit_urb(a_priv->interrupt_urb, GFP_KERNEL); if (retval) { - dev_err(&usb_dev->dev, "%s: failed to resubmit interrupt urb, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "failed to resubmit interrupt urb in resume, retval=%i\n", + retval); mutex_unlock(&a_priv->interrupt_alloc_lock); mutex_unlock(&agilent_82357a_hotplug_lock); return retval; @@ -1645,7 +1627,7 @@ static int agilent_82357a_driver_resume(struct usb_interface *interface) return retval; } // set/unset system controller - agilent_82357a_request_system_control(board, board->master); + retval = agilent_82357a_request_system_control(board, board->master); // toggle ifc if master if (board->master) { agilent_82357a_interface_clear(board, 1); @@ -1655,19 +1637,19 @@ static int agilent_82357a_driver_resume(struct usb_interface *interface) // assert/unassert REN agilent_82357a_remote_enable(board, a_priv->ren_state); - dev_info(&usb_dev->dev, - "bus %d dev num %d gpib minor %d, agilent usb interface %i resumed\n", - usb_dev->bus->busnum, usb_dev->devnum, board->minor, i); + dev_dbg(&usb_dev->dev, + "bus %d dev num %d gpib%d, interface %i resumed\n", + usb_dev->bus->busnum, usb_dev->devnum, board->minor, i); } resume_exit: mutex_unlock(&agilent_82357a_hotplug_lock); - return 0; + return retval; } static struct usb_driver agilent_82357a_bus_driver = { - .name = "agilent_82357a_gpib", + .name = DRV_NAME, .probe = agilent_82357a_driver_probe, .disconnect = agilent_82357a_driver_disconnect, .suspend = agilent_82357a_driver_suspend, @@ -1680,19 +1662,18 @@ static int __init agilent_82357a_init_module(void) int i; int ret; - pr_info("agilent_82357a_gpib driver loading"); for (i = 0; i < MAX_NUM_82357A_INTERFACES; ++i) agilent_82357a_driver_interfaces[i] = NULL; ret = usb_register(&agilent_82357a_bus_driver); if (ret) { - pr_err("agilent_82357a: usb_register failed: error = %d\n", ret); + pr_err("usb_register failed: error = %d\n", ret); return ret; } ret = gpib_register_driver(&agilent_82357a_gpib_interface, THIS_MODULE); if (ret) { - pr_err("agilent_82357a: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); usb_deregister(&agilent_82357a_bus_driver); return ret; } @@ -1702,7 +1683,6 @@ static int __init agilent_82357a_init_module(void) static void __exit agilent_82357a_exit_module(void) { - pr_info("agilent_82357a_gpib driver unloading"); gpib_unregister_driver(&agilent_82357a_gpib_interface); usb_deregister(&agilent_82357a_bus_driver); } diff --git a/drivers/staging/gpib/agilent_82357a/agilent_82357a.h b/drivers/staging/gpib/agilent_82357a/agilent_82357a.h index cdbc3ec5d8bd..23aa4799eb86 100644 --- a/drivers/staging/gpib/agilent_82357a/agilent_82357a.h +++ b/drivers/staging/gpib/agilent_82357a/agilent_82357a.h @@ -6,7 +6,7 @@ #include <linux/kernel.h> #include <linux/mutex.h> -#include <linux/semaphore.h> +#include <linux/completion.h> #include <linux/usb.h> #include <linux/timer.h> #include <linux/compiler_attributes.h> @@ -115,7 +115,7 @@ enum xfer_abort_type { #define INTERRUPT_BUF_LEN 8 struct agilent_82357a_urb_ctx { - struct semaphore complete; + struct completion complete; unsigned timed_out : 1; }; diff --git a/drivers/staging/gpib/cb7210/Makefile b/drivers/staging/gpib/cb7210/Makefile index cda0725d6487..d239ae80b415 100644 --- a/drivers/staging/gpib/cb7210/Makefile +++ b/drivers/staging/gpib/cb7210/Makefile @@ -1,4 +1,3 @@ -ccflags-$(CONFIG_GPIB_PCMCIA) := -DGPIB_PCMCIA obj-$(CONFIG_GPIB_CB7210) += cb7210.o diff --git a/drivers/staging/gpib/cb7210/cb7210.c b/drivers/staging/gpib/cb7210/cb7210.c index 4d22f647a453..298ed306189d 100644 --- a/drivers/staging/gpib/cb7210/cb7210.c +++ b/drivers/staging/gpib/cb7210/cb7210.c @@ -5,6 +5,10 @@ * copyright : (C) 2001, 2002 by Frank Mori Hess ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include "cb7210.h" #include <linux/ioport.h> #include <linux/sched.h> @@ -23,7 +27,10 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB driver Measurement Computing boards using cb7210.2 and cbi488.2"); -static inline int have_fifo_word(const struct cb7210_priv *cb_priv) +static int cb7210_read(struct gpib_board *board, u8 *buffer, size_t length, + int *end, size_t *bytes_read); + + static inline int have_fifo_word(const struct cb7210_priv *cb_priv) { if (((cb7210_read_byte(cb_priv, HS_STATUS)) & (HS_RX_MSB_NOT_EMPTY | HS_RX_LSB_NOT_EMPTY)) == @@ -33,7 +40,7 @@ static inline int have_fifo_word(const struct cb7210_priv *cb_priv) return 0; } -static inline void input_fifo_enable(gpib_board_t *board, int enable) +static inline void input_fifo_enable(struct gpib_board *board, int enable) { struct cb7210_priv *cb_priv = board->private_data; struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; @@ -69,7 +76,7 @@ static inline void input_fifo_enable(gpib_board_t *board, int enable) spin_unlock_irqrestore(&board->spinlock, flags); } -static int fifo_read(gpib_board_t *board, struct cb7210_priv *cb_priv, uint8_t *buffer, +static int fifo_read(struct gpib_board *board, struct cb7210_priv *cb_priv, u8 *buffer, size_t length, int *end, size_t *bytes_read) { ssize_t retval = 0; @@ -80,12 +87,12 @@ static int fifo_read(gpib_board_t *board, struct cb7210_priv *cb_priv, uint8_t * *bytes_read = 0; if (cb_priv->fifo_iobase == 0) { - pr_err("cb7210: fifo iobase is zero!\n"); + dev_err(board->gpib_dev, "fifo iobase is zero!\n"); return -EIO; } *end = 0; if (length <= cb7210_fifo_size) { - pr_err("cb7210: bug! %s with length < fifo size\n", __func__); + dev_err(board->gpib_dev, " bug! fifo read length < fifo size\n"); return -EINVAL; } @@ -100,7 +107,6 @@ static int fifo_read(gpib_board_t *board, struct cb7210_priv *cb_priv, uint8_t * test_bit(RECEIVED_END_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - pr_warn("cb7210: fifo half full wait interrupted\n"); retval = -ERESTARTSYS; nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAI, 0); break; @@ -150,7 +156,6 @@ static int fifo_read(gpib_board_t *board, struct cb7210_priv *cb_priv, uint8_t * test_bit(RECEIVED_END_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - pr_warn("cb7210: fifo half full wait interrupted\n"); retval = -ERESTARTSYS; } if (test_bit(TIMO_NUM, &board->status)) @@ -165,8 +170,8 @@ static int fifo_read(gpib_board_t *board, struct cb7210_priv *cb_priv, uint8_t * return retval; } -int cb7210_accel_read(gpib_board_t *board, uint8_t *buffer, - size_t length, int *end, size_t *bytes_read) +static int cb7210_accel_read(struct gpib_board *board, u8 *buffer, + size_t length, int *end, size_t *bytes_read) { ssize_t retval; struct cb7210_priv *cb_priv = board->private_data; @@ -185,7 +190,6 @@ int cb7210_accel_read(gpib_board_t *board, uint8_t *buffer, test_bit(READ_READY_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - pr_warn("cb7210: read ready wait interrupted\n"); return -ERESTARTSYS; } if (test_bit(TIMO_NUM, &board->status)) @@ -225,7 +229,7 @@ static int output_fifo_empty(const struct cb7210_priv *cb_priv) return 0; } -static inline void output_fifo_enable(gpib_board_t *board, int enable) +static inline void output_fifo_enable(struct gpib_board *board, int enable) { struct cb7210_priv *cb_priv = board->private_data; struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; @@ -260,7 +264,8 @@ static inline void output_fifo_enable(gpib_board_t *board, int enable) spin_unlock_irqrestore(&board->spinlock, flags); } -static int fifo_write(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int fifo_write(struct gpib_board *board, u8 *buffer, size_t length, + size_t *bytes_written) { size_t count = 0; ssize_t retval = 0; @@ -271,7 +276,7 @@ static int fifo_write(gpib_board_t *board, uint8_t *buffer, size_t length, size_ *bytes_written = 0; if (cb_priv->fifo_iobase == 0) { - pr_err("cb7210: fifo iobase is zero!\n"); + dev_err(board->gpib_dev, "fifo iobase is zero!\n"); return -EINVAL; } if (length == 0) @@ -290,7 +295,6 @@ static int fifo_write(gpib_board_t *board, uint8_t *buffer, size_t length, size_ test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(BUS_ERROR_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - pr_warn("cb7210: fifo wait interrupted\n"); retval = -ERESTARTSYS; break; } @@ -306,7 +310,7 @@ static int fifo_write(gpib_board_t *board, uint8_t *buffer, size_t length, size_ if (num_bytes + count > length) num_bytes = length - count; if (num_bytes % cb7210_fifo_width) { - pr_err("cb7210: bug! %s with odd number of bytes\n", __func__); + dev_err(board->gpib_dev, " bug! fifo write with odd number of bytes\n"); retval = -EINVAL; break; } @@ -331,7 +335,6 @@ static int fifo_write(gpib_board_t *board, uint8_t *buffer, size_t length, size_ test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(BUS_ERROR_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - pr_err("cb7210: wait for last byte interrupted\n"); retval = -ERESTARTSYS; } if (test_bit(TIMO_NUM, &board->status)) @@ -347,8 +350,8 @@ static int fifo_write(gpib_board_t *board, uint8_t *buffer, size_t length, size_ return retval; } -int cb7210_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) +static int cb7210_accel_write(struct gpib_board *board, u8 *buffer, + size_t length, int send_eoi, size_t *bytes_written) { struct cb7210_priv *cb_priv = board->private_data; struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; @@ -375,39 +378,37 @@ int cb7210_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, int return retval; } -int cb7210_line_status(const gpib_board_t *board) +static int cb7210_line_status(const struct gpib_board *board) { - int status = ValidALL; + int status = VALID_ALL; int bsr_bits; struct cb7210_priv *cb_priv; - struct nec7210_priv *nec_priv; cb_priv = board->private_data; - nec_priv = &cb_priv->nec7210_priv; bsr_bits = cb7210_paged_read_byte(cb_priv, BUS_STATUS, BUS_STATUS_PAGE); if ((bsr_bits & BSR_REN_BIT) == 0) - status |= BusREN; + status |= BUS_REN; if ((bsr_bits & BSR_IFC_BIT) == 0) - status |= BusIFC; + status |= BUS_IFC; if ((bsr_bits & BSR_SRQ_BIT) == 0) - status |= BusSRQ; + status |= BUS_SRQ; if ((bsr_bits & BSR_EOI_BIT) == 0) - status |= BusEOI; + status |= BUS_EOI; if ((bsr_bits & BSR_NRFD_BIT) == 0) - status |= BusNRFD; + status |= BUS_NRFD; if ((bsr_bits & BSR_NDAC_BIT) == 0) - status |= BusNDAC; + status |= BUS_NDAC; if ((bsr_bits & BSR_DAV_BIT) == 0) - status |= BusDAV; + status |= BUS_DAV; if ((bsr_bits & BSR_ATN_BIT) == 0) - status |= BusATN; + status |= BUS_ATN; return status; } -unsigned int cb7210_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int cb7210_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct cb7210_priv *cb_priv = board->private_data; struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; @@ -424,16 +425,16 @@ unsigned int cb7210_t1_delay(gpib_board_t *board, unsigned int nano_sec) return retval; } -irqreturn_t cb7210_locked_internal_interrupt(gpib_board_t *board); +static irqreturn_t cb7210_locked_internal_interrupt(struct gpib_board *board); /* * GPIB interrupt service routines */ -irqreturn_t cb_pci_interrupt(int irq, void *arg) +static irqreturn_t cb_pci_interrupt(int irq, void *arg) { int bits; - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct cb7210_priv *priv = board->private_data; // first task check if this is really our interrupt in a shared irq environment @@ -462,7 +463,7 @@ irqreturn_t cb_pci_interrupt(int irq, void *arg) return cb7210_locked_internal_interrupt(arg); } -irqreturn_t cb7210_internal_interrupt(gpib_board_t *board) +static irqreturn_t cb7210_internal_interrupt(struct gpib_board *board) { int hs_status, status1, status2; struct cb7210_priv *priv = board->private_data; @@ -479,7 +480,7 @@ irqreturn_t cb7210_internal_interrupt(gpib_board_t *board) status2 = read_byte(nec_priv, ISR2); nec7210_interrupt_have_status(board, nec_priv, status1, status2); - dev_dbg(board->gpib_dev, "cb7210: status 0x%x, mode 0x%x\n", hs_status, priv->hs_mode_bits); + dev_dbg(board->gpib_dev, "status 0x%x, mode 0x%x\n", hs_status, priv->hs_mode_bits); clear_bits = 0; @@ -516,7 +517,7 @@ irqreturn_t cb7210_internal_interrupt(gpib_board_t *board) return IRQ_HANDLED; } -irqreturn_t cb7210_locked_internal_interrupt(gpib_board_t *board) +static irqreturn_t cb7210_locked_internal_interrupt(struct gpib_board *board) { unsigned long flags; irqreturn_t retval; @@ -527,55 +528,57 @@ irqreturn_t cb7210_locked_internal_interrupt(gpib_board_t *board) return retval; } -irqreturn_t cb7210_interrupt(int irq, void *arg) +static irqreturn_t cb7210_interrupt(int irq, void *arg) { return cb7210_internal_interrupt(arg); } -static int cb_pci_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int cb_isa_attach(gpib_board_t *board, const gpib_board_config_t *config); +static int cb_pci_attach(struct gpib_board *board, const struct gpib_board_config *config); +static int cb_isa_attach(struct gpib_board *board, const struct gpib_board_config *config); -static void cb_pci_detach(gpib_board_t *board); -static void cb_isa_detach(gpib_board_t *board); +static void cb_pci_detach(struct gpib_board *board); +static void cb_isa_detach(struct gpib_board *board); // wrappers for interface functions -int cb7210_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read) +static int cb7210_read(struct gpib_board *board, u8 *buffer, size_t length, + int *end, size_t *bytes_read) { struct cb7210_priv *priv = board->private_data; return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read); } -int cb7210_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written) +static int cb7210_write(struct gpib_board *board, u8 *buffer, size_t length, + int send_eoi, size_t *bytes_written) { struct cb7210_priv *priv = board->private_data; return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written); } -int cb7210_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int cb7210_command(struct gpib_board *board, u8 *buffer, size_t length, + size_t *bytes_written) { struct cb7210_priv *priv = board->private_data; return nec7210_command(board, &priv->nec7210_priv, buffer, length, bytes_written); } -int cb7210_take_control(gpib_board_t *board, int synchronous) +static int cb7210_take_control(struct gpib_board *board, int synchronous) { struct cb7210_priv *priv = board->private_data; return nec7210_take_control(board, &priv->nec7210_priv, synchronous); } -int cb7210_go_to_standby(gpib_board_t *board) +static int cb7210_go_to_standby(struct gpib_board *board) { struct cb7210_priv *priv = board->private_data; return nec7210_go_to_standby(board, &priv->nec7210_priv); } -void cb7210_request_system_control(gpib_board_t *board, int request_control) +static int cb7210_request_system_control(struct gpib_board *board, int request_control) { struct cb7210_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; @@ -586,94 +589,94 @@ void cb7210_request_system_control(gpib_board_t *board, int request_control) priv->hs_mode_bits &= ~HS_SYS_CONTROL; cb7210_write_byte(priv, priv->hs_mode_bits, HS_MODE); - nec7210_request_system_control(board, nec_priv, request_control); + return nec7210_request_system_control(board, nec_priv, request_control); } -void cb7210_interface_clear(gpib_board_t *board, int assert) +static void cb7210_interface_clear(struct gpib_board *board, int assert) { struct cb7210_priv *priv = board->private_data; nec7210_interface_clear(board, &priv->nec7210_priv, assert); } -void cb7210_remote_enable(gpib_board_t *board, int enable) +static void cb7210_remote_enable(struct gpib_board *board, int enable) { struct cb7210_priv *priv = board->private_data; nec7210_remote_enable(board, &priv->nec7210_priv, enable); } -int cb7210_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int cb7210_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct cb7210_priv *priv = board->private_data; return nec7210_enable_eos(board, &priv->nec7210_priv, eos_byte, compare_8_bits); } -void cb7210_disable_eos(gpib_board_t *board) +static void cb7210_disable_eos(struct gpib_board *board) { struct cb7210_priv *priv = board->private_data; nec7210_disable_eos(board, &priv->nec7210_priv); } -unsigned int cb7210_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int cb7210_update_status(struct gpib_board *board, unsigned int clear_mask) { struct cb7210_priv *priv = board->private_data; return nec7210_update_status(board, &priv->nec7210_priv, clear_mask); } -int cb7210_primary_address(gpib_board_t *board, unsigned int address) +static int cb7210_primary_address(struct gpib_board *board, unsigned int address) { struct cb7210_priv *priv = board->private_data; return nec7210_primary_address(board, &priv->nec7210_priv, address); } -int cb7210_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int cb7210_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct cb7210_priv *priv = board->private_data; return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable); } -int cb7210_parallel_poll(gpib_board_t *board, uint8_t *result) +static int cb7210_parallel_poll(struct gpib_board *board, u8 *result) { struct cb7210_priv *priv = board->private_data; return nec7210_parallel_poll(board, &priv->nec7210_priv, result); } -void cb7210_parallel_poll_configure(gpib_board_t *board, uint8_t configuration) +static void cb7210_parallel_poll_configure(struct gpib_board *board, u8 configuration) { struct cb7210_priv *priv = board->private_data; nec7210_parallel_poll_configure(board, &priv->nec7210_priv, configuration); } -void cb7210_parallel_poll_response(gpib_board_t *board, int ist) +static void cb7210_parallel_poll_response(struct gpib_board *board, int ist) { struct cb7210_priv *priv = board->private_data; nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist); } -void cb7210_serial_poll_response(gpib_board_t *board, uint8_t status) +static void cb7210_serial_poll_response(struct gpib_board *board, u8 status) { struct cb7210_priv *priv = board->private_data; nec7210_serial_poll_response(board, &priv->nec7210_priv, status); } -uint8_t cb7210_serial_poll_status(gpib_board_t *board) +static u8 cb7210_serial_poll_status(struct gpib_board *board) { struct cb7210_priv *priv = board->private_data; return nec7210_serial_poll_status(board, &priv->nec7210_priv); } -void cb7210_return_to_local(gpib_board_t *board) +static void cb7210_return_to_local(struct gpib_board *board) { struct cb7210_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; @@ -683,7 +686,7 @@ void cb7210_return_to_local(gpib_board_t *board) write_byte(nec_priv, AUX_RTL, AUXMR); } -static gpib_interface_t cb_pci_unaccel_interface = { +static struct gpib_interface cb_pci_unaccel_interface = { .name = "cbi_pci_unaccel", .attach = cb_pci_attach, .detach = cb_pci_detach, @@ -711,7 +714,7 @@ static gpib_interface_t cb_pci_unaccel_interface = { .return_to_local = cb7210_return_to_local, }; -static gpib_interface_t cb_pci_accel_interface = { +static struct gpib_interface cb_pci_accel_interface = { .name = "cbi_pci_accel", .attach = cb_pci_attach, .detach = cb_pci_detach, @@ -739,7 +742,7 @@ static gpib_interface_t cb_pci_accel_interface = { .return_to_local = cb7210_return_to_local, }; -static gpib_interface_t cb_pci_interface = { +static struct gpib_interface cb_pci_interface = { .name = "cbi_pci", .attach = cb_pci_attach, .detach = cb_pci_detach, @@ -766,7 +769,7 @@ static gpib_interface_t cb_pci_interface = { .return_to_local = cb7210_return_to_local, }; -static gpib_interface_t cb_isa_unaccel_interface = { +static struct gpib_interface cb_isa_unaccel_interface = { .name = "cbi_isa_unaccel", .attach = cb_isa_attach, .detach = cb_isa_detach, @@ -794,7 +797,7 @@ static gpib_interface_t cb_isa_unaccel_interface = { .return_to_local = cb7210_return_to_local, }; -static gpib_interface_t cb_isa_interface = { +static struct gpib_interface cb_isa_interface = { .name = "cbi_isa", .attach = cb_isa_attach, .detach = cb_isa_detach, @@ -821,7 +824,7 @@ static gpib_interface_t cb_isa_interface = { .return_to_local = cb7210_return_to_local, }; -static gpib_interface_t cb_isa_accel_interface = { +static struct gpib_interface cb_isa_accel_interface = { .name = "cbi_isa_accel", .attach = cb_isa_attach, .detach = cb_isa_detach, @@ -849,27 +852,27 @@ static gpib_interface_t cb_isa_accel_interface = { .return_to_local = cb7210_return_to_local, }; -static int cb7210_allocate_private(gpib_board_t *board) +static int cb7210_allocate_private(struct gpib_board *board) { struct cb7210_priv *priv; board->private_data = kmalloc(sizeof(struct cb7210_priv), GFP_KERNEL); if (!board->private_data) - return -1; + return -ENOMEM; priv = board->private_data; memset(priv, 0, sizeof(struct cb7210_priv)); init_nec7210_private(&priv->nec7210_priv); return 0; } -void cb7210_generic_detach(gpib_board_t *board) +static void cb7210_generic_detach(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; } // generic part of attach functions shared by all cb7210 boards -int cb7210_generic_attach(gpib_board_t *board) +static int cb7210_generic_attach(struct gpib_board *board) { struct cb7210_priv *cb_priv; struct nec7210_priv *nec_priv; @@ -887,7 +890,7 @@ int cb7210_generic_attach(gpib_board_t *board) return 0; } -int cb7210_init(struct cb7210_priv *cb_priv, gpib_board_t *board) +static int cb7210_init(struct cb7210_priv *cb_priv, struct gpib_board *board) { struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; @@ -902,7 +905,8 @@ int cb7210_init(struct cb7210_priv *cb_priv, gpib_board_t *board) cb7210_write_byte(cb_priv, cb_priv->hs_mode_bits, HS_MODE); write_byte(nec_priv, AUX_LO_SPEED, AUXMR); - /* set clock register for maximum (20 MHz) driving frequency + /* + * set clock register for maximum (20 MHz) driving frequency * ICR should be set to clock in megahertz (1-15) and to zero * for clocks faster than 15 MHz (max 20MHz) */ @@ -917,13 +921,13 @@ int cb7210_init(struct cb7210_priv *cb_priv, gpib_board_t *board) /* poll so we can detect assertion of ATN */ if (gpib_request_pseudo_irq(board, cb_pci_interrupt)) { - pr_err("pc2_gpib: failed to allocate pseudo_irq\n"); + pr_err("failed to allocate pseudo_irq\n"); return -1; } return 0; } -int cb_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int cb_pci_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct cb7210_priv *cb_priv; struct nec7210_priv *nec_priv; @@ -957,17 +961,17 @@ int cb_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) } } if (!cb_priv->pci_device) { - pr_warn("cb7210: no supported boards found.\n"); - return -1; + dev_err(board->gpib_dev, "no supported boards found.\n"); + return -ENODEV; } if (pci_enable_device(cb_priv->pci_device)) { - pr_err("cb7210: error enabling pci device\n"); - return -1; + dev_err(board->gpib_dev, "error enabling pci device\n"); + return -EIO; } - if (pci_request_regions(cb_priv->pci_device, "cb7210")) - return -1; + if (pci_request_regions(cb_priv->pci_device, DRV_NAME)) + return -EBUSY; switch (cb_priv->pci_chip) { case PCI_CHIP_AMCC_S5933: cb_priv->amcc_iobase = pci_resource_start(cb_priv->pci_device, 0); @@ -979,13 +983,14 @@ int cb_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) cb_priv->fifo_iobase = nec_priv->iobase; break; default: - pr_err("cb7210: bug! unhandled pci_chip=%i\n", cb_priv->pci_chip); + dev_err(board->gpib_dev, "bug! unhandled pci_chip=%i\n", cb_priv->pci_chip); return -EIO; } isr_flags |= IRQF_SHARED; - if (request_irq(cb_priv->pci_device->irq, cb_pci_interrupt, isr_flags, "cb7210", board)) { - pr_err("cb7210: can't request IRQ %d\n", cb_priv->pci_device->irq); - return -1; + if (request_irq(cb_priv->pci_device->irq, cb_pci_interrupt, isr_flags, DRV_NAME, board)) { + dev_err(board->gpib_dev, "can't request IRQ %d\n", + cb_priv->pci_device->irq); + return -EBUSY; } cb_priv->irq = cb_priv->pci_device->irq; @@ -1004,7 +1009,7 @@ int cb_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) return cb7210_init(cb_priv, board); } -void cb_pci_detach(gpib_board_t *board) +static void cb_pci_detach(struct gpib_board *board) { struct cb7210_priv *cb_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1027,7 +1032,7 @@ void cb_pci_detach(gpib_board_t *board) cb7210_generic_detach(board); } -int cb_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int cb_isa_attach(struct gpib_board *board, const struct gpib_board_config *config) { int isr_flags = 0; struct cb7210_priv *cb_priv; @@ -1040,20 +1045,22 @@ int cb_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) return retval; cb_priv = board->private_data; nec_priv = &cb_priv->nec7210_priv; - if (!request_region(config->ibbase, cb7210_iosize, "cb7210")) { - pr_err("gpib: ioports starting at 0x%x are already in use\n", config->ibbase); - return -EIO; + if (!request_region(config->ibbase, cb7210_iosize, DRV_NAME)) { + dev_err(board->gpib_dev, "ioports starting at 0x%x are already in use\n", + config->ibbase); + return -EBUSY; } nec_priv->iobase = config->ibbase; cb_priv->fifo_iobase = nec7210_iobase(cb_priv); bits = irq_bits(config->ibirq); if (bits == 0) - pr_err("board incapable of using irq %i, try 2-5, 7, 10, or 11\n", config->ibirq); + dev_err(board->gpib_dev, "board incapable of using irq %i, try 2-5, 7, 10, or 11\n", + config->ibirq); // install interrupt handler - if (request_irq(config->ibirq, cb7210_interrupt, isr_flags, "cb7210", board)) { - pr_err("gpib: can't request IRQ %d\n", config->ibirq); + if (request_irq(config->ibirq, cb7210_interrupt, isr_flags, DRV_NAME, board)) { + dev_err(board->gpib_dev, "failed to obtain IRQ %d\n", config->ibirq); return -EBUSY; } cb_priv->irq = config->ibirq; @@ -1061,7 +1068,7 @@ int cb_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) return cb7210_init(cb_priv, board); } -void cb_isa_detach(gpib_board_t *board) +static void cb_isa_detach(struct gpib_board *board) { struct cb7210_priv *cb_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1093,7 +1100,7 @@ static const struct pci_device_id cb7210_pci_table[] = { MODULE_DEVICE_TABLE(pci, cb7210_pci_table); static struct pci_driver cb7210_pci_driver = { - .name = "cb7210", + .name = DRV_NAME, .id_table = cb7210_pci_table, .probe = &cb7210_pci_probe }; @@ -1106,7 +1113,7 @@ static struct pci_driver cb7210_pci_driver = { * pcmcia skeleton example (presumably David Hinds) ***************************************************************************/ -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA #include <linux/kernel.h> #include <linux/ptrace.h> @@ -1117,23 +1124,6 @@ static struct pci_driver cb7210_pci_driver = { #include <pcmcia/ds.h> /* - * All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If - * you do not define PCMCIA_DEBUG at all, all the debug code will be - * left out. If you compile with PCMCIA_DEBUG=0, the debug code will - * be present but disabled -- but it can then be enabled for specific - * modules at load time with a 'pc_debug=#' option to insmod. - */ - -#define PCMCIA_DEBUG 1 - -#ifdef PCMCIA_DEBUG -static int pc_debug = PCMCIA_DEBUG; -#define DEBUG(n, args...) do {if (pc_debug > (n)) pr_debug(args); } while (0) -#else -#define DEBUG(args...) -#endif - -/* * The event() function is this driver's Card Services event handler. * It will be called by Card Services when an appropriate card status * event is received. The config() and release() entry points are @@ -1144,8 +1134,8 @@ static int pc_debug = PCMCIA_DEBUG; static int cb_gpib_config(struct pcmcia_device *link); static void cb_gpib_release(struct pcmcia_device *link); -static int cb_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config); -static void cb_pcmcia_detach(gpib_board_t *board); +static int cb_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config); +static void cb_pcmcia_detach(struct gpib_board *board); /* * A linked list of "instances" of the gpib device. Each actual @@ -1178,7 +1168,7 @@ static struct pcmcia_device *curr_dev; struct local_info { struct pcmcia_device *p_dev; - gpib_board_t *dev; + struct gpib_board *dev; }; /* @@ -1197,8 +1187,6 @@ static int cb_gpib_probe(struct pcmcia_device *link) // int ret, i; - DEBUG(0, "%s(0x%p)\n", __func__, link); - /* Allocate space for private device-specific data */ info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) @@ -1236,9 +1224,7 @@ static int cb_gpib_probe(struct pcmcia_device *link) static void cb_gpib_remove(struct pcmcia_device *link) { struct local_info *info = link->priv; - //struct gpib_board_t *dev = info->dev; - - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; if (info->dev) cb_pcmcia_detach(info->dev); @@ -1261,14 +1247,8 @@ static int cb_gpib_config_iteration(struct pcmcia_device *link, void *priv_data) static int cb_gpib_config(struct pcmcia_device *link) { - struct pcmcia_device *handle; - struct local_info *dev; int retval; - handle = link; - dev = link->priv; - DEBUG(0, "%s(0x%p)\n", __func__, link); - retval = pcmcia_loop_config(link, &cb_gpib_config_iteration, NULL); if (retval) { dev_warn(&link->dev, "no configuration found\n"); @@ -1276,8 +1256,6 @@ static int cb_gpib_config(struct pcmcia_device *link) return -ENODEV; } - DEBUG(0, "gpib_cs: manufacturer: 0x%x card: 0x%x\n", link->manf_id, link->card_id); - /* * This actually configures the PCMCIA socket -- setting up * the I/O windows and the interrupt mapping. @@ -1289,30 +1267,27 @@ static int cb_gpib_config(struct pcmcia_device *link) return -ENODEV; } - pr_info("gpib device loaded\n"); return 0; } /* gpib_config */ /* - * After a card is removed, gpib_release() will unregister the net - * device, and release the PCMCIA configuration. If the device is - * still open, this will be postponed until it is closed. + * After a card is removed, gpib_release() will unregister the net + * device, and release the PCMCIA configuration. If the device is + * still open, this will be postponed until it is closed. */ static void cb_gpib_release(struct pcmcia_device *link) { - DEBUG(0, "%s(0x%p)\n", __func__, link); pcmcia_disable_device(link); } static int cb_gpib_suspend(struct pcmcia_device *link) { //struct local_info *info = link->priv; - //struct gpib_board_t *dev = info->dev; - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; if (link->open) - pr_warn("Device still open ???\n"); + dev_warn(&link->dev, "Device still open\n"); //netif_device_detach(dev); return 0; @@ -1321,12 +1296,10 @@ static int cb_gpib_suspend(struct pcmcia_device *link) static int cb_gpib_resume(struct pcmcia_device *link) { //struct local_info *info = link->priv; - //struct gpib_board_t *dev = info->dev; - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; /*if (link->open) { * ni_gpib_probe(dev); / really? - * printk("Gpib resumed ???\n"); * //netif_device_attach(dev); * */ @@ -1342,8 +1315,8 @@ static struct pcmcia_device_id cb_pcmcia_ids[] = { MODULE_DEVICE_TABLE(pcmcia, cb_pcmcia_ids); static struct pcmcia_driver cb_gpib_cs_driver = { + .name = "cb_gpib_cs", .owner = THIS_MODULE, - .drv = { .name = "cb_gpib_cs", }, .id_table = cb_pcmcia_ids, .probe = cb_gpib_probe, .remove = cb_gpib_remove, @@ -1351,13 +1324,12 @@ static struct pcmcia_driver cb_gpib_cs_driver = { .resume = cb_gpib_resume, }; -void cb_pcmcia_cleanup_module(void) +static void cb_pcmcia_cleanup_module(void) { - DEBUG(0, "cb_gpib_cs: unloading\n"); pcmcia_unregister_driver(&cb_gpib_cs_driver); } -static gpib_interface_t cb_pcmcia_unaccel_interface = { +static struct gpib_interface cb_pcmcia_unaccel_interface = { .name = "cbi_pcmcia_unaccel", .attach = cb_pcmcia_attach, .detach = cb_pcmcia_detach, @@ -1385,7 +1357,7 @@ static gpib_interface_t cb_pcmcia_unaccel_interface = { .return_to_local = cb7210_return_to_local, }; -static gpib_interface_t cb_pcmcia_interface = { +static struct gpib_interface cb_pcmcia_interface = { .name = "cbi_pcmcia", .attach = cb_pcmcia_attach, .detach = cb_pcmcia_detach, @@ -1413,7 +1385,7 @@ static gpib_interface_t cb_pcmcia_interface = { .return_to_local = cb7210_return_to_local, }; -static gpib_interface_t cb_pcmcia_accel_interface = { +static struct gpib_interface cb_pcmcia_accel_interface = { .name = "cbi_pcmcia_accel", .attach = cb_pcmcia_attach, .detach = cb_pcmcia_detach, @@ -1441,15 +1413,15 @@ static gpib_interface_t cb_pcmcia_accel_interface = { .return_to_local = cb7210_return_to_local, }; -int cb_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int cb_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct cb7210_priv *cb_priv; struct nec7210_priv *nec_priv; int retval; if (!curr_dev) { - pr_err("no cb pcmcia cards found\n"); - return -1; + dev_err(board->gpib_dev, "no cb pcmcia cards found\n"); + return -ENODEV; } retval = cb7210_generic_attach(board); @@ -1460,25 +1432,24 @@ int cb_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config) nec_priv = &cb_priv->nec7210_priv; if (!request_region(curr_dev->resource[0]->start, resource_size(curr_dev->resource[0]), - "cb7210")) { - pr_err("gpib: ioports starting at 0x%lx are already in use\n", - (unsigned long)curr_dev->resource[0]->start); - return -EIO; + DRV_NAME)) { + dev_err(board->gpib_dev, "ioports starting at 0x%lx are already in use\n", + (unsigned long)curr_dev->resource[0]->start); + return -EBUSY; } nec_priv->iobase = curr_dev->resource[0]->start; cb_priv->fifo_iobase = curr_dev->resource[0]->start; - if (request_irq(curr_dev->irq, cb7210_interrupt, IRQF_SHARED, - "cb7210", board)) { - pr_err("cb7210: failed to request IRQ %d\n", curr_dev->irq); - return -1; + if (request_irq(curr_dev->irq, cb7210_interrupt, IRQF_SHARED, DRV_NAME, board)) { + dev_err(board->gpib_dev, "failed to request IRQ %d\n", curr_dev->irq); + return -EBUSY; } cb_priv->irq = curr_dev->irq; return cb7210_init(cb_priv, board); } -void cb_pcmcia_detach(gpib_board_t *board) +static void cb_pcmcia_detach(struct gpib_board *board) { struct cb7210_priv *cb_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1496,7 +1467,7 @@ void cb_pcmcia_detach(gpib_board_t *board) cb7210_generic_detach(board); } -#endif /* GPIB_PCMCIA */ +#endif /* CONFIG_GPIB_PCMCIA */ static int __init cb7210_init_module(void) { @@ -1504,75 +1475,75 @@ static int __init cb7210_init_module(void) ret = pci_register_driver(&cb7210_pci_driver); if (ret) { - pr_err("cb7210: pci_register_driver failed: error = %d\n", ret); + pr_err("pci_register_driver failed: error = %d\n", ret); return ret; } ret = gpib_register_driver(&cb_pci_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pci; } ret = gpib_register_driver(&cb_isa_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_isa; } ret = gpib_register_driver(&cb_pci_accel_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pci_accel; } ret = gpib_register_driver(&cb_pci_unaccel_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pci_unaccel; } ret = gpib_register_driver(&cb_isa_accel_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_isa_accel; } ret = gpib_register_driver(&cb_isa_unaccel_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_isa_unaccel; } -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA ret = gpib_register_driver(&cb_pcmcia_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pcmcia; } ret = gpib_register_driver(&cb_pcmcia_accel_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pcmcia_accel; } ret = gpib_register_driver(&cb_pcmcia_unaccel_interface, THIS_MODULE); if (ret) { - pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pcmcia_unaccel; } ret = pcmcia_register_driver(&cb_gpib_cs_driver); if (ret) { - pr_err("cb7210: pcmcia_register_driver failed: error = %d\n", ret); + pr_err("pcmcia_register_driver failed: error = %d\n", ret); goto err_pcmcia_driver; } #endif return 0; -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA err_pcmcia_driver: gpib_unregister_driver(&cb_pcmcia_unaccel_interface); err_pcmcia_unaccel: @@ -1606,7 +1577,7 @@ static void __exit cb7210_exit_module(void) gpib_unregister_driver(&cb_pci_unaccel_interface); gpib_unregister_driver(&cb_isa_accel_interface); gpib_unregister_driver(&cb_isa_unaccel_interface); -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA gpib_unregister_driver(&cb_pcmcia_interface); gpib_unregister_driver(&cb_pcmcia_accel_interface); gpib_unregister_driver(&cb_pcmcia_unaccel_interface); diff --git a/drivers/staging/gpib/cb7210/cb7210.h b/drivers/staging/gpib/cb7210/cb7210.h index d56cd905cc8c..13f127563ab3 100644 --- a/drivers/staging/gpib/cb7210/cb7210.h +++ b/drivers/staging/gpib/cb7210/cb7210.h @@ -36,51 +36,6 @@ struct cb7210_priv { unsigned in_fifo_half_full : 1; }; -// interrupt service routines -irqreturn_t cb_pci_interrupt(int irq, void *arg); -irqreturn_t cb7210_interrupt(int irq, void *arg); -irqreturn_t cb7210_internal_interrupt(gpib_board_t *board); - -// interface functions -int cb7210_read(gpib_board_t *board, uint8_t *buffer, size_t length, - int *end, size_t *bytes_read); -int cb7210_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, - int *end, size_t *bytes_read); -int cb7210_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written); -int cb7210_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written); -int cb7210_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written); -int cb7210_take_control(gpib_board_t *board, int synchronous); -int cb7210_go_to_standby(gpib_board_t *board); -void cb7210_request_system_control(gpib_board_t *board, int request_control); -void cb7210_interface_clear(gpib_board_t *board, int assert); -void cb7210_remote_enable(gpib_board_t *board, int enable); -int cb7210_enable_eos(gpib_board_t *board, uint8_t eos_byte, - int compare_8_bits); -void cb7210_disable_eos(gpib_board_t *board); -unsigned int cb7210_update_status(gpib_board_t *board, unsigned int clear_mask); -int cb7210_primary_address(gpib_board_t *board, unsigned int address); -int cb7210_secondary_address(gpib_board_t *board, unsigned int address, - int enable); -int cb7210_parallel_poll(gpib_board_t *board, uint8_t *result); -void cb7210_serial_poll_response(gpib_board_t *board, uint8_t status); -uint8_t cb7210_serial_poll_status(gpib_board_t *board); -void cb7210_parallel_poll_configure(gpib_board_t *board, uint8_t configuration); -void cb7210_parallel_poll_response(gpib_board_t *board, int ist); -int cb7210_line_status(const gpib_board_t *board); -unsigned int cb7210_t1_delay(gpib_board_t *board, unsigned int nano_sec); -void cb7210_return_to_local(gpib_board_t *board); - -// utility functions -void cb7210_generic_detach(gpib_board_t *board); -int cb7210_generic_attach(gpib_board_t *board); -int cb7210_init(struct cb7210_priv *priv, gpib_board_t *board); - -// pcmcia init/cleanup -int cb_pcmcia_init_module(void); -void cb_pcmcia_cleanup_module(void); - // pci-gpib register offset static const int cb7210_reg_offset = 1; @@ -118,8 +73,8 @@ static inline int cb7210_page_in_bits(unsigned int page) return 0x50 | (page & 0xf); } -static inline uint8_t cb7210_paged_read_byte(struct cb7210_priv *cb_priv, - unsigned int register_num, unsigned int page) +static inline u8 cb7210_paged_read_byte(struct cb7210_priv *cb_priv, + unsigned int register_num, unsigned int page) { struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; u8 retval; @@ -134,8 +89,8 @@ static inline uint8_t cb7210_paged_read_byte(struct cb7210_priv *cb_priv, } // don't use for register_num < 8, since it doesn't lock -static inline uint8_t cb7210_read_byte(const struct cb7210_priv *cb_priv, - enum hs_regs register_num) +static inline u8 cb7210_read_byte(const struct cb7210_priv *cb_priv, + enum hs_regs register_num) { const struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; u8 retval; @@ -144,7 +99,7 @@ static inline uint8_t cb7210_read_byte(const struct cb7210_priv *cb_priv, return retval; } -static inline void cb7210_paged_write_byte(struct cb7210_priv *cb_priv, uint8_t data, +static inline void cb7210_paged_write_byte(struct cb7210_priv *cb_priv, u8 data, unsigned int register_num, unsigned int page) { struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; @@ -158,7 +113,7 @@ static inline void cb7210_paged_write_byte(struct cb7210_priv *cb_priv, uint8_t } // don't use for register_num < 8, since it doesn't lock -static inline void cb7210_write_byte(const struct cb7210_priv *cb_priv, uint8_t data, +static inline void cb7210_write_byte(const struct cb7210_priv *cb_priv, u8 data, enum hs_regs register_num) { const struct nec7210_priv *nec_priv = &cb_priv->nec7210_priv; @@ -179,7 +134,8 @@ enum bus_status_bits { /* CBI 488.2 HS control */ -/* when both bit 0 and 1 are set, it +/* + * when both bit 0 and 1 are set, it * 1 clears the transmit state machine to an initial condition * 2 clears any residual interrupts left latched on cbi488.2 * 3 resets all control bits in HS_MODE to zero @@ -234,11 +190,12 @@ static inline unsigned int irq_bits(unsigned int irq) } enum cb7210_aux_cmds { -/* AUX_RTL2 is an undocumented aux command which causes cb7210 to assert - * (and keep asserted) local rtl message. This is used in conjunction - * with the (stupid) cb7210 implementation - * of the normal nec7210 AUX_RTL aux command, which - * causes the rtl message to toggle between on and off. +/* + * AUX_RTL2 is an undocumented aux command which causes cb7210 to assert + * (and keep asserted) local rtl message. This is used in conjunction + * with the (stupid) cb7210 implementation + * of the normal nec7210 AUX_RTL aux command, which + * causes the rtl message to toggle between on and off. */ AUX_RTL2 = 0xd, AUX_LO_SPEED = 0x40, diff --git a/drivers/staging/gpib/cec/cec.h b/drivers/staging/gpib/cec/cec.h index 040ca70ed708..3ce2869c7429 100644 --- a/drivers/staging/gpib/cec/cec.h +++ b/drivers/staging/gpib/cec/cec.h @@ -16,34 +16,5 @@ struct cec_priv { unsigned int irq; }; -// interface functions -int cec_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read); -int cec_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written); -int cec_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written); -int cec_take_control(gpib_board_t *board, int synchronous); -int cec_go_to_standby(gpib_board_t *board); -void cec_request_system_control(gpib_board_t *board, int request_control); -void cec_interface_clear(gpib_board_t *board, int assert); -void cec_remote_enable(gpib_board_t *board, int enable); -int cec_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits); -void cec_disable_eos(gpib_board_t *board); -unsigned int cec_update_status(gpib_board_t *board, unsigned int clear_mask); -int cec_primary_address(gpib_board_t *board, unsigned int address); -int cec_secondary_address(gpib_board_t *board, unsigned int address, int enable); -int cec_parallel_poll(gpib_board_t *board, uint8_t *result); -void cec_parallel_poll_configure(gpib_board_t *board, uint8_t configuration); -void cec_parallel_poll_response(gpib_board_t *board, int ist); -void cec_serial_poll_response(gpib_board_t *board, uint8_t status); -void cec_return_to_local(gpib_board_t *board); - -// interrupt service routines -irqreturn_t cec_interrupt(int irq, void *arg); - -// utility functions -void cec_free_private(gpib_board_t *board); -int cec_generic_attach(gpib_board_t *board); -void cec_init(struct cec_priv *priv, const gpib_board_t *board); - // offset between consecutive nec7210 registers static const int cec_reg_offset = 1; diff --git a/drivers/staging/gpib/cec/cec_gpib.c b/drivers/staging/gpib/cec/cec_gpib.c index d056cd1d6b3e..e8736cbf50e3 100644 --- a/drivers/staging/gpib/cec/cec_gpib.c +++ b/drivers/staging/gpib/cec/cec_gpib.c @@ -4,6 +4,10 @@ * copyright : (C) 2002 by Frank Mori Hess ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include "cec.h" #include <linux/pci.h> #include <linux/io.h> @@ -19,9 +23,9 @@ MODULE_DESCRIPTION("GPIB driver for CEC PCI and PCMCIA boards"); * GPIB interrupt service routines */ -irqreturn_t cec_interrupt(int irq, void *arg) +static irqreturn_t cec_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct cec_priv *priv = board->private_data; unsigned long flags; irqreturn_t retval; @@ -36,153 +40,155 @@ irqreturn_t cec_interrupt(int irq, void *arg) #define CEC_DEV_ID 0x5cec #define CEC_SUBID 0x9050 -static int cec_pci_attach(gpib_board_t *board, const gpib_board_config_t *config); +static int cec_pci_attach(struct gpib_board *board, const struct gpib_board_config *config); -static void cec_pci_detach(gpib_board_t *board); +static void cec_pci_detach(struct gpib_board *board); // wrappers for interface functions -int cec_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read) +static int cec_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, + size_t *bytes_read) { struct cec_priv *priv = board->private_data; return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read); } -int cec_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) +static int cec_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, + size_t *bytes_written) { struct cec_priv *priv = board->private_data; return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written); } -int cec_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int cec_command(struct gpib_board *board, u8 *buffer, + size_t length, size_t *bytes_written) { struct cec_priv *priv = board->private_data; return nec7210_command(board, &priv->nec7210_priv, buffer, length, bytes_written); } -int cec_take_control(gpib_board_t *board, int synchronous) +static int cec_take_control(struct gpib_board *board, int synchronous) { struct cec_priv *priv = board->private_data; return nec7210_take_control(board, &priv->nec7210_priv, synchronous); } -int cec_go_to_standby(gpib_board_t *board) +static int cec_go_to_standby(struct gpib_board *board) { struct cec_priv *priv = board->private_data; return nec7210_go_to_standby(board, &priv->nec7210_priv); } -void cec_request_system_control(gpib_board_t *board, int request_control) +static int cec_request_system_control(struct gpib_board *board, int request_control) { struct cec_priv *priv = board->private_data; - nec7210_request_system_control(board, &priv->nec7210_priv, request_control); + return nec7210_request_system_control(board, &priv->nec7210_priv, request_control); } -void cec_interface_clear(gpib_board_t *board, int assert) +static void cec_interface_clear(struct gpib_board *board, int assert) { struct cec_priv *priv = board->private_data; nec7210_interface_clear(board, &priv->nec7210_priv, assert); } -void cec_remote_enable(gpib_board_t *board, int enable) +static void cec_remote_enable(struct gpib_board *board, int enable) { struct cec_priv *priv = board->private_data; nec7210_remote_enable(board, &priv->nec7210_priv, enable); } -int cec_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int cec_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct cec_priv *priv = board->private_data; return nec7210_enable_eos(board, &priv->nec7210_priv, eos_byte, compare_8_bits); } -void cec_disable_eos(gpib_board_t *board) +static void cec_disable_eos(struct gpib_board *board) { struct cec_priv *priv = board->private_data; nec7210_disable_eos(board, &priv->nec7210_priv); } -unsigned int cec_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int cec_update_status(struct gpib_board *board, unsigned int clear_mask) { struct cec_priv *priv = board->private_data; return nec7210_update_status(board, &priv->nec7210_priv, clear_mask); } -int cec_primary_address(gpib_board_t *board, unsigned int address) +static int cec_primary_address(struct gpib_board *board, unsigned int address) { struct cec_priv *priv = board->private_data; return nec7210_primary_address(board, &priv->nec7210_priv, address); } -int cec_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int cec_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct cec_priv *priv = board->private_data; return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable); } -int cec_parallel_poll(gpib_board_t *board, uint8_t *result) +static int cec_parallel_poll(struct gpib_board *board, u8 *result) { struct cec_priv *priv = board->private_data; return nec7210_parallel_poll(board, &priv->nec7210_priv, result); } -void cec_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void cec_parallel_poll_configure(struct gpib_board *board, u8 config) { struct cec_priv *priv = board->private_data; nec7210_parallel_poll_configure(board, &priv->nec7210_priv, config); } -void cec_parallel_poll_response(gpib_board_t *board, int ist) +static void cec_parallel_poll_response(struct gpib_board *board, int ist) { struct cec_priv *priv = board->private_data; nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist); } -void cec_serial_poll_response(gpib_board_t *board, uint8_t status) +static void cec_serial_poll_response(struct gpib_board *board, u8 status) { struct cec_priv *priv = board->private_data; nec7210_serial_poll_response(board, &priv->nec7210_priv, status); } -static uint8_t cec_serial_poll_status(gpib_board_t *board) +static u8 cec_serial_poll_status(struct gpib_board *board) { struct cec_priv *priv = board->private_data; return nec7210_serial_poll_status(board, &priv->nec7210_priv); } -static unsigned int cec_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int cec_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct cec_priv *priv = board->private_data; return nec7210_t1_delay(board, &priv->nec7210_priv, nano_sec); } -void cec_return_to_local(gpib_board_t *board) +static void cec_return_to_local(struct gpib_board *board) { struct cec_priv *priv = board->private_data; nec7210_return_to_local(board, &priv->nec7210_priv); } -static gpib_interface_t cec_pci_interface = { +static struct gpib_interface cec_pci_interface = { .name = "cec_pci", .attach = cec_pci_attach, .detach = cec_pci_detach, @@ -210,7 +216,7 @@ static gpib_interface_t cec_pci_interface = { .return_to_local = cec_return_to_local, }; -static int cec_allocate_private(gpib_board_t *board) +static int cec_allocate_private(struct gpib_board *board) { struct cec_priv *priv; @@ -223,13 +229,13 @@ static int cec_allocate_private(gpib_board_t *board) return 0; } -void cec_free_private(gpib_board_t *board) +static void cec_free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; } -int cec_generic_attach(gpib_board_t *board) +static int cec_generic_attach(struct gpib_board *board) { struct cec_priv *cec_priv; struct nec7210_priv *nec_priv; @@ -247,7 +253,7 @@ int cec_generic_attach(gpib_board_t *board) return 0; } -void cec_init(struct cec_priv *cec_priv, const gpib_board_t *board) +static void cec_init(struct cec_priv *cec_priv, const struct gpib_board *board) { struct nec7210_priv *nec_priv = &cec_priv->nec7210_priv; @@ -259,7 +265,7 @@ void cec_init(struct cec_priv *cec_priv, const gpib_board_t *board) nec7210_board_online(nec_priv, board); } -int cec_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int cec_pci_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct cec_priv *cec_priv; struct nec7210_priv *nec_priv; @@ -283,31 +289,29 @@ int cec_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) break; } if (!cec_priv->pci_device) { - pr_err("gpib: no cec PCI board found\n"); - return -1; + dev_err(board->gpib_dev, "no cec PCI board found\n"); + return -ENODEV; } if (pci_enable_device(cec_priv->pci_device)) { - pr_err("error enabling pci device\n"); - return -1; + dev_err(board->gpib_dev, "error enabling pci device\n"); + return -EIO; } if (pci_request_regions(cec_priv->pci_device, "cec-gpib")) - return -1; + return -EBUSY; cec_priv->plx_iobase = pci_resource_start(cec_priv->pci_device, 1); - pr_info(" plx9050 base address 0x%lx\n", cec_priv->plx_iobase); - nec_priv->iobase = pci_resource_start(cec_priv->pci_device, 3); - pr_info(" nec7210 base address 0x%x\n", nec_priv->iobase); + nec_priv->iobase = pci_resource_start(cec_priv->pci_device, 3); isr_flags |= IRQF_SHARED; - if (request_irq(cec_priv->pci_device->irq, cec_interrupt, isr_flags, "pci-gpib", board)) { - pr_err("gpib: can't request IRQ %d\n", cec_priv->pci_device->irq); - return -1; + if (request_irq(cec_priv->pci_device->irq, cec_interrupt, isr_flags, DRV_NAME, board)) { + dev_err(board->gpib_dev, "failed to obtain IRQ %d\n", cec_priv->pci_device->irq); + return -EBUSY; } cec_priv->irq = cec_priv->pci_device->irq; if (gpib_request_pseudo_irq(board, cec_interrupt)) { - pr_err("cec: failed to allocate pseudo irq\n"); + dev_err(board->gpib_dev, "failed to allocate pseudo irq\n"); return -1; } cec_init(cec_priv, board); @@ -319,7 +323,7 @@ int cec_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) return 0; } -void cec_pci_detach(gpib_board_t *board) +static void cec_pci_detach(struct gpib_board *board) { struct cec_priv *cec_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -354,7 +358,7 @@ static const struct pci_device_id cec_pci_table[] = { MODULE_DEVICE_TABLE(pci, cec_pci_table); static struct pci_driver cec_pci_driver = { - .name = "cec_gpib", + .name = DRV_NAME, .id_table = cec_pci_table, .probe = &cec_pci_probe }; @@ -365,13 +369,13 @@ static int __init cec_init_module(void) result = pci_register_driver(&cec_pci_driver); if (result) { - pr_err("cec_gpib: pci_register_driver failed: error = %d\n", result); + pr_err("pci_register_driver failed: error = %d\n", result); return result; } result = gpib_register_driver(&cec_pci_interface, THIS_MODULE); if (result) { - pr_err("cec_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); return result; } diff --git a/drivers/staging/gpib/common/gpib_os.c b/drivers/staging/gpib/common/gpib_os.c index 4901e660242e..a193d64db033 100644 --- a/drivers/staging/gpib/common/gpib_os.c +++ b/drivers/staging/gpib/common/gpib_os.c @@ -5,6 +5,9 @@ *************************************************************************** */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt + #include "ibsys.h" #include <linux/module.h> #include <linux/wait.h> @@ -23,53 +26,56 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB base support"); MODULE_ALIAS_CHARDEV_MAJOR(GPIB_CODE); -static int board_type_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, unsigned long arg); -static int read_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, +static int board_type_ioctl(struct gpib_file_private *file_priv, + struct gpib_board *board, unsigned long arg); +static int read_ioctl(struct gpib_file_private *file_priv, struct gpib_board *board, unsigned long arg); -static int write_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, +static int write_ioctl(struct gpib_file_private *file_priv, struct gpib_board *board, unsigned long arg); -static int command_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, +static int command_ioctl(struct gpib_file_private *file_priv, struct gpib_board *board, unsigned long arg); -static int open_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long arg); -static int close_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long arg); -static int serial_poll_ioctl(gpib_board_t *board, unsigned long arg); -static int wait_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, unsigned long arg); -static int parallel_poll_ioctl(gpib_board_t *board, unsigned long arg); -static int online_ioctl(gpib_board_t *board, unsigned long arg); -static int remote_enable_ioctl(gpib_board_t *board, unsigned long arg); -static int take_control_ioctl(gpib_board_t *board, unsigned long arg); -static int line_status_ioctl(gpib_board_t *board, unsigned long arg); -static int pad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, +static int open_dev_ioctl(struct file *filep, struct gpib_board *board, unsigned long arg); +static int close_dev_ioctl(struct file *filep, struct gpib_board *board, unsigned long arg); +static int serial_poll_ioctl(struct gpib_board *board, unsigned long arg); +static int wait_ioctl(struct gpib_file_private *file_priv, + struct gpib_board *board, unsigned long arg); +static int parallel_poll_ioctl(struct gpib_board *board, unsigned long arg); +static int online_ioctl(struct gpib_board *board, unsigned long arg); +static int remote_enable_ioctl(struct gpib_board *board, unsigned long arg); +static int take_control_ioctl(struct gpib_board *board, unsigned long arg); +static int line_status_ioctl(struct gpib_board *board, unsigned long arg); +static int pad_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv, unsigned long arg); -static int sad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, +static int sad_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv, unsigned long arg); -static int eos_ioctl(gpib_board_t *board, unsigned long arg); -static int request_service_ioctl(gpib_board_t *board, unsigned long arg); -static int request_service2_ioctl(gpib_board_t *board, unsigned long arg); -static int iobase_ioctl(gpib_board_config_t *config, unsigned long arg); -static int irq_ioctl(gpib_board_config_t *config, unsigned long arg); -static int dma_ioctl(gpib_board_config_t *config, unsigned long arg); -static int autospoll_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, +static int eos_ioctl(struct gpib_board *board, unsigned long arg); +static int request_service_ioctl(struct gpib_board *board, unsigned long arg); +static int request_service2_ioctl(struct gpib_board *board, unsigned long arg); +static int iobase_ioctl(struct gpib_board_config *config, unsigned long arg); +static int irq_ioctl(struct gpib_board_config *config, unsigned long arg); +static int dma_ioctl(struct gpib_board_config *config, unsigned long arg); +static int autospoll_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv, unsigned long arg); -static int mutex_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, +static int mutex_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv, unsigned long arg); -static int timeout_ioctl(gpib_board_t *board, unsigned long arg); -static int status_bytes_ioctl(gpib_board_t *board, unsigned long arg); -static int board_info_ioctl(const gpib_board_t *board, unsigned long arg); -static int ppc_ioctl(gpib_board_t *board, unsigned long arg); -static int set_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg); -static int get_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg); -static int query_board_rsv_ioctl(gpib_board_t *board, unsigned long arg); -static int interface_clear_ioctl(gpib_board_t *board, unsigned long arg); -static int select_pci_ioctl(gpib_board_config_t *config, unsigned long arg); -static int select_device_path_ioctl(gpib_board_config_t *config, unsigned long arg); -static int event_ioctl(gpib_board_t *board, unsigned long arg); -static int request_system_control_ioctl(gpib_board_t *board, unsigned long arg); -static int t1_delay_ioctl(gpib_board_t *board, unsigned long arg); - -static int cleanup_open_devices(gpib_file_private_t *file_priv, gpib_board_t *board); - -static int pop_gpib_event_nolock(gpib_board_t *board, gpib_event_queue_t *queue, short *event_type); +static int timeout_ioctl(struct gpib_board *board, unsigned long arg); +static int status_bytes_ioctl(struct gpib_board *board, unsigned long arg); +static int board_info_ioctl(const struct gpib_board *board, unsigned long arg); +static int ppc_ioctl(struct gpib_board *board, unsigned long arg); +static int set_local_ppoll_mode_ioctl(struct gpib_board *board, unsigned long arg); +static int get_local_ppoll_mode_ioctl(struct gpib_board *board, unsigned long arg); +static int query_board_rsv_ioctl(struct gpib_board *board, unsigned long arg); +static int interface_clear_ioctl(struct gpib_board *board, unsigned long arg); +static int select_pci_ioctl(struct gpib_board_config *config, unsigned long arg); +static int select_device_path_ioctl(struct gpib_board_config *config, unsigned long arg); +static int event_ioctl(struct gpib_board *board, unsigned long arg); +static int request_system_control_ioctl(struct gpib_board *board, unsigned long arg); +static int t1_delay_ioctl(struct gpib_board *board, unsigned long arg); + +static int cleanup_open_devices(struct gpib_file_private *file_priv, struct gpib_board *board); + +static int pop_gpib_event_nolock(struct gpib_board *board, + struct gpib_event_queue *queue, short *event_type); /* * Timer functions @@ -79,18 +85,18 @@ static int pop_gpib_event_nolock(gpib_board_t *board, gpib_event_queue_t *queue, static void watchdog_timeout(struct timer_list *t) { - gpib_board_t *board = from_timer(board, t, timer); + struct gpib_board *board = timer_container_of(board, t, timer); set_bit(TIMO_NUM, &board->status); wake_up_interruptible(&board->wait); } /* install timer interrupt handler */ -void os_start_timer(gpib_board_t *board, unsigned int usec_timeout) +void os_start_timer(struct gpib_board *board, unsigned int usec_timeout) /* Starts the timeout task */ { if (timer_pending(&board->timer)) { - pr_err("gpib: bug! timer already running?\n"); + dev_err(board->gpib_dev, "bug! timer already running?\n"); return; } clear_bit(TIMO_NUM, &board->status); @@ -102,21 +108,22 @@ void os_start_timer(gpib_board_t *board, unsigned int usec_timeout) } } -void os_remove_timer(gpib_board_t *board) +void os_remove_timer(struct gpib_board *board) /* Removes the timeout task */ { if (timer_pending(&board->timer)) - del_timer_sync(&board->timer); + timer_delete_sync(&board->timer); } -int io_timed_out(gpib_board_t *board) +int io_timed_out(struct gpib_board *board) { if (test_bit(TIMO_NUM, &board->status)) return 1; return 0; } -/* this is a function instead of a constant because of Suse +/* + * this is a function instead of a constant because of Suse * defining HZ to be a function call to get_hz() */ static inline int pseudo_irq_period(void) @@ -126,7 +133,8 @@ static inline int pseudo_irq_period(void) static void pseudo_irq_handler(struct timer_list *t) { - struct gpib_pseudo_irq *pseudo_irq = from_timer(pseudo_irq, t, timer); + struct gpib_pseudo_irq *pseudo_irq = timer_container_of(pseudo_irq, t, + timer); if (pseudo_irq->handler) pseudo_irq->handler(0, pseudo_irq->board); @@ -137,10 +145,10 @@ static void pseudo_irq_handler(struct timer_list *t) mod_timer(&pseudo_irq->timer, jiffies + pseudo_irq_period()); } -int gpib_request_pseudo_irq(gpib_board_t *board, irqreturn_t (*handler)(int, void *)) +int gpib_request_pseudo_irq(struct gpib_board *board, irqreturn_t (*handler)(int, void *)) { if (timer_pending(&board->pseudo_irq.timer) || board->pseudo_irq.handler) { - pr_err("gpib: only one pseudo interrupt per board allowed\n"); + dev_err(board->gpib_dev, "only one pseudo interrupt per board allowed\n"); return -1; } @@ -156,18 +164,18 @@ int gpib_request_pseudo_irq(gpib_board_t *board, irqreturn_t (*handler)(int, voi } EXPORT_SYMBOL(gpib_request_pseudo_irq); -void gpib_free_pseudo_irq(gpib_board_t *board) +void gpib_free_pseudo_irq(struct gpib_board *board) { atomic_set(&board->pseudo_irq.active, 0); - del_timer_sync(&board->pseudo_irq.timer); + timer_delete_sync(&board->pseudo_irq.timer); board->pseudo_irq.handler = NULL; } EXPORT_SYMBOL(gpib_free_pseudo_irq); static const unsigned int serial_timeout = 1000000; -unsigned int num_status_bytes(const gpib_status_queue_t *dev) +unsigned int num_status_bytes(const struct gpib_status_queue *dev) { if (!dev) return 0; @@ -175,10 +183,10 @@ unsigned int num_status_bytes(const gpib_status_queue_t *dev) } // push status byte onto back of status byte fifo -int push_status_byte(gpib_board_t *board, gpib_status_queue_t *device, u8 poll_byte) +int push_status_byte(struct gpib_board *board, struct gpib_status_queue *device, u8 poll_byte) { struct list_head *head = &device->status_bytes; - status_byte_t *status; + struct gpib_status_byte *status; static const unsigned int max_num_status_bytes = 1024; int retval; @@ -191,7 +199,7 @@ int push_status_byte(gpib_board_t *board, gpib_status_queue_t *device, u8 poll_b return retval; } - status = kmalloc(sizeof(status_byte_t), GFP_KERNEL); + status = kmalloc(sizeof(*status), GFP_KERNEL); if (!status) return -ENOMEM; @@ -209,11 +217,11 @@ int push_status_byte(gpib_board_t *board, gpib_status_queue_t *device, u8 poll_b } // pop status byte from front of status byte fifo -int pop_status_byte(gpib_board_t *board, gpib_status_queue_t *device, u8 *poll_byte) +int pop_status_byte(struct gpib_board *board, struct gpib_status_queue *device, u8 *poll_byte) { struct list_head *head = &device->status_bytes; struct list_head *front = head->next; - status_byte_t *status; + struct gpib_status_byte *status; if (num_status_bytes(device) == 0) return -EIO; @@ -226,7 +234,7 @@ int pop_status_byte(gpib_board_t *board, gpib_status_queue_t *device, u8 *poll_b return -EPIPE; } - status = list_entry(front, status_byte_t, list); + status = list_entry(front, struct gpib_status_byte, list); *poll_byte = status->poll_byte; list_del(front); @@ -240,14 +248,14 @@ int pop_status_byte(gpib_board_t *board, gpib_status_queue_t *device, u8 *poll_b return 0; } -gpib_status_queue_t *get_gpib_status_queue(gpib_board_t *board, unsigned int pad, int sad) +struct gpib_status_queue *get_gpib_status_queue(struct gpib_board *board, unsigned int pad, int sad) { - gpib_status_queue_t *device; + struct gpib_status_queue *device; struct list_head *list_ptr; const struct list_head *head = &board->device_list; for (list_ptr = head->next; list_ptr != head; list_ptr = list_ptr->next) { - device = list_entry(list_ptr, gpib_status_queue_t, list); + device = list_entry(list_ptr, struct gpib_status_queue, list); if (gpib_address_equal(device->pad, device->sad, pad, sad)) return device; } @@ -255,12 +263,10 @@ gpib_status_queue_t *get_gpib_status_queue(gpib_board_t *board, unsigned int pad return NULL; } -int get_serial_poll_byte(gpib_board_t *board, unsigned int pad, int sad, unsigned int usec_timeout, - uint8_t *poll_byte) +int get_serial_poll_byte(struct gpib_board *board, unsigned int pad, int sad, + unsigned int usec_timeout, u8 *poll_byte) { - gpib_status_queue_t *device; - - dev_dbg(board->gpib_dev, "%s:()\n", __func__); + struct gpib_status_queue *device; device = get_gpib_status_queue(board, pad, sad); if (num_status_bytes(device)) @@ -269,11 +275,10 @@ int get_serial_poll_byte(gpib_board_t *board, unsigned int pad, int sad, unsigne return dvrsp(board, pad, sad, usec_timeout, poll_byte); } -int autopoll_all_devices(gpib_board_t *board) +int autopoll_all_devices(struct gpib_board *board) { int retval; - dev_dbg(board->gpib_dev, "entering %s()\n", __func__); if (mutex_lock_interruptible(&board->user_mutex)) return -ERESTARTSYS; if (mutex_lock_interruptible(&board->big_gpib_mutex)) { @@ -290,8 +295,9 @@ int autopoll_all_devices(gpib_board_t *board) return retval; } - dev_dbg(board->gpib_dev, "%s complete\n", __func__); - /* need to wake wait queue in case someone is + dev_dbg(board->gpib_dev, "complete\n"); + /* + * need to wake wait queue in case someone is * waiting on RQS */ wake_up_interruptible(&board->wait); @@ -301,15 +307,13 @@ int autopoll_all_devices(gpib_board_t *board) return retval; } -static int setup_serial_poll(gpib_board_t *board, unsigned int usec_timeout) +static int setup_serial_poll(struct gpib_board *board, unsigned int usec_timeout) { u8 cmd_string[8]; int i; size_t bytes_written; int ret; - dev_dbg(board->gpib_dev, "entering %s()\n", __func__); - os_start_timer(board, usec_timeout); ret = ibcac(board, 1, 1); if (ret < 0) { @@ -326,7 +330,7 @@ static int setup_serial_poll(gpib_board_t *board, unsigned int usec_timeout) ret = board->interface->command(board, cmd_string, i, &bytes_written); if (ret < 0 || bytes_written < i) { - pr_err("gpib: failed to setup serial poll\n"); + dev_dbg(board->gpib_dev, "failed to setup serial poll\n"); os_remove_timer(board); return -EIO; } @@ -335,8 +339,8 @@ static int setup_serial_poll(gpib_board_t *board, unsigned int usec_timeout) return 0; } -static int read_serial_poll_byte(gpib_board_t *board, unsigned int pad, - int sad, unsigned int usec_timeout, uint8_t *result) +static int read_serial_poll_byte(struct gpib_board *board, unsigned int pad, + int sad, unsigned int usec_timeout, u8 *result) { u8 cmd_string[8]; int end_flag; @@ -344,7 +348,7 @@ static int read_serial_poll_byte(gpib_board_t *board, unsigned int pad, int i; size_t nbytes; - dev_dbg(board->gpib_dev, "entering %s(), pad=%i sad=%i\n", __func__, pad, sad); + dev_dbg(board->gpib_dev, "entering pad=%i sad=%i\n", pad, sad); os_start_timer(board, usec_timeout); ret = ibcac(board, 1, 1); @@ -361,7 +365,7 @@ static int read_serial_poll_byte(gpib_board_t *board, unsigned int pad, ret = board->interface->command(board, cmd_string, i, &nbytes); if (ret < 0 || nbytes < i) { - pr_err("gpib: failed to setup serial poll\n"); + dev_err(board->gpib_dev, "failed to setup serial poll\n"); os_remove_timer(board); return -EIO; } @@ -371,7 +375,7 @@ static int read_serial_poll_byte(gpib_board_t *board, unsigned int pad, // read poll result ret = board->interface->read(board, result, 1, &end_flag, &nbytes); if (ret < 0 || nbytes < 1) { - pr_err("gpib: serial poll failed\n"); + dev_err(board->gpib_dev, "serial poll failed\n"); os_remove_timer(board); return -EIO; } @@ -380,14 +384,12 @@ static int read_serial_poll_byte(gpib_board_t *board, unsigned int pad, return 0; } -static int cleanup_serial_poll(gpib_board_t *board, unsigned int usec_timeout) +static int cleanup_serial_poll(struct gpib_board *board, unsigned int usec_timeout) { u8 cmd_string[8]; int ret; size_t bytes_written; - dev_dbg(board->gpib_dev, "entering %s()\n", __func__); - os_start_timer(board, usec_timeout); ret = ibcac(board, 1, 1); if (ret < 0) { @@ -399,7 +401,7 @@ static int cleanup_serial_poll(gpib_board_t *board, unsigned int usec_timeout) cmd_string[1] = UNT; ret = board->interface->command(board, cmd_string, 2, &bytes_written); if (ret < 0 || bytes_written < 2) { - pr_err("gpib: failed to disable serial poll\n"); + dev_err(board->gpib_dev, "failed to disable serial poll\n"); os_remove_timer(board); return -EIO; } @@ -408,8 +410,8 @@ static int cleanup_serial_poll(gpib_board_t *board, unsigned int usec_timeout) return 0; } -static int serial_poll_single(gpib_board_t *board, unsigned int pad, int sad, - unsigned int usec_timeout, uint8_t *result) +static int serial_poll_single(struct gpib_board *board, unsigned int pad, int sad, + unsigned int usec_timeout, u8 *result) { int retval, cleanup_retval; @@ -426,17 +428,15 @@ static int serial_poll_single(gpib_board_t *board, unsigned int pad, int sad, return 0; } -int serial_poll_all(gpib_board_t *board, unsigned int usec_timeout) +int serial_poll_all(struct gpib_board *board, unsigned int usec_timeout) { int retval = 0; struct list_head *cur; const struct list_head *head = NULL; - gpib_status_queue_t *device; + struct gpib_status_queue *device; u8 result; unsigned int num_bytes = 0; - dev_dbg(board->gpib_dev, "entering %s()\n", __func__); - head = &board->device_list; if (head->next == head) return 0; @@ -446,7 +446,7 @@ int serial_poll_all(gpib_board_t *board, unsigned int usec_timeout) return retval; for (cur = head->next; cur != head; cur = cur->next) { - device = list_entry(cur, gpib_status_queue_t, list); + device = list_entry(cur, struct gpib_status_queue, list); retval = read_serial_poll_byte(board, device->pad, device->sad, usec_timeout, &result); if (retval < 0) @@ -475,19 +475,19 @@ int serial_poll_all(gpib_board_t *board, unsigned int usec_timeout) * SPD and UNT are sent at the completion of the poll. */ -int dvrsp(gpib_board_t *board, unsigned int pad, int sad, - unsigned int usec_timeout, uint8_t *result) +int dvrsp(struct gpib_board *board, unsigned int pad, int sad, + unsigned int usec_timeout, u8 *result) { int status = ibstatus(board); int retval; if ((status & CIC) == 0) { - pr_err("gpib: not CIC during serial poll\n"); + dev_err(board->gpib_dev, "not CIC during serial poll\n"); return -1; } if (pad > MAX_GPIB_PRIMARY_ADDRESS || sad > MAX_GPIB_SECONDARY_ADDRESS || sad < -1) { - pr_err("gpib: bad address for serial poll"); + dev_err(board->gpib_dev, "bad address for serial poll"); return -1; } @@ -498,8 +498,8 @@ int dvrsp(gpib_board_t *board, unsigned int pad, int sad, return retval; } -static gpib_descriptor_t *handle_to_descriptor(const gpib_file_private_t *file_priv, - int handle) +static struct gpib_descriptor *handle_to_descriptor(const struct gpib_file_private *file_priv, + int handle) { if (handle < 0 || handle >= GPIB_MAX_NUM_DESCRIPTORS) { pr_err("gpib: invalid handle %i\n", handle); @@ -509,11 +509,11 @@ static gpib_descriptor_t *handle_to_descriptor(const gpib_file_private_t *file_p return file_priv->descriptors[handle]; } -static int init_gpib_file_private(gpib_file_private_t *priv) +static int init_gpib_file_private(struct gpib_file_private *priv) { memset(priv, 0, sizeof(*priv)); atomic_set(&priv->holding_mutex, 0); - priv->descriptors[0] = kmalloc(sizeof(gpib_descriptor_t), GFP_KERNEL); + priv->descriptors[0] = kmalloc(sizeof(struct gpib_descriptor), GFP_KERNEL); if (!priv->descriptors[0]) { pr_err("gpib: failed to allocate default board descriptor\n"); return -ENOMEM; @@ -527,8 +527,8 @@ static int init_gpib_file_private(gpib_file_private_t *priv) int ibopen(struct inode *inode, struct file *filep) { unsigned int minor = iminor(inode); - gpib_board_t *board; - gpib_file_private_t *priv; + struct gpib_board *board; + struct gpib_file_private *priv; if (minor >= GPIB_MAX_NUM_BOARDS) { pr_err("gpib: invalid minor number of device file\n"); @@ -537,27 +537,23 @@ int ibopen(struct inode *inode, struct file *filep) board = &board_array[minor]; - filep->private_data = kmalloc(sizeof(gpib_file_private_t), GFP_KERNEL); + filep->private_data = kmalloc(sizeof(struct gpib_file_private), GFP_KERNEL); if (!filep->private_data) return -ENOMEM; priv = filep->private_data; - init_gpib_file_private((gpib_file_private_t *)filep->private_data); - - dev_dbg(board->gpib_dev, "pid %i, gpib: opening minor %d\n", current->pid, minor); + init_gpib_file_private((struct gpib_file_private *)filep->private_data); if (board->use_count == 0) { int retval; retval = request_module("gpib%i", minor); - if (retval) { - dev_dbg(board->gpib_dev, "pid %i, gpib: request module returned %i\n", - current->pid, retval); - } + if (retval) + dev_dbg(board->gpib_dev, "request module returned %i\n", retval); } if (board->interface) { if (!try_module_get(board->provider_module)) { - pr_err("gpib: try_module_get() failed\n"); + dev_err(board->gpib_dev, "try_module_get() failed\n"); return -EIO; } board->use_count++; @@ -569,9 +565,9 @@ int ibopen(struct inode *inode, struct file *filep) int ibclose(struct inode *inode, struct file *filep) { unsigned int minor = iminor(inode); - gpib_board_t *board; - gpib_file_private_t *priv = filep->private_data; - gpib_descriptor_t *desc; + struct gpib_board *board; + struct gpib_file_private *priv = filep->private_data; + struct gpib_descriptor *desc; if (minor >= GPIB_MAX_NUM_BOARDS) { pr_err("gpib: invalid minor number of device file\n"); @@ -580,21 +576,19 @@ int ibclose(struct inode *inode, struct file *filep) board = &board_array[minor]; - dev_dbg(board->gpib_dev, "pid %i, closing minor %d\n", current->pid, minor); - if (priv) { desc = handle_to_descriptor(priv, 0); if (desc) { if (desc->autopoll_enabled) { - dev_dbg(board->gpib_dev, "pid %i, decrementing autospollers\n", - current->pid); + dev_dbg(board->gpib_dev, "decrementing autospollers\n"); if (board->autospollers > 0) board->autospollers--; else - pr_err("gpib: Attempt to decrement zero autospollers\n"); + dev_err(board->gpib_dev, + "Attempt to decrement zero autospollers\n"); } } else { - pr_err("gpib: Unexpected null gpib_descriptor\n"); + dev_err(board->gpib_dev, "Unexpected null gpib_descriptor\n"); } cleanup_open_devices(priv, board); @@ -617,8 +611,8 @@ int ibclose(struct inode *inode, struct file *filep) long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) { unsigned int minor = iminor(filep->f_path.dentry->d_inode); - gpib_board_t *board; - gpib_file_private_t *file_priv = filep->private_data; + struct gpib_board *board; + struct gpib_file_private *file_priv = filep->private_data; long retval = -ENOTTY; if (minor >= GPIB_MAX_NUM_BOARDS) { @@ -630,8 +624,8 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) if (mutex_lock_interruptible(&board->big_gpib_mutex)) return -ERESTARTSYS; - dev_dbg(board->gpib_dev, "pid %i, ioctl %d, interface=%s, use=%d, onl=%d\n", - current->pid, cmd & 0xff, + dev_dbg(board->gpib_dev, "ioctl %d, interface=%s, use=%d, onl=%d\n", + cmd & 0xff, board->interface ? board->interface->name : "", board->use_count, board->online); @@ -647,13 +641,13 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) break; } if (!board->interface) { - pr_err("gpib: no gpib board configured on /dev/gpib%i\n", minor); + dev_err(board->gpib_dev, "no gpib board configured\n"); retval = -ENODEV; goto done; } if (file_priv->got_module == 0) { if (!try_module_get(board->provider_module)) { - pr_err("gpib: try_module_get() failed\n"); + dev_err(board->gpib_dev, "try_module_get() failed\n"); retval = -EIO; goto done; } @@ -677,8 +671,9 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) retval = board_info_ioctl(board, arg); goto done; case IBMUTEX: - /* Need to unlock board->big_gpib_mutex before potentially locking board->user_mutex - * to maintain consistent locking order + /* + * Need to unlock board->big_gpib_mutex before potentially locking board->user_mutex + * to maintain consistent locking order */ mutex_unlock(&board->big_gpib_mutex); return mutex_ioctl(board, file_priv, arg); @@ -699,8 +694,6 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) } if (!board->online) { - pr_err("gpib: ioctl %i invalid for offline board\n", - cmd & 0xff); retval = -EINVAL; goto done; } @@ -737,8 +730,6 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) spin_lock(&board->locking_pid_spinlock); if (current->pid != board->locking_pid) { spin_unlock(&board->locking_pid_spinlock); - pr_err("gpib: need to hold board lock to perform ioctl %i\n", - cmd & 0xff); retval = -EPERM; goto done; } @@ -752,8 +743,9 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) retval = take_control_ioctl(board, arg); goto done; case IBCMD: - /* IO ioctls can take a long time, we need to unlock board->big_gpib_mutex - * before we call them. + /* + * IO ioctls can take a long time, we need to unlock board->big_gpib_mutex + * before we call them. */ mutex_unlock(&board->big_gpib_mutex); return command_ioctl(file_priv, board, arg); @@ -776,8 +768,9 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) retval = query_board_rsv_ioctl(board, arg); goto done; case IBRD: - /* IO ioctls can take a long time, we need to unlock board->big_gpib_mutex - * before we call them. + /* + * IO ioctls can take a long time, we need to unlock board->big_gpib_mutex + * before we call them. */ mutex_unlock(&board->big_gpib_mutex); return read_ioctl(file_priv, board, arg); @@ -806,8 +799,9 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) retval = timeout_ioctl(board, arg); goto done; case IBWRT: - /* IO ioctls can take a long time, we need to unlock board->big_gpib_mutex - * before we call them. + /* + * IO ioctls can take a long time, we need to unlock board->big_gpib_mutex + * before we call them. */ mutex_unlock(&board->big_gpib_mutex); return write_ioctl(file_priv, board, arg); @@ -822,28 +816,28 @@ done: return retval; } -static int board_type_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, unsigned long arg) +static int board_type_ioctl(struct gpib_file_private *file_priv, + struct gpib_board *board, unsigned long arg) { struct list_head *list_ptr; - board_type_ioctl_t cmd; + struct gpib_board_type_ioctl cmd; int retval; if (!capable(CAP_SYS_ADMIN)) return -EPERM; - if (board->online) { - pr_err("gpib: can't change board type while board is online.\n"); + if (board->online) return -EBUSY; - } - retval = copy_from_user(&cmd, (void __user *)arg, sizeof(board_type_ioctl_t)); + retval = copy_from_user(&cmd, (void __user *)arg, + sizeof(struct gpib_board_type_ioctl)); if (retval) return retval; for (list_ptr = registered_drivers.next; list_ptr != ®istered_drivers; list_ptr = list_ptr->next) { - gpib_interface_list_t *entry; + struct gpib_interface_list *entry; - entry = list_entry(list_ptr, gpib_interface_list_t, list); + entry = list_entry(list_ptr, struct gpib_interface_list, list); if (strcmp(entry->interface->name, cmd.name) == 0) { int i; int had_module = file_priv->got_module; @@ -875,16 +869,16 @@ static int board_type_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, return -EINVAL; } -static int read_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, +static int read_ioctl(struct gpib_file_private *file_priv, struct gpib_board *board, unsigned long arg) { - read_write_ioctl_t read_cmd; + struct gpib_read_write_ioctl read_cmd; u8 __user *userbuf; unsigned long remain; int end_flag = 0; int retval; ssize_t read_ret = 0; - gpib_descriptor_t *desc; + struct gpib_descriptor *desc; size_t nbytes; retval = copy_from_user(&read_cmd, (void __user *)arg, sizeof(read_cmd)); @@ -931,7 +925,8 @@ static int read_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, } read_cmd.completed_transfer_count = read_cmd.requested_transfer_count - remain; read_cmd.end = end_flag; - /* suppress errors (for example due to timeout or interruption by device clear) + /* + * suppress errors (for example due to timeout or interruption by device clear) * if all bytes got sent. This prevents races that can occur in the various drivers * if a device receives a device clear immediately after a transfer completes and * the driver code wasn't careful enough to handle that case. @@ -950,15 +945,15 @@ static int read_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, return read_ret; } -static int command_ioctl(gpib_file_private_t *file_priv, - gpib_board_t *board, unsigned long arg) +static int command_ioctl(struct gpib_file_private *file_priv, + struct gpib_board *board, unsigned long arg) { - read_write_ioctl_t cmd; + struct gpib_read_write_ioctl cmd; u8 __user *userbuf; unsigned long remain; int retval; int fault = 0; - gpib_descriptor_t *desc; + struct gpib_descriptor *desc; size_t bytes_written; int no_clear_io_in_prog; @@ -985,10 +980,11 @@ static int command_ioctl(gpib_file_private_t *file_priv, if (!access_ok(userbuf, remain)) return -EFAULT; - /* Write buffer loads till we empty the user supplied buffer. - * Call drivers at least once, even if remain is zero, in - * order to allow them to insure previous commands were - * completely finished, in the case of a restarted ioctl. + /* + * Write buffer loads till we empty the user supplied buffer. + * Call drivers at least once, even if remain is zero, in + * order to allow them to insure previous commands were + * completely finished, in the case of a restarted ioctl. */ atomic_set(&desc->io_in_progress, 1); @@ -1034,15 +1030,15 @@ static int command_ioctl(gpib_file_private_t *file_priv, return retval; } -static int write_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, +static int write_ioctl(struct gpib_file_private *file_priv, struct gpib_board *board, unsigned long arg) { - read_write_ioctl_t write_cmd; + struct gpib_read_write_ioctl write_cmd; u8 __user *userbuf; unsigned long remain; int retval = 0; int fault; - gpib_descriptor_t *desc; + struct gpib_descriptor *desc; fault = copy_from_user(&write_cmd, (void __user *)arg, sizeof(write_cmd)); if (fault) @@ -1086,7 +1082,8 @@ static int write_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, break; } write_cmd.completed_transfer_count = write_cmd.requested_transfer_count - remain; - /* suppress errors (for example due to timeout or interruption by device clear) + /* + * suppress errors (for example due to timeout or interruption by device clear) * if all bytes got sent. This prevents races that can occur in the various drivers * if a device receives a device clear immediately after a transfer completes and * the driver code wasn't careful enough to handle that case. @@ -1105,10 +1102,10 @@ static int write_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, return retval; } -static int status_bytes_ioctl(gpib_board_t *board, unsigned long arg) +static int status_bytes_ioctl(struct gpib_board *board, unsigned long arg) { - gpib_status_queue_t *device; - spoll_bytes_ioctl_t cmd; + struct gpib_status_queue *device; + struct gpib_spoll_bytes_ioctl cmd; int retval; retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd)); @@ -1128,27 +1125,28 @@ static int status_bytes_ioctl(gpib_board_t *board, unsigned long arg) return 0; } -static int increment_open_device_count(gpib_board_t *board, struct list_head *head, +static int increment_open_device_count(struct gpib_board *board, struct list_head *head, unsigned int pad, int sad) { struct list_head *list_ptr; - gpib_status_queue_t *device; + struct gpib_status_queue *device; - /* first see if address has already been opened, then increment + /* + * first see if address has already been opened, then increment * open count */ for (list_ptr = head->next; list_ptr != head; list_ptr = list_ptr->next) { - device = list_entry(list_ptr, gpib_status_queue_t, list); + device = list_entry(list_ptr, struct gpib_status_queue, list); if (gpib_address_equal(device->pad, device->sad, pad, sad)) { - dev_dbg(board->gpib_dev, "pid %i, incrementing open count for pad %i, sad %i\n", - current->pid, device->pad, device->sad); + dev_dbg(board->gpib_dev, "incrementing open count for pad %i, sad %i\n", + device->pad, device->sad); device->reference_count++; return 0; } } - /* otherwise we need to allocate a new gpib_status_queue_t */ - device = kmalloc(sizeof(gpib_status_queue_t), GFP_ATOMIC); + /* otherwise we need to allocate a new struct gpib_status_queue */ + device = kmalloc(sizeof(struct gpib_status_queue), GFP_ATOMIC); if (!device) return -ENOMEM; init_gpib_status_queue(device); @@ -1158,54 +1156,53 @@ static int increment_open_device_count(gpib_board_t *board, struct list_head *he list_add(&device->list, head); - dev_dbg(board->gpib_dev, "pid %i, opened pad %i, sad %i\n", - current->pid, device->pad, device->sad); + dev_dbg(board->gpib_dev, "opened pad %i, sad %i\n", device->pad, device->sad); return 0; } -static int subtract_open_device_count(gpib_board_t *board, struct list_head *head, +static int subtract_open_device_count(struct gpib_board *board, struct list_head *head, unsigned int pad, int sad, unsigned int count) { - gpib_status_queue_t *device; + struct gpib_status_queue *device; struct list_head *list_ptr; for (list_ptr = head->next; list_ptr != head; list_ptr = list_ptr->next) { - device = list_entry(list_ptr, gpib_status_queue_t, list); + device = list_entry(list_ptr, struct gpib_status_queue, list); if (gpib_address_equal(device->pad, device->sad, pad, sad)) { - dev_dbg(board->gpib_dev, "pid %i, decrementing open count for pad %i, sad %i\n", - current->pid, device->pad, device->sad); + dev_dbg(board->gpib_dev, "decrementing open count for pad %i, sad %i\n", + device->pad, device->sad); if (count > device->reference_count) { - pr_err("gpib: bug! in %s()\n", __func__); + dev_err(board->gpib_dev, "bug! in %s()\n", __func__); return -EINVAL; } device->reference_count -= count; if (device->reference_count == 0) { - dev_dbg(board->gpib_dev, "pid %i, closing pad %i, sad %i\n", - current->pid, device->pad, device->sad); + dev_dbg(board->gpib_dev, "closing pad %i, sad %i\n", + device->pad, device->sad); list_del(list_ptr); kfree(device); } return 0; } } - pr_err("gpib: bug! tried to close address that was never opened!\n"); + dev_err(board->gpib_dev, "bug! tried to close address that was never opened!\n"); return -EINVAL; } -static inline int decrement_open_device_count(gpib_board_t *board, struct list_head *head, +static inline int decrement_open_device_count(struct gpib_board *board, struct list_head *head, unsigned int pad, int sad) { return subtract_open_device_count(board, head, pad, sad, 1); } -static int cleanup_open_devices(gpib_file_private_t *file_priv, gpib_board_t *board) +static int cleanup_open_devices(struct gpib_file_private *file_priv, struct gpib_board *board) { int retval = 0; int i; for (i = 0; i < GPIB_MAX_NUM_DESCRIPTORS; i++) { - gpib_descriptor_t *desc; + struct gpib_descriptor *desc; desc = file_priv->descriptors[i]; if (!desc) @@ -1224,11 +1221,11 @@ static int cleanup_open_devices(gpib_file_private_t *file_priv, gpib_board_t *bo return 0; } -static int open_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long arg) +static int open_dev_ioctl(struct file *filep, struct gpib_board *board, unsigned long arg) { - open_dev_ioctl_t open_dev_cmd; + struct gpib_open_dev_ioctl open_dev_cmd; int retval; - gpib_file_private_t *file_priv = filep->private_data; + struct gpib_file_private *file_priv = filep->private_data; int i; retval = copy_from_user(&open_dev_cmd, (void __user *)arg, sizeof(open_dev_cmd)); @@ -1244,7 +1241,7 @@ static int open_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long mutex_unlock(&file_priv->descriptors_mutex); return -ERANGE; } - file_priv->descriptors[i] = kmalloc(sizeof(gpib_descriptor_t), GFP_KERNEL); + file_priv->descriptors[i] = kmalloc(sizeof(struct gpib_descriptor), GFP_KERNEL); if (!file_priv->descriptors[i]) { mutex_unlock(&file_priv->descriptors_mutex); return -ENOMEM; @@ -1261,7 +1258,8 @@ static int open_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long if (retval < 0) return retval; - /* clear stuck srq state, since we may be able to find service request on + /* + * clear stuck srq state, since we may be able to find service request on * the new device */ atomic_set(&board->stuck_srq, 0); @@ -1274,10 +1272,10 @@ static int open_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long return 0; } -static int close_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long arg) +static int close_dev_ioctl(struct file *filep, struct gpib_board *board, unsigned long arg) { - close_dev_ioctl_t cmd; - gpib_file_private_t *file_priv = filep->private_data; + struct gpib_close_dev_ioctl cmd; + struct gpib_file_private *file_priv = filep->private_data; int retval; retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd)); @@ -1301,13 +1299,11 @@ static int close_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned lon return 0; } -static int serial_poll_ioctl(gpib_board_t *board, unsigned long arg) +static int serial_poll_ioctl(struct gpib_board *board, unsigned long arg) { - serial_poll_ioctl_t serial_cmd; + struct gpib_serial_poll_ioctl serial_cmd; int retval; - dev_dbg(board->gpib_dev, "pid %i, entering %s()\n", current->pid, __func__); - retval = copy_from_user(&serial_cmd, (void __user *)arg, sizeof(serial_cmd)); if (retval) return -EFAULT; @@ -1324,12 +1320,12 @@ static int serial_poll_ioctl(gpib_board_t *board, unsigned long arg) return 0; } -static int wait_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, +static int wait_ioctl(struct gpib_file_private *file_priv, struct gpib_board *board, unsigned long arg) { - wait_ioctl_t wait_cmd; + struct gpib_wait_ioctl wait_cmd; int retval; - gpib_descriptor_t *desc; + struct gpib_descriptor *desc; retval = copy_from_user(&wait_cmd, (void __user *)arg, sizeof(wait_cmd)); if (retval) @@ -1351,7 +1347,7 @@ static int wait_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, return 0; } -static int parallel_poll_ioctl(gpib_board_t *board, unsigned long arg) +static int parallel_poll_ioctl(struct gpib_board *board, unsigned long arg) { u8 poll_byte; int retval; @@ -1367,9 +1363,9 @@ static int parallel_poll_ioctl(gpib_board_t *board, unsigned long arg) return 0; } -static int online_ioctl(gpib_board_t *board, unsigned long arg) +static int online_ioctl(struct gpib_board *board, unsigned long arg) { - online_ioctl_t online_cmd; + struct gpib_online_ioctl online_cmd; int retval; void __user *init_data = NULL; @@ -1411,7 +1407,7 @@ static int online_ioctl(gpib_board_t *board, unsigned long arg) return retval; } -static int remote_enable_ioctl(gpib_board_t *board, unsigned long arg) +static int remote_enable_ioctl(struct gpib_board *board, unsigned long arg) { int enable; int retval; @@ -1423,7 +1419,7 @@ static int remote_enable_ioctl(gpib_board_t *board, unsigned long arg) return ibsre(board, enable); } -static int take_control_ioctl(gpib_board_t *board, unsigned long arg) +static int take_control_ioctl(struct gpib_board *board, unsigned long arg) { int synchronous; int retval; @@ -1435,7 +1431,7 @@ static int take_control_ioctl(gpib_board_t *board, unsigned long arg) return ibcac(board, synchronous, 1); } -static int line_status_ioctl(gpib_board_t *board, unsigned long arg) +static int line_status_ioctl(struct gpib_board *board, unsigned long arg) { short lines; int retval; @@ -1451,12 +1447,12 @@ static int line_status_ioctl(gpib_board_t *board, unsigned long arg) return 0; } -static int pad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, +static int pad_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv, unsigned long arg) { - pad_ioctl_t cmd; + struct gpib_pad_ioctl cmd; int retval; - gpib_descriptor_t *desc; + struct gpib_descriptor *desc; retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd)); if (retval) @@ -1487,12 +1483,12 @@ static int pad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, return 0; } -static int sad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, +static int sad_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv, unsigned long arg) { - sad_ioctl_t cmd; + struct gpib_sad_ioctl cmd; int retval; - gpib_descriptor_t *desc; + struct gpib_descriptor *desc; retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd)); if (retval) @@ -1522,9 +1518,9 @@ static int sad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, return 0; } -static int eos_ioctl(gpib_board_t *board, unsigned long arg) +static int eos_ioctl(struct gpib_board *board, unsigned long arg) { - eos_ioctl_t eos_cmd; + struct gpib_eos_ioctl eos_cmd; int retval; retval = copy_from_user(&eos_cmd, (void __user *)arg, sizeof(eos_cmd)); @@ -1534,7 +1530,7 @@ static int eos_ioctl(gpib_board_t *board, unsigned long arg) return ibeos(board, eos_cmd.eos, eos_cmd.eos_flags); } -static int request_service_ioctl(gpib_board_t *board, unsigned long arg) +static int request_service_ioctl(struct gpib_board *board, unsigned long arg) { u8 status_byte; int retval; @@ -1546,13 +1542,13 @@ static int request_service_ioctl(gpib_board_t *board, unsigned long arg) return ibrsv2(board, status_byte, status_byte & request_service_bit); } -static int request_service2_ioctl(gpib_board_t *board, unsigned long arg) +static int request_service2_ioctl(struct gpib_board *board, unsigned long arg) { - request_service2_t request_service2_cmd; + struct gpib_request_service2 request_service2_cmd; int retval; retval = copy_from_user(&request_service2_cmd, (void __user *)arg, - sizeof(request_service2_t)); + sizeof(struct gpib_request_service2)); if (retval) return -EFAULT; @@ -1560,7 +1556,7 @@ static int request_service2_ioctl(gpib_board_t *board, unsigned long arg) request_service2_cmd.new_reason_for_service); } -static int iobase_ioctl(gpib_board_config_t *config, unsigned long arg) +static int iobase_ioctl(struct gpib_board_config *config, unsigned long arg) { u64 base_addr; int retval; @@ -1579,7 +1575,7 @@ static int iobase_ioctl(gpib_board_config_t *config, unsigned long arg) return 0; } -static int irq_ioctl(gpib_board_config_t *config, unsigned long arg) +static int irq_ioctl(struct gpib_board_config *config, unsigned long arg) { unsigned int irq; int retval; @@ -1596,7 +1592,7 @@ static int irq_ioctl(gpib_board_config_t *config, unsigned long arg) return 0; } -static int dma_ioctl(gpib_board_config_t *config, unsigned long arg) +static int dma_ioctl(struct gpib_board_config *config, unsigned long arg) { unsigned int dma_channel; int retval; @@ -1613,12 +1609,12 @@ static int dma_ioctl(gpib_board_config_t *config, unsigned long arg) return 0; } -static int autospoll_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, +static int autospoll_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv, unsigned long arg) { - autospoll_ioctl_t enable; + short enable; int retval; - gpib_descriptor_t *desc; + struct gpib_descriptor *desc; retval = copy_from_user(&enable, (void __user *)arg, sizeof(enable)); if (retval) @@ -1639,18 +1635,19 @@ static int autospoll_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, board->autospollers--; retval = 0; } else { - pr_err("gpib: tried to set number of autospollers negative\n"); + dev_err(board->gpib_dev, + "tried to set number of autospollers negative\n"); retval = -EINVAL; } } else { - pr_err("gpib: autopoll disable requested before enable\n"); + dev_err(board->gpib_dev, "autopoll disable requested before enable\n"); retval = -EINVAL; } } return retval; } -static int mutex_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, +static int mutex_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv, unsigned long arg) { int retval, lock_mutex; @@ -1661,10 +1658,8 @@ static int mutex_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, if (lock_mutex) { retval = mutex_lock_interruptible(&board->user_mutex); - if (retval) { - pr_warn("gpib: ioctl interrupted while waiting on lock\n"); + if (retval) return -ERESTARTSYS; - } spin_lock(&board->locking_pid_spinlock); board->locking_pid = current->pid; @@ -1672,13 +1667,12 @@ static int mutex_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, atomic_set(&file_priv->holding_mutex, 1); - dev_dbg(board->gpib_dev, "pid %i, locked board %d mutex\n", - current->pid, board->minor); + dev_dbg(board->gpib_dev, "locked board mutex\n"); } else { spin_lock(&board->locking_pid_spinlock); if (current->pid != board->locking_pid) { - pr_err("gpib: bug! pid %i tried to release mutex held by pid %i\n", - current->pid, board->locking_pid); + dev_err(board->gpib_dev, "bug! pid %i tried to release mutex held by pid %i\n", + current->pid, board->locking_pid); spin_unlock(&board->locking_pid_spinlock); return -EPERM; } @@ -1688,13 +1682,12 @@ static int mutex_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv, atomic_set(&file_priv->holding_mutex, 0); mutex_unlock(&board->user_mutex); - dev_dbg(board->gpib_dev, "pid %i, unlocked board %i mutex\n", - current->pid, board->minor); + dev_dbg(board->gpib_dev, "unlocked board mutex\n"); } return 0; } -static int timeout_ioctl(gpib_board_t *board, unsigned long arg) +static int timeout_ioctl(struct gpib_board *board, unsigned long arg) { unsigned int timeout; int retval; @@ -1704,14 +1697,14 @@ static int timeout_ioctl(gpib_board_t *board, unsigned long arg) return -EFAULT; board->usec_timeout = timeout; - dev_dbg(board->gpib_dev, "pid %i, timeout set to %i usec\n", current->pid, timeout); + dev_dbg(board->gpib_dev, "timeout set to %i usec\n", timeout); return 0; } -static int ppc_ioctl(gpib_board_t *board, unsigned long arg) +static int ppc_ioctl(struct gpib_board *board, unsigned long arg) { - ppoll_config_ioctl_t cmd; + struct gpib_ppoll_config_ioctl cmd; int retval; retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd)); @@ -1735,28 +1728,26 @@ static int ppc_ioctl(gpib_board_t *board, unsigned long arg) return 0; } -static int set_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg) +static int set_local_ppoll_mode_ioctl(struct gpib_board *board, unsigned long arg) { - local_ppoll_mode_ioctl_t cmd; + short cmd; int retval; retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd)); if (retval) return -EFAULT; - if (!board->interface->local_parallel_poll_mode) { - pr_warn("gpib: local/remote parallel poll mode not supported by driver."); - return -EIO; - } + if (!board->interface->local_parallel_poll_mode) + return -ENOENT; board->local_ppoll_mode = cmd != 0; board->interface->local_parallel_poll_mode(board, board->local_ppoll_mode); return 0; } -static int get_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg) +static int get_local_ppoll_mode_ioctl(struct gpib_board *board, unsigned long arg) { - local_ppoll_mode_ioctl_t cmd; + short cmd; int retval; cmd = board->local_ppoll_mode; @@ -1767,7 +1758,7 @@ static int get_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg) return 0; } -static int query_board_rsv_ioctl(gpib_board_t *board, unsigned long arg) +static int query_board_rsv_ioctl(struct gpib_board *board, unsigned long arg) { int status; int retval; @@ -1781,9 +1772,9 @@ static int query_board_rsv_ioctl(gpib_board_t *board, unsigned long arg) return 0; } -static int board_info_ioctl(const gpib_board_t *board, unsigned long arg) +static int board_info_ioctl(const struct gpib_board *board, unsigned long arg) { - board_info_ioctl_t info; + struct gpib_board_info_ioctl info; int retval; info.pad = board->pad; @@ -1804,7 +1795,7 @@ static int board_info_ioctl(const gpib_board_t *board, unsigned long arg) return 0; } -static int interface_clear_ioctl(gpib_board_t *board, unsigned long arg) +static int interface_clear_ioctl(struct gpib_board *board, unsigned long arg) { unsigned int usec_duration; int retval; @@ -1816,9 +1807,9 @@ static int interface_clear_ioctl(gpib_board_t *board, unsigned long arg) return ibsic(board, usec_duration); } -static int select_pci_ioctl(gpib_board_config_t *config, unsigned long arg) +static int select_pci_ioctl(struct gpib_board_config *config, unsigned long arg) { - select_pci_ioctl_t selection; + struct gpib_select_pci_ioctl selection; int retval; if (!capable(CAP_SYS_ADMIN)) @@ -1834,19 +1825,20 @@ static int select_pci_ioctl(gpib_board_config_t *config, unsigned long arg) return 0; } -static int select_device_path_ioctl(gpib_board_config_t *config, unsigned long arg) +static int select_device_path_ioctl(struct gpib_board_config *config, unsigned long arg) { - select_device_path_ioctl_t *selection; + struct gpib_select_device_path_ioctl *selection; int retval; if (!capable(CAP_SYS_ADMIN)) return -EPERM; - selection = vmalloc(sizeof(select_device_path_ioctl_t)); + selection = vmalloc(sizeof(struct gpib_select_device_path_ioctl)); if (!selection) return -ENOMEM; - retval = copy_from_user(selection, (void __user *)arg, sizeof(select_device_path_ioctl_t)); + retval = copy_from_user(selection, (void __user *)arg, + sizeof(struct gpib_select_device_path_ioctl)); if (retval) { vfree(selection); return -EFAULT; @@ -1862,16 +1854,16 @@ static int select_device_path_ioctl(gpib_board_config_t *config, unsigned long a return 0; } -unsigned int num_gpib_events(const gpib_event_queue_t *queue) +unsigned int num_gpib_events(const struct gpib_event_queue *queue) { return queue->num_events; } -static int push_gpib_event_nolock(gpib_board_t *board, short event_type) +static int push_gpib_event_nolock(struct gpib_board *board, short event_type) { - gpib_event_queue_t *queue = &board->event_queue; + struct gpib_event_queue *queue = &board->event_queue; struct list_head *head = &queue->event_head; - gpib_event_t *event; + struct gpib_event *event; static const unsigned int max_num_events = 1024; int retval; @@ -1884,10 +1876,10 @@ static int push_gpib_event_nolock(gpib_board_t *board, short event_type) return retval; } - event = kmalloc(sizeof(gpib_event_t), GFP_ATOMIC); + event = kmalloc(sizeof(struct gpib_event), GFP_ATOMIC); if (!event) { queue->dropped_event = 1; - pr_err("gpib: failed to allocate memory for event\n"); + dev_err(board->gpib_dev, "failed to allocate memory for event\n"); return -ENOMEM; } @@ -1905,7 +1897,7 @@ static int push_gpib_event_nolock(gpib_board_t *board, short event_type) } // push event onto back of event queue -int push_gpib_event(gpib_board_t *board, short event_type) +int push_gpib_event(struct gpib_board *board, short event_type) { unsigned long flags; int retval; @@ -1914,23 +1906,24 @@ int push_gpib_event(gpib_board_t *board, short event_type) retval = push_gpib_event_nolock(board, event_type); spin_unlock_irqrestore(&board->event_queue.lock, flags); - if (event_type == EventDevTrg) + if (event_type == EVENT_DEV_TRG) board->status |= DTAS; - if (event_type == EventDevClr) + if (event_type == EVENT_DEV_CLR) board->status |= DCAS; return retval; } EXPORT_SYMBOL(push_gpib_event); -static int pop_gpib_event_nolock(gpib_board_t *board, gpib_event_queue_t *queue, short *event_type) +static int pop_gpib_event_nolock(struct gpib_board *board, + struct gpib_event_queue *queue, short *event_type) { struct list_head *head = &queue->event_head; struct list_head *front = head->next; - gpib_event_t *event; + struct gpib_event *event; if (num_gpib_events(queue) == 0) { - *event_type = EventNone; + *event_type = EVENT_NONE; return 0; } @@ -1942,7 +1935,7 @@ static int pop_gpib_event_nolock(gpib_board_t *board, gpib_event_queue_t *queue, return -EPIPE; } - event = list_entry(front, gpib_event_t, list); + event = list_entry(front, struct gpib_event, list); *event_type = event->event_type; list_del(front); @@ -1957,7 +1950,7 @@ static int pop_gpib_event_nolock(gpib_board_t *board, gpib_event_queue_t *queue, } // pop event from front of event queue -int pop_gpib_event(gpib_board_t *board, gpib_event_queue_t *queue, short *event_type) +int pop_gpib_event(struct gpib_board *board, struct gpib_event_queue *queue, short *event_type) { unsigned long flags; int retval; @@ -1968,9 +1961,9 @@ int pop_gpib_event(gpib_board_t *board, gpib_event_queue_t *queue, short *event_ return retval; } -static int event_ioctl(gpib_board_t *board, unsigned long arg) +static int event_ioctl(struct gpib_board *board, unsigned long arg) { - event_ioctl_t user_event; + short user_event; int retval; short event; @@ -1987,30 +1980,26 @@ static int event_ioctl(gpib_board_t *board, unsigned long arg) return 0; } -static int request_system_control_ioctl(gpib_board_t *board, unsigned long arg) +static int request_system_control_ioctl(struct gpib_board *board, unsigned long arg) { - rsc_ioctl_t request_control; + int request_control; int retval; retval = copy_from_user(&request_control, (void __user *)arg, sizeof(request_control)); if (retval) return -EFAULT; - ibrsc(board, request_control); - - return 0; + return ibrsc(board, request_control); } -static int t1_delay_ioctl(gpib_board_t *board, unsigned long arg) +static int t1_delay_ioctl(struct gpib_board *board, unsigned long arg) { - t1_delay_ioctl_t cmd; + unsigned int cmd; unsigned int delay; int retval; - if (!board->interface->t1_delay) { - pr_warn("gpib: t1 delay not implemented in driver!\n"); - return -EIO; - } + if (!board->interface->t1_delay) + return -ENOENT; retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd)); if (retval) @@ -2018,8 +2007,11 @@ static int t1_delay_ioctl(gpib_board_t *board, unsigned long arg) delay = cmd; - board->t1_nano_sec = board->interface->t1_delay(board, delay); + retval = board->interface->t1_delay(board, delay); + if (retval < 0) + return retval; + board->t1_nano_sec = retval; return 0; } @@ -2032,11 +2024,11 @@ static const struct file_operations ib_fops = { .release = &ibclose, }; -gpib_board_t board_array[GPIB_MAX_NUM_BOARDS]; +struct gpib_board board_array[GPIB_MAX_NUM_BOARDS]; LIST_HEAD(registered_drivers); -void init_gpib_descriptor(gpib_descriptor_t *desc) +void init_gpib_descriptor(struct gpib_descriptor *desc) { desc->pad = 0; desc->sad = -1; @@ -2045,9 +2037,9 @@ void init_gpib_descriptor(gpib_descriptor_t *desc) atomic_set(&desc->io_in_progress, 0); } -int gpib_register_driver(gpib_interface_t *interface, struct module *provider_module) +int gpib_register_driver(struct gpib_interface *interface, struct module *provider_module) { - struct gpib_interface_list_struct *entry; + struct gpib_interface_list *entry; entry = kmalloc(sizeof(*entry), GFP_KERNEL); if (!entry) @@ -2061,13 +2053,13 @@ int gpib_register_driver(gpib_interface_t *interface, struct module *provider_mo } EXPORT_SYMBOL(gpib_register_driver); -void gpib_unregister_driver(gpib_interface_t *interface) +void gpib_unregister_driver(struct gpib_interface *interface) { int i; struct list_head *list_ptr; for (i = 0; i < GPIB_MAX_NUM_BOARDS; i++) { - gpib_board_t *board = &board_array[i]; + struct gpib_board *board = &board_array[i]; if (board->interface == interface) { if (board->use_count > 0) @@ -2078,27 +2070,26 @@ void gpib_unregister_driver(gpib_interface_t *interface) } } for (list_ptr = registered_drivers.next; list_ptr != ®istered_drivers;) { - gpib_interface_list_t *entry; + struct gpib_interface_list *entry; - entry = list_entry(list_ptr, gpib_interface_list_t, list); + entry = list_entry(list_ptr, struct gpib_interface_list, list); list_ptr = list_ptr->next; if (entry->interface == interface) { list_del(&entry->list); kfree(entry); } } - pr_info("gpib: unregistered %s interface\n", interface->name); } EXPORT_SYMBOL(gpib_unregister_driver); -static void init_gpib_board_config(gpib_board_config_t *config) +static void init_gpib_board_config(struct gpib_board_config *config) { - memset(config, 0, sizeof(gpib_board_config_t)); + memset(config, 0, sizeof(struct gpib_board_config)); config->pci_bus = -1; config->pci_slot = -1; } -void init_gpib_board(gpib_board_t *board) +void init_gpib_board(struct gpib_board *board) { board->interface = NULL; board->provider_module = NULL; @@ -2133,7 +2124,7 @@ void init_gpib_board(gpib_board_t *board) board->local_ppoll_mode = 0; } -int gpib_allocate_board(gpib_board_t *board) +int gpib_allocate_board(struct gpib_board *board) { if (!board->buffer) { board->buffer_length = 0x4000; @@ -2146,7 +2137,7 @@ int gpib_allocate_board(gpib_board_t *board) return 0; } -void gpib_deallocate_board(gpib_board_t *board) +void gpib_deallocate_board(struct gpib_board *board) { short dummy; @@ -2159,7 +2150,7 @@ void gpib_deallocate_board(gpib_board_t *board) pop_gpib_event(board, &board->event_queue, &dummy); } -static void init_board_array(gpib_board_t *board_array, unsigned int length) +static void init_board_array(struct gpib_board *board_array, unsigned int length) { int i; @@ -2169,7 +2160,7 @@ static void init_board_array(gpib_board_t *board_array, unsigned int length) } } -void init_gpib_status_queue(gpib_status_queue_t *device) +void init_gpib_status_queue(struct gpib_status_queue *device) { INIT_LIST_HEAD(&device->list); INIT_LIST_HEAD(&device->status_bytes); @@ -2184,7 +2175,7 @@ static int __init gpib_common_init_module(void) { int i; - pr_info("Linux-GPIB core driver\n"); + pr_info("GPIB core driver\n"); init_board_array(board_array, GPIB_MAX_NUM_BOARDS); if (register_chrdev(GPIB_CODE, "gpib", &ib_fops)) { pr_err("gpib: can't get major %d\n", GPIB_CODE); @@ -2234,7 +2225,7 @@ int gpib_match_device_path(struct device *dev, const char *device_path_in) } EXPORT_SYMBOL(gpib_match_device_path); -struct pci_dev *gpib_pci_get_device(const gpib_board_config_t *config, unsigned int vendor_id, +struct pci_dev *gpib_pci_get_device(const struct gpib_board_config *config, unsigned int vendor_id, unsigned int device_id, struct pci_dev *from) { struct pci_dev *pci_device = from; @@ -2253,7 +2244,7 @@ struct pci_dev *gpib_pci_get_device(const gpib_board_config_t *config, unsigned } EXPORT_SYMBOL(gpib_pci_get_device); -struct pci_dev *gpib_pci_get_subsys(const gpib_board_config_t *config, unsigned int vendor_id, +struct pci_dev *gpib_pci_get_subsys(const struct gpib_board_config *config, unsigned int vendor_id, unsigned int device_id, unsigned int ss_vendor, unsigned int ss_device, struct pci_dev *from) diff --git a/drivers/staging/gpib/common/iblib.c b/drivers/staging/gpib/common/iblib.c index 5f6fa135f505..549280d9a6e9 100644 --- a/drivers/staging/gpib/common/iblib.c +++ b/drivers/staging/gpib/common/iblib.c @@ -4,6 +4,8 @@ * copyright : (C) 2001, 2002 by Frank Mori Hess ***************************************************************************/ +#define dev_fmt(fmt) KBUILD_MODNAME ": " fmt + #include "ibsys.h" #include <linux/delay.h> #include <linux/kthread.h> @@ -19,23 +21,22 @@ * If fallback_to_async is non-zero, try to take control asynchronously * if synchronous attempt fails. */ -int ibcac(gpib_board_t *board, int sync, int fallback_to_async) +int ibcac(struct gpib_board *board, int sync, int fallback_to_async) { int status = ibstatus(board); int retval; - if ((status & CIC) == 0) { - pr_err("gpib: not CIC during %s()\n", __func__); - return -1; - } + if ((status & CIC) == 0) + return -EINVAL; if (status & ATN) return 0; if (sync && (status & LACS) == 0) - /* tcs (take control synchronously) can only possibly work when - * controller is listener. Error code also needs to be -ETIMEDOUT - * or it will giveout without doing fallback. + /* + * tcs (take control synchronously) can only possibly work when + * controller is listener. Error code also needs to be -ETIMEDOUT + * or it will giveout without doing fallback. */ retval = -ETIMEDOUT; else @@ -50,7 +51,8 @@ int ibcac(gpib_board_t *board, int sync, int fallback_to_async) return retval; } -/* After ATN is asserted, it should cause any connected devices +/* + * After ATN is asserted, it should cause any connected devices * to start listening for command bytes and leave acceptor idle state. * So if ATN is asserted and neither NDAC or NRFD are asserted, * then there are no devices and ibcmd should error out immediately. @@ -61,7 +63,7 @@ int ibcac(gpib_board_t *board, int sync, int fallback_to_async) * set the skip_check_for_command_acceptors flag in their * gpib_interface_struct to avoid useless overhead. */ -static int check_for_command_acceptors(gpib_board_t *board) +static int check_for_command_acceptors(struct gpib_board *board) { int lines; @@ -76,15 +78,8 @@ static int check_for_command_acceptors(gpib_board_t *board) if (lines < 0) return lines; - if (lines & ValidATN) { - if ((lines & BusATN) == 0) { - pr_err("gpib: ATN not asserted in %s()?", __func__); - return 0; - } - } - - if ((lines & ValidNRFD) && (lines & ValidNDAC)) { - if ((lines & BusNRFD) == 0 && (lines & BusNDAC) == 0) + if ((lines & VALID_NRFD) && (lines & VALID_NDAC)) { + if ((lines & BUS_NRFD) == 0 && (lines & BUS_NDAC) == 0) return -ENOTCONN; } @@ -103,7 +98,7 @@ static int check_for_command_acceptors(gpib_board_t *board) * must be called to initialize the GPIB and enable * the interface to leave the controller idle state. */ -int ibcmd(gpib_board_t *board, uint8_t *buf, size_t length, size_t *bytes_written) +int ibcmd(struct gpib_board *board, u8 *buf, size_t length, size_t *bytes_written) { ssize_t ret = 0; int status; @@ -112,10 +107,8 @@ int ibcmd(gpib_board_t *board, uint8_t *buf, size_t length, size_t *bytes_writte status = ibstatus(board); - if ((status & CIC) == 0) { - pr_err("gpib: cannot send command when not controller-in-charge\n"); - return -EIO; - } + if ((status & CIC) == 0) + return -EINVAL; os_start_timer(board, board->usec_timeout); @@ -140,26 +133,22 @@ int ibcmd(gpib_board_t *board, uint8_t *buf, size_t length, size_t *bytes_writte * active state, i.e., turn ATN off. */ -int ibgts(gpib_board_t *board) +int ibgts(struct gpib_board *board) { int status = ibstatus(board); int retval; - if ((status & CIC) == 0) { - pr_err("gpib: not CIC during %s()\n", __func__); - return -1; - } + if ((status & CIC) == 0) + return -EINVAL; retval = board->interface->go_to_standby(board); /* go to standby */ - if (retval < 0) - pr_err("gpib: error while going to standby\n"); board->interface->update_status(board, 0); return retval; } -static int autospoll_wait_should_wake_up(gpib_board_t *board) +static int autospoll_wait_should_wake_up(struct gpib_board *board) { int retval; @@ -175,7 +164,7 @@ static int autospoll_wait_should_wake_up(gpib_board_t *board) static int autospoll_thread(void *board_void) { - gpib_board_t *board = board_void; + struct gpib_board *board = board_void; int retval = 0; dev_dbg(board->gpib_dev, "entering autospoll thread\n"); @@ -200,20 +189,19 @@ static int autospoll_thread(void *board_void) retval = autopoll_all_devices(board); module_put(board->provider_module); } else { - pr_err("gpib%i: %s: try_module_get() failed!\n", board->minor, __func__); + dev_err(board->gpib_dev, "try_module_get() failed!\n"); } if (retval <= 0) { - pr_err("gpib%i: %s: stuck SRQ\n", board->minor, __func__); + dev_err(board->gpib_dev, "stuck SRQ\n"); atomic_set(&board->stuck_srq, 1); // XXX could be better set_bit(SRQI_NUM, &board->status); } } - pr_info("gpib%i: exiting autospoll thread\n", board->minor); return retval; } -int ibonline(gpib_board_t *board) +int ibonline(struct gpib_board *board) { int retval; @@ -230,10 +218,10 @@ int ibonline(gpib_board_t *board) retval = board->interface->attach(board, &board->config); if (retval < 0) { board->interface->detach(board); - pr_err("gpib: interface attach failed\n"); return retval; } - /* nios2nommu on 2.6.11 uclinux kernel has weird problems + /* + * nios2nommu on 2.6.11 uclinux kernel has weird problems * with autospoll thread causing huge slowdowns */ #ifndef CONFIG_NIOS2 @@ -241,19 +229,19 @@ int ibonline(gpib_board_t *board) "gpib%d_autospoll_kthread", board->minor); retval = IS_ERR(board->autospoll_task); if (retval) { - pr_err("gpib: failed to create autospoll thread\n"); + dev_err(board->gpib_dev, "failed to create autospoll thread\n"); board->interface->detach(board); return retval; } #endif board->online = 1; - dev_dbg(board->gpib_dev, "gpib: board online\n"); + dev_dbg(board->gpib_dev, "board online\n"); return 0; } /* XXX need to make sure board is generally not in use (grab board lock?) */ -int iboffline(gpib_board_t *board) +int iboffline(struct gpib_board *board) { int retval; @@ -265,14 +253,14 @@ int iboffline(gpib_board_t *board) if (board->autospoll_task && !IS_ERR(board->autospoll_task)) { retval = kthread_stop(board->autospoll_task); if (retval) - pr_err("gpib: kthread_stop returned %i\n", retval); + dev_err(board->gpib_dev, "kthread_stop returned %i\n", retval); board->autospoll_task = NULL; } board->interface->detach(board); gpib_deallocate_board(board); board->online = 0; - dev_dbg(board->gpib_dev, "gpib: board offline\n"); + dev_dbg(board->gpib_dev, "board offline\n"); return 0; } @@ -285,7 +273,7 @@ int iboffline(gpib_board_t *board) * Next LSB (bits 8-15) - STATUS lines mask (lines that are currently set). * */ -int iblines(const gpib_board_t *board, short *lines) +int iblines(const struct gpib_board *board, short *lines) { int retval; @@ -312,7 +300,7 @@ int iblines(const gpib_board_t *board, short *lines) * calling ibcmd. */ -int ibrd(gpib_board_t *board, uint8_t *buf, size_t length, int *end_flag, size_t *nbytes) +int ibrd(struct gpib_board *board, u8 *buf, size_t length, int *end_flag, size_t *nbytes) { ssize_t ret = 0; int retval; @@ -320,17 +308,16 @@ int ibrd(gpib_board_t *board, uint8_t *buf, size_t length, int *end_flag, size_t *nbytes = 0; *end_flag = 0; - if (length == 0) { - pr_warn("gpib: %s() called with zero length?\n", __func__); + if (length == 0) return 0; - } if (board->master) { retval = ibgts(board); if (retval < 0) return retval; } - /* XXX resetting timer here could cause timeouts take longer than they should, + /* + * XXX resetting timer here could cause timeouts take longer than they should, * since read_ioctl calls this * function in a loop, there is probably a similar problem with writes/commands */ @@ -338,10 +325,9 @@ int ibrd(gpib_board_t *board, uint8_t *buf, size_t length, int *end_flag, size_t do { ret = board->interface->read(board, buf, length - *nbytes, end_flag, &bytes_read); - if (ret < 0) { - pr_err("gpib read error\n"); + if (ret < 0) goto ibrd_out; - } + buf += bytes_read; *nbytes += bytes_read; if (need_resched()) @@ -361,7 +347,7 @@ ibrd_out: * 1. Prior to conducting the poll the interface is placed * in the controller active state. */ -int ibrpp(gpib_board_t *board, uint8_t *result) +int ibrpp(struct gpib_board *board, u8 *result) { int retval = 0; @@ -370,15 +356,13 @@ int ibrpp(gpib_board_t *board, uint8_t *result) if (retval) return -1; - if (board->interface->parallel_poll(board, result)) { - pr_err("gpib: parallel poll failed\n"); - retval = -1; - } + retval = board->interface->parallel_poll(board, result); + os_remove_timer(board); return retval; } -int ibppc(gpib_board_t *board, uint8_t configuration) +int ibppc(struct gpib_board *board, u8 configuration) { configuration &= 0x1f; board->interface->parallel_poll_configure(board, configuration); @@ -387,15 +371,13 @@ int ibppc(gpib_board_t *board, uint8_t configuration) return 0; } -int ibrsv2(gpib_board_t *board, uint8_t status_byte, int new_reason_for_service) +int ibrsv2(struct gpib_board *board, u8 status_byte, int new_reason_for_service) { int board_status = ibstatus(board); const unsigned int MSS = status_byte & request_service_bit; - if ((board_status & CIC)) { - pr_err("gpib: interface requested service while CIC\n"); + if ((board_status & CIC)) return -EINVAL; - } if (MSS == 0 && new_reason_for_service) return -EINVAL; @@ -422,21 +404,17 @@ int ibrsv2(gpib_board_t *board, uint8_t status_byte, int new_reason_for_service) * ibcmd in order to initialize the bus and enable the * interface to leave the controller idle state. */ -int ibsic(gpib_board_t *board, unsigned int usec_duration) +int ibsic(struct gpib_board *board, unsigned int usec_duration) { - if (board->master == 0) { - pr_err("gpib: tried to assert IFC when not system controller\n"); - return -1; - } + if (board->master == 0) + return -EINVAL; if (usec_duration < 100) usec_duration = 100; - if (usec_duration > 1000) { + if (usec_duration > 1000) usec_duration = 1000; - pr_warn("gpib: warning, shortening long udelay\n"); - } - dev_dbg(board->gpib_dev, "sending interface clear\n"); + dev_dbg(board->gpib_dev, "sending interface clear, delay = %ius\n", usec_duration); board->interface->interface_clear(board, 1); udelay(usec_duration); board->interface->interface_clear(board, 0); @@ -444,26 +422,31 @@ int ibsic(gpib_board_t *board, unsigned int usec_duration) return 0; } -void ibrsc(gpib_board_t *board, int request_control) +int ibrsc(struct gpib_board *board, int request_control) { + int retval; + + if (!board->interface->request_system_control) + return -EPERM; + + retval = board->interface->request_system_control(board, request_control); + + if (retval) + return retval; + board->master = request_control != 0; - if (!board->interface->request_system_control) { - pr_err("gpib: bug! driver does not implement request_system_control()\n"); - return; - } - board->interface->request_system_control(board, request_control); + + return 0; } /* * IBSRE * Send REN true if v is non-zero or false if v is zero. */ -int ibsre(gpib_board_t *board, int enable) +int ibsre(struct gpib_board *board, int enable) { - if (board->master == 0) { - pr_err("gpib: tried to set REN when not system controller\n"); - return -1; - } + if (board->master == 0) + return -EINVAL; board->interface->remote_enable(board, enable); /* set or clear REN */ if (!enable) @@ -477,12 +460,11 @@ int ibsre(gpib_board_t *board, int enable) * change the GPIB address of the interface board. The address * must be 0 through 30. ibonl resets the address to PAD. */ -int ibpad(gpib_board_t *board, unsigned int addr) +int ibpad(struct gpib_board *board, unsigned int addr) { - if (addr > MAX_GPIB_PRIMARY_ADDRESS) { - pr_err("gpib: invalid primary address %u\n", addr); - return -1; - } + if (addr > MAX_GPIB_PRIMARY_ADDRESS) + return -EINVAL; + board->pad = addr; if (board->online) board->interface->primary_address(board, board->pad); @@ -496,12 +478,10 @@ int ibpad(gpib_board_t *board, unsigned int addr) * The address must be 0 through 30, or negative disables. ibonl resets the * address to SAD. */ -int ibsad(gpib_board_t *board, int addr) +int ibsad(struct gpib_board *board, int addr) { - if (addr > MAX_GPIB_SECONDARY_ADDRESS) { - pr_err("gpib: invalid secondary address %i\n", addr); - return -1; - } + if (addr > MAX_GPIB_SECONDARY_ADDRESS) + return -EINVAL; board->sad = addr; if (board->online) { if (board->sad >= 0) @@ -519,14 +499,12 @@ int ibsad(gpib_board_t *board, int addr) * Set the end-of-string modes for I/O operations to v. * */ -int ibeos(gpib_board_t *board, int eos, int eosflags) +int ibeos(struct gpib_board *board, int eos, int eosflags) { int retval; - if (eosflags & ~EOS_MASK) { - pr_err("bad EOS modes\n"); + if (eosflags & ~EOS_MASK) return -EINVAL; - } if (eosflags & REOS) { retval = board->interface->enable_eos(board, eos, eosflags & BIN); } else { @@ -536,27 +514,28 @@ int ibeos(gpib_board_t *board, int eos, int eosflags) return retval; } -int ibstatus(gpib_board_t *board) +int ibstatus(struct gpib_board *board) { return general_ibstatus(board, NULL, 0, 0, NULL); } -int general_ibstatus(gpib_board_t *board, const gpib_status_queue_t *device, - int clear_mask, int set_mask, gpib_descriptor_t *desc) +int general_ibstatus(struct gpib_board *board, const struct gpib_status_queue *device, + int clear_mask, int set_mask, struct gpib_descriptor *desc) { int status = 0; short line_status; if (board->private_data) { status = board->interface->update_status(board, clear_mask); - /* XXX should probably stop having drivers use TIMO bit in + /* + * XXX should probably stop having drivers use TIMO bit in * board->status to avoid confusion */ status &= ~TIMO; /* get real SRQI status if we can */ if (iblines(board, &line_status) == 0) { - if ((line_status & ValidSRQ)) { - if ((line_status & BusSRQ)) + if ((line_status & VALID_SRQ)) { + if ((line_status & BUS_SRQ)) status |= SRQI; else status &= ~SRQI; @@ -587,7 +566,7 @@ int general_ibstatus(gpib_board_t *board, const gpib_status_queue_t *device, } struct wait_info { - gpib_board_t *board; + struct gpib_board *board; struct timer_list timer; int timed_out; unsigned long usec_timeout; @@ -595,7 +574,7 @@ struct wait_info { static void wait_timeout(struct timer_list *t) { - struct wait_info *winfo = from_timer(winfo, t, timer); + struct wait_info *winfo = timer_container_of(winfo, t, timer); winfo->timed_out = 1; wake_up_interruptible(&winfo->board->wait); @@ -608,10 +587,10 @@ static void init_wait_info(struct wait_info *winfo) timer_setup_on_stack(&winfo->timer, wait_timeout, 0); } -static int wait_satisfied(struct wait_info *winfo, gpib_status_queue_t *status_queue, - int wait_mask, int *status, gpib_descriptor_t *desc) +static int wait_satisfied(struct wait_info *winfo, struct gpib_status_queue *status_queue, + int wait_mask, int *status, struct gpib_descriptor *desc) { - gpib_board_t *board = winfo->board; + struct gpib_board *board = winfo->board; int temp_status; if (mutex_lock_interruptible(&board->big_gpib_mutex)) @@ -645,8 +624,8 @@ static void start_wait_timer(struct wait_info *winfo) static void remove_wait_timer(struct wait_info *winfo) { - del_timer_sync(&winfo->timer); - destroy_timer_on_stack(&winfo->timer); + timer_delete_sync(&winfo->timer); + timer_destroy_on_stack(&winfo->timer); } /* @@ -657,11 +636,11 @@ static void remove_wait_timer(struct wait_info *winfo) * If the mask is 0 then * no condition is waited for. */ -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 ibwait(struct gpib_board *board, int wait_mask, int clear_mask, int set_mask, + int *status, unsigned long usec_timeout, struct gpib_descriptor *desc) { int retval = 0; - gpib_status_queue_t *status_queue; + struct gpib_status_queue *status_queue; struct wait_info winfo; if (desc->is_board) @@ -712,15 +691,13 @@ int ibwait(gpib_board_t *board, int wait_mask, int clear_mask, int set_mask, * well as the interface board itself must be * addressed by calling ibcmd. */ -int ibwrt(gpib_board_t *board, uint8_t *buf, size_t cnt, int send_eoi, size_t *bytes_written) +int ibwrt(struct gpib_board *board, u8 *buf, size_t cnt, int send_eoi, size_t *bytes_written) { int ret = 0; int retval; - if (cnt == 0) { - pr_warn("gpib: %s() called with zero length?\n", __func__); + if (cnt == 0) return 0; - } if (board->master) { retval = ibgts(board); diff --git a/drivers/staging/gpib/common/ibsys.h b/drivers/staging/gpib/common/ibsys.h index da20971e9c7e..e5a148f513a8 100644 --- a/drivers/staging/gpib/common/ibsys.h +++ b/drivers/staging/gpib/common/ibsys.h @@ -19,13 +19,16 @@ #define MAX_GPIB_PRIMARY_ADDRESS 30 #define MAX_GPIB_SECONDARY_ADDRESS 31 -int gpib_allocate_board(gpib_board_t *board); -void gpib_deallocate_board(gpib_board_t *board); +int gpib_allocate_board(struct gpib_board *board); +void gpib_deallocate_board(struct gpib_board *board); -unsigned int num_status_bytes(const gpib_status_queue_t *dev); -int push_status_byte(gpib_board_t *board, gpib_status_queue_t *device, uint8_t poll_byte); -int pop_status_byte(gpib_board_t *board, gpib_status_queue_t *device, uint8_t *poll_byte); -gpib_status_queue_t *get_gpib_status_queue(gpib_board_t *board, unsigned int pad, int sad); -int get_serial_poll_byte(gpib_board_t *board, unsigned int pad, int sad, - unsigned int usec_timeout, uint8_t *poll_byte); -int autopoll_all_devices(gpib_board_t *board); +unsigned int num_status_bytes(const struct gpib_status_queue *dev); +int push_status_byte(struct gpib_board *board, struct gpib_status_queue *device, + u8 poll_byte); +int pop_status_byte(struct gpib_board *board, struct gpib_status_queue *device, + u8 *poll_byte); +struct gpib_status_queue *get_gpib_status_queue(struct gpib_board *board, + unsigned int pad, int sad); +int get_serial_poll_byte(struct gpib_board *board, unsigned int pad, int sad, + unsigned int usec_timeout, u8 *poll_byte); +int autopoll_all_devices(struct gpib_board *board); diff --git a/drivers/staging/gpib/eastwood/fluke_gpib.c b/drivers/staging/gpib/eastwood/fluke_gpib.c index 0304c5de4ccd..491356433249 100644 --- a/drivers/staging/gpib/eastwood/fluke_gpib.c +++ b/drivers/staging/gpib/eastwood/fluke_gpib.c @@ -7,6 +7,10 @@ * copyright: (C) 2006, 2010, 2015 Fluke Corporation ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include "fluke_gpib.h" #include "gpibP.h" @@ -20,15 +24,17 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB Driver for Fluke cda devices"); -static int fluke_attach_holdoff_all(gpib_board_t *board, const gpib_board_config_t *config); -static int fluke_attach_holdoff_end(gpib_board_t *board, const gpib_board_config_t *config); -static void fluke_detach(gpib_board_t *board); -static int fluke_config_dma(gpib_board_t *board, int output); -static irqreturn_t fluke_gpib_internal_interrupt(gpib_board_t *board); +static int fluke_attach_holdoff_all(struct gpib_board *board, + const struct gpib_board_config *config); +static int fluke_attach_holdoff_end(struct gpib_board *board, + const struct gpib_board_config *config); +static void fluke_detach(struct gpib_board *board); +static int fluke_config_dma(struct gpib_board *board, int output); +static irqreturn_t fluke_gpib_internal_interrupt(struct gpib_board *board); static struct platform_device *fluke_gpib_pdev; -static uint8_t fluke_locking_read_byte(struct nec7210_priv *nec_priv, unsigned int register_number) +static u8 fluke_locking_read_byte(struct nec7210_priv *nec_priv, unsigned int register_number) { u8 retval; unsigned long flags; @@ -39,7 +45,7 @@ static uint8_t fluke_locking_read_byte(struct nec7210_priv *nec_priv, unsigned i return retval; } -static void fluke_locking_write_byte(struct nec7210_priv *nec_priv, uint8_t byte, +static void fluke_locking_write_byte(struct nec7210_priv *nec_priv, u8 byte, unsigned int register_number) { unsigned long flags; @@ -50,7 +56,7 @@ static void fluke_locking_write_byte(struct nec7210_priv *nec_priv, uint8_t byte } // wrappers for interface functions -static int fluke_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, +static int fluke_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct fluke_priv *priv = board->private_data; @@ -58,7 +64,7 @@ static int fluke_read(gpib_board_t *board, uint8_t *buffer, size_t length, int * return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read); } -static int fluke_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fluke_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { struct fluke_priv *priv = board->private_data; @@ -66,120 +72,121 @@ static int fluke_write(gpib_board_t *board, uint8_t *buffer, size_t length, return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written); } -static int fluke_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int fluke_command(struct gpib_board *board, u8 *buffer, + size_t length, size_t *bytes_written) { struct fluke_priv *priv = board->private_data; return nec7210_command(board, &priv->nec7210_priv, buffer, length, bytes_written); } -static int fluke_take_control(gpib_board_t *board, int synchronous) +static int fluke_take_control(struct gpib_board *board, int synchronous) { struct fluke_priv *priv = board->private_data; return nec7210_take_control(board, &priv->nec7210_priv, synchronous); } -static int fluke_go_to_standby(gpib_board_t *board) +static int fluke_go_to_standby(struct gpib_board *board) { struct fluke_priv *priv = board->private_data; return nec7210_go_to_standby(board, &priv->nec7210_priv); } -static void fluke_request_system_control(gpib_board_t *board, int request_control) +static int fluke_request_system_control(struct gpib_board *board, int request_control) { struct fluke_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; - nec7210_request_system_control(board, nec_priv, request_control); + return nec7210_request_system_control(board, nec_priv, request_control); } -static void fluke_interface_clear(gpib_board_t *board, int assert) +static void fluke_interface_clear(struct gpib_board *board, int assert) { struct fluke_priv *priv = board->private_data; nec7210_interface_clear(board, &priv->nec7210_priv, assert); } -static void fluke_remote_enable(gpib_board_t *board, int enable) +static void fluke_remote_enable(struct gpib_board *board, int enable) { struct fluke_priv *priv = board->private_data; nec7210_remote_enable(board, &priv->nec7210_priv, enable); } -static int fluke_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int fluke_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct fluke_priv *priv = board->private_data; return nec7210_enable_eos(board, &priv->nec7210_priv, eos_byte, compare_8_bits); } -static void fluke_disable_eos(gpib_board_t *board) +static void fluke_disable_eos(struct gpib_board *board) { struct fluke_priv *priv = board->private_data; nec7210_disable_eos(board, &priv->nec7210_priv); } -static unsigned int fluke_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int fluke_update_status(struct gpib_board *board, unsigned int clear_mask) { struct fluke_priv *priv = board->private_data; return nec7210_update_status(board, &priv->nec7210_priv, clear_mask); } -static int fluke_primary_address(gpib_board_t *board, unsigned int address) +static int fluke_primary_address(struct gpib_board *board, unsigned int address) { struct fluke_priv *priv = board->private_data; return nec7210_primary_address(board, &priv->nec7210_priv, address); } -static int fluke_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int fluke_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct fluke_priv *priv = board->private_data; return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable); } -static int fluke_parallel_poll(gpib_board_t *board, uint8_t *result) +static int fluke_parallel_poll(struct gpib_board *board, u8 *result) { struct fluke_priv *priv = board->private_data; return nec7210_parallel_poll(board, &priv->nec7210_priv, result); } -static void fluke_parallel_poll_configure(gpib_board_t *board, uint8_t configuration) +static void fluke_parallel_poll_configure(struct gpib_board *board, u8 configuration) { struct fluke_priv *priv = board->private_data; nec7210_parallel_poll_configure(board, &priv->nec7210_priv, configuration); } -static void fluke_parallel_poll_response(gpib_board_t *board, int ist) +static void fluke_parallel_poll_response(struct gpib_board *board, int ist) { struct fluke_priv *priv = board->private_data; nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist); } -static void fluke_serial_poll_response(gpib_board_t *board, uint8_t status) +static void fluke_serial_poll_response(struct gpib_board *board, u8 status) { struct fluke_priv *priv = board->private_data; nec7210_serial_poll_response(board, &priv->nec7210_priv, status); } -static uint8_t fluke_serial_poll_status(gpib_board_t *board) +static u8 fluke_serial_poll_status(struct gpib_board *board) { struct fluke_priv *priv = board->private_data; return nec7210_serial_poll_status(board, &priv->nec7210_priv); } -static void fluke_return_to_local(gpib_board_t *board) +static void fluke_return_to_local(struct gpib_board *board) { struct fluke_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; @@ -189,39 +196,37 @@ static void fluke_return_to_local(gpib_board_t *board) write_byte(nec_priv, AUX_RTL, AUXMR); } -static int fluke_line_status(const gpib_board_t *board) +static int fluke_line_status(const struct gpib_board *board) { - int status = ValidALL; + int status = VALID_ALL; int bsr_bits; struct fluke_priv *e_priv; - struct nec7210_priv *nec_priv; e_priv = board->private_data; - nec_priv = &e_priv->nec7210_priv; bsr_bits = fluke_paged_read_byte(e_priv, BUS_STATUS, BUS_STATUS_PAGE); if ((bsr_bits & BSR_REN_BIT) == 0) - status |= BusREN; + status |= BUS_REN; if ((bsr_bits & BSR_IFC_BIT) == 0) - status |= BusIFC; + status |= BUS_IFC; if ((bsr_bits & BSR_SRQ_BIT) == 0) - status |= BusSRQ; + status |= BUS_SRQ; if ((bsr_bits & BSR_EOI_BIT) == 0) - status |= BusEOI; + status |= BUS_EOI; if ((bsr_bits & BSR_NRFD_BIT) == 0) - status |= BusNRFD; + status |= BUS_NRFD; if ((bsr_bits & BSR_NDAC_BIT) == 0) - status |= BusNDAC; + status |= BUS_NDAC; if ((bsr_bits & BSR_DAV_BIT) == 0) - status |= BusDAV; + status |= BUS_DAV; if ((bsr_bits & BSR_ATN_BIT) == 0) - status |= BusATN; + status |= BUS_ATN; return status; } -static unsigned int fluke_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int fluke_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct fluke_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; @@ -238,7 +243,7 @@ static unsigned int fluke_t1_delay(gpib_board_t *board, unsigned int nano_sec) return retval; } -static int lacs_or_read_ready(gpib_board_t *board) +static int lacs_or_read_ready(struct gpib_board *board) { const struct fluke_priv *e_priv = board->private_data; const struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; @@ -251,10 +256,11 @@ static int lacs_or_read_ready(gpib_board_t *board) return retval; } -/* Wait until it is possible for a read to do something useful. This +/* + * Wait until it is possible for a read to do something useful. This * is not essential, it only exists to prevent RFD holdoff from being released pointlessly. */ -static int wait_for_read(gpib_board_t *board) +static int wait_for_read(struct gpib_board *board) { struct fluke_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; @@ -263,9 +269,9 @@ static int wait_for_read(gpib_board_t *board) if (wait_event_interruptible(board->wait, lacs_or_read_ready(board) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || - test_bit(TIMO_NUM, &board->status))) { + test_bit(TIMO_NUM, &board->status))) retval = -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) retval = -ETIMEDOUT; if (test_and_clear_bit(DEV_CLEAR_BN, &nec_priv->state)) @@ -273,7 +279,8 @@ static int wait_for_read(gpib_board_t *board) return retval; } -/* Check if the SH state machine is in SGNS. We check twice since there is a very small chance +/* + * Check if the SH state machine is in SGNS. We check twice since there is a very small chance * we could be blowing through SGNS from SIDS to SDYS if there is already a * byte available in the handshake state machine. We are interested * in the case where the handshake is stuck in SGNS due to no byte being @@ -307,38 +314,35 @@ static int source_handshake_is_sids_or_sgns(struct fluke_priv *e_priv) (source_handshake_bits == SOURCE_HANDSHAKE_SIDS_BITS); } -/* Wait until the gpib chip is ready to accept a data out byte. +/* + * Wait until the gpib chip is ready to accept a data out byte. * If the chip is SGNS it is probably waiting for a a byte to * be written to it. */ -static int wait_for_data_out_ready(gpib_board_t *board) +static int wait_for_data_out_ready(struct gpib_board *board) { struct fluke_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; int retval = 0; -// printk("%s: enter\n", __FUNCTION__); if (wait_event_interruptible(board->wait, (test_bit(TACS_NUM, &board->status) && source_handshake_is_sgns(e_priv)) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || - test_bit(TIMO_NUM, &board->status))) { + test_bit(TIMO_NUM, &board->status))) retval = -ERESTARTSYS; - } if (test_bit(TIMO_NUM, &board->status)) retval = -ETIMEDOUT; if (test_and_clear_bit(DEV_CLEAR_BN, &nec_priv->state)) retval = -EINTR; -// printk("%s: exit, retval=%i\n", __FUNCTION__, retval); return retval; } -static int wait_for_sids_or_sgns(gpib_board_t *board) +static int wait_for_sids_or_sgns(struct gpib_board *board) { struct fluke_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; int retval = 0; -// printk("%s: enter\n", __FUNCTION__); if (wait_event_interruptible(board->wait, source_handshake_is_sids_or_sgns(e_priv) || @@ -350,19 +354,17 @@ static int wait_for_sids_or_sgns(gpib_board_t *board) retval = -ETIMEDOUT; if (test_and_clear_bit(DEV_CLEAR_BN, &nec_priv->state)) retval = -EINTR; -// printk("%s: exit, retval=%i\n", __FUNCTION__, retval); return retval; } static void fluke_dma_callback(void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct fluke_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; unsigned long flags; spin_lock_irqsave(&board->spinlock, flags); -// printk("%s: enter\n", __FUNCTION__); nec7210_set_reg_bits(nec_priv, IMR1, HR_DOIE | HR_DIIE, HR_DOIE | HR_DIIE); wake_up_interruptible(&board->wait); @@ -370,11 +372,11 @@ static void fluke_dma_callback(void *arg) fluke_gpib_internal_interrupt(board); clear_bit(DMA_WRITE_IN_PROGRESS_BN, &nec_priv->state); clear_bit(DMA_READ_IN_PROGRESS_BN, &nec_priv->state); -// printk("%s: exit\n", __FUNCTION__); + spin_unlock_irqrestore(&board->spinlock, flags); } -static int fluke_dma_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fluke_dma_write(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written) { struct fluke_priv *e_priv = board->private_data; @@ -385,7 +387,7 @@ static int fluke_dma_write(gpib_board_t *board, uint8_t *buffer, size_t length, struct dma_async_tx_descriptor *tx_desc; *bytes_written = 0; -// printk("%s: enter\n", __FUNCTION__); + if (WARN_ON_ONCE(length > e_priv->dma_buffer_size)) return -EFAULT; dmaengine_terminate_all(e_priv->dma_channel); @@ -403,7 +405,7 @@ static int fluke_dma_write(gpib_board_t *board, uint8_t *buffer, size_t length, tx_desc = dmaengine_prep_slave_single(e_priv->dma_channel, address, length, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!tx_desc) { - pr_err("fluke_gpib: failed to allocate dma transmit descriptor\n"); + dev_err(board->gpib_dev, "failed to allocate dma transmit descriptor\n"); retval = -ENOMEM; goto cleanup; } @@ -419,10 +421,8 @@ static int fluke_dma_write(gpib_board_t *board, uint8_t *buffer, size_t length, clear_bit(WRITE_READY_BN, &nec_priv->state); set_bit(DMA_WRITE_IN_PROGRESS_BN, &nec_priv->state); - // printk("%s: in spin lock\n", __FUNCTION__); spin_unlock_irqrestore(&board->spinlock, flags); -// printk("%s: waiting for write.\n", __FUNCTION__); // suspend until message is sent if (wait_event_interruptible(board->wait, ((readl(e_priv->write_transfer_counter) & @@ -430,7 +430,6 @@ static int fluke_dma_write(gpib_board_t *board, uint8_t *buffer, size_t length, test_bit(BUS_ERROR_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib write interrupted!\n"); retval = -ERESTARTSYS; } if (test_bit(TIMO_NUM, &board->status)) @@ -447,7 +446,8 @@ static int fluke_dma_write(gpib_board_t *board, uint8_t *buffer, size_t length, if (test_bit(DMA_WRITE_IN_PROGRESS_BN, &nec_priv->state)) fluke_dma_callback(board); - /* if everything went fine, try to wait until last byte is actually + /* + * if everything went fine, try to wait until last byte is actually * transmitted across gpib (but don't try _too_ hard) */ if (retval == 0) @@ -459,11 +459,10 @@ static int fluke_dma_write(gpib_board_t *board, uint8_t *buffer, size_t length, cleanup: dma_unmap_single(board->dev, address, length, DMA_TO_DEVICE); -// printk("%s: exit, retval=%d\n", __FUNCTION__, retval); return retval; } -static int fluke_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fluke_accel_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { struct fluke_priv *e_priv = board->private_data; @@ -474,7 +473,7 @@ static int fluke_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length size_t dma_remainder = remainder; if (!e_priv->dma_channel) { - pr_err("fluke_gpib: No dma channel available, cannot do accel write."); + dev_err(board->gpib_dev, "No dma channel available, cannot do accel write."); return -ENXIO; } @@ -486,7 +485,6 @@ static int fluke_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length if (send_eoi) --dma_remainder; -// printk("%s: entering while loop\n", __FUNCTION__); while (dma_remainder > 0) { size_t num_bytes; @@ -512,11 +510,12 @@ static int fluke_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length //handle sending of last byte with eoi if (send_eoi) { size_t num_bytes; - // printk("%s: handling last byte\n", __FUNCTION__); + if (WARN_ON_ONCE(remainder != 1)) return -EFAULT; - /* wait until we are sure we will be able to write the data byte + /* + * wait until we are sure we will be able to write the data byte * into the chip before we send AUX_SEOI. This prevents a timeout * scenerio where we send AUX_SEOI but then timeout without getting * any bytes into the gpib chip. This will result in the first byte @@ -533,7 +532,6 @@ static int fluke_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length return retval; remainder -= num_bytes; } -// printk("%s: bytes send=%i\n", __FUNCTION__, (int)(length - remainder)); return 0; } @@ -544,16 +542,18 @@ static int fluke_get_dma_residue(struct dma_chan *chan, dma_cookie_t cookie) result = dmaengine_pause(chan); if (result < 0) { - pr_err("fluke_gpib: dma pause failed?\n"); + pr_err("dma pause failed?\n"); return result; } dmaengine_tx_status(chan, cookie, &state); - // hardware doesn't support resume, so dont call this - // method unless the dma transfer is done. + /* + * hardware doesn't support resume, so dont call this + * method unless the dma transfer is done. + */ return state.residue; } -static int fluke_dma_read(gpib_board_t *board, uint8_t *buffer, +static int fluke_dma_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct fluke_priv *e_priv = board->private_data; @@ -567,10 +567,6 @@ static int fluke_dma_read(gpib_board_t *board, uint8_t *buffer, int i; static const int timeout = 10; - // printk("%s: enter, bus_address=0x%x, length=%i\n", __FUNCTION__, - // (unsigned)bus_address, - // (int)length); - *bytes_read = 0; *end = 0; if (length == 0) @@ -589,7 +585,7 @@ static int fluke_dma_read(gpib_board_t *board, uint8_t *buffer, bus_address, length, DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!tx_desc) { - pr_err("fluke_gpib: failed to allocate dma transmit descriptor\n"); + dev_err(board->gpib_dev, "failed to allocate dma transmit descriptor\n"); dma_unmap_single(NULL, bus_address, length, DMA_FROM_DEVICE); return -EIO; } @@ -608,14 +604,12 @@ static int fluke_dma_read(gpib_board_t *board, uint8_t *buffer, clear_bit(READ_READY_BN, &nec_priv->state); spin_unlock_irqrestore(&board->spinlock, flags); -// printk("waiting for data transfer.\n"); // wait for data to transfer if (wait_event_interruptible(board->wait, test_bit(DMA_READ_IN_PROGRESS_BN, &nec_priv->state) == 0 || test_bit(RECEIVED_END_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - pr_warn("fluke: dma read wait interrupted\n"); retval = -ERESTARTSYS; } if (test_bit(TIMO_NUM, &board->status)) @@ -623,7 +617,8 @@ static int fluke_dma_read(gpib_board_t *board, uint8_t *buffer, if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) retval = -EINTR; - /* If we woke up because of end, wait until the dma transfer has pulled + /* + * If we woke up because of end, wait until the dma transfer has pulled * the data byte associated with the end before we cancel the dma transfer. */ if (test_bit(RECEIVED_END_BN, &nec_priv->state)) { @@ -640,7 +635,8 @@ static int fluke_dma_read(gpib_board_t *board, uint8_t *buffer, // stop the dma transfer nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAI, 0); - /* delay a little just to make sure any bytes in dma controller's fifo get + /* + * delay a little just to make sure any bytes in dma controller's fifo get * written to memory before we disable it */ usleep_range(10, 15); @@ -656,14 +652,17 @@ static int fluke_dma_read(gpib_board_t *board, uint8_t *buffer, dma_unmap_single(board->dev, bus_address, length, DMA_FROM_DEVICE); memcpy(buffer, e_priv->dma_buffer, *bytes_read); - /* If we got an end interrupt, figure out if it was + /* + * If we got an end interrupt, figure out if it was * associated with the last byte we dma'd or with a * byte still sitting on the cb7210. */ spin_lock_irqsave(&board->spinlock, flags); if (test_bit(READ_READY_BN, &nec_priv->state) == 0) { - // There is no byte sitting on the cb7210. If we - // saw an end interrupt, we need to deal with it now + /* + * There is no byte sitting on the cb7210. If we + * saw an end interrupt, we need to deal with it now + */ if (test_and_clear_bit(RECEIVED_END_BN, &nec_priv->state)) *end = 1; } @@ -672,7 +671,7 @@ static int fluke_dma_read(gpib_board_t *board, uint8_t *buffer, return retval; } -static int fluke_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fluke_accel_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct fluke_priv *e_priv = board->private_data; @@ -682,10 +681,6 @@ static int fluke_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int retval = 0; size_t dma_nbytes; -/* printk("%s: enter, buffer=0x%p, length=%i\n", __FUNCTION__, - * buffer, (int)length); - * printk("\t dma_buffer=0x%p\n", e_priv->dma_buffer); - */ *end = 0; *bytes_read = 0; @@ -699,7 +694,6 @@ static int fluke_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, nec7210_release_rfd_holdoff(board, nec_priv); -// printk("%s: entering while loop\n", __FUNCTION__); while (remain > 0) { transfer_size = (e_priv->dma_buffer_size < remain) ? e_priv->dma_buffer_size : remain; @@ -709,18 +703,16 @@ static int fluke_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, *bytes_read += dma_nbytes; if (*end) break; - if (retval < 0) { -// printk("%s: early exit, retval=%i\n", __FUNCTION__, (int)retval); + if (retval < 0) return retval; - } if (need_resched()) schedule(); } -// printk("%s: exit, retval=%i\n", __FUNCTION__, (int)retval); + return retval; } -static gpib_interface_t fluke_unaccel_interface = { +static struct gpib_interface fluke_unaccel_interface = { .name = "fluke_unaccel", .attach = fluke_attach_holdoff_all, .detach = fluke_detach, @@ -747,7 +739,8 @@ static gpib_interface_t fluke_unaccel_interface = { .return_to_local = fluke_return_to_local, }; -/* fluke_hybrid uses dma for writes but not for reads. Added +/* + * fluke_hybrid uses dma for writes but not for reads. Added * to deal with occasional corruption of bytes seen when doing dma * reads. From looking at the cb7210 vhdl, I believe the corruption * is due to a hardware bug triggered by the cpu reading a cb7210 @@ -755,7 +748,7 @@ static gpib_interface_t fluke_unaccel_interface = { * register just as the dma controller is also doing a read. */ -static gpib_interface_t fluke_hybrid_interface = { +static struct gpib_interface fluke_hybrid_interface = { .name = "fluke_hybrid", .attach = fluke_attach_holdoff_all, .detach = fluke_detach, @@ -782,7 +775,7 @@ static gpib_interface_t fluke_hybrid_interface = { .return_to_local = fluke_return_to_local, }; -static gpib_interface_t fluke_interface = { +static struct gpib_interface fluke_interface = { .name = "fluke", .attach = fluke_attach_holdoff_end, .detach = fluke_detach, @@ -809,7 +802,7 @@ static gpib_interface_t fluke_interface = { .return_to_local = fluke_return_to_local, }; -irqreturn_t fluke_gpib_internal_interrupt(gpib_board_t *board) +irqreturn_t fluke_gpib_internal_interrupt(struct gpib_board *board) { int status0, status1, status2; struct fluke_priv *priv = board->private_data; @@ -824,19 +817,12 @@ irqreturn_t fluke_gpib_internal_interrupt(gpib_board_t *board) status2 = read_byte(nec_priv, ISR2); if (status0 & FLUKE_IFCI_BIT) { - push_gpib_event(board, EventIFC); + push_gpib_event(board, EVENT_IFC); retval = IRQ_HANDLED; } if (nec7210_interrupt_have_status(board, nec_priv, status1, status2) == IRQ_HANDLED) retval = IRQ_HANDLED; -/* - * if((status1 & nec_priv->reg_bits[IMR1]) || - * (status2 & (nec_priv->reg_bits[IMR2] & IMR2_ENABLE_INTR_MASK))) - * { - * printk("fluke: status1 0x%x, status2 0x%x\n", status1, status2); - * } - */ if (read_byte(nec_priv, ADR0) & DATA_IN_STATUS) { if (test_bit(RFD_HOLDOFF_BN, &nec_priv->state)) @@ -853,7 +839,7 @@ irqreturn_t fluke_gpib_internal_interrupt(gpib_board_t *board) static irqreturn_t fluke_gpib_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; unsigned long flags; irqreturn_t retval; @@ -863,7 +849,7 @@ static irqreturn_t fluke_gpib_interrupt(int irq, void *arg) return retval; } -static int fluke_allocate_private(gpib_board_t *board) +static int fluke_allocate_private(struct gpib_board *board) { struct fluke_priv *priv; @@ -880,7 +866,7 @@ static int fluke_allocate_private(gpib_board_t *board) return 0; } -static void fluke_generic_detach(gpib_board_t *board) +static void fluke_generic_detach(struct gpib_board *board) { if (board->private_data) { struct fluke_priv *e_priv = board->private_data; @@ -892,7 +878,7 @@ static void fluke_generic_detach(gpib_board_t *board) } // generic part of attach functions shared by all cb7210 boards -static int fluke_generic_attach(gpib_board_t *board) +static int fluke_generic_attach(struct gpib_board *board) { struct fluke_priv *e_priv; struct nec7210_priv *nec_priv; @@ -912,7 +898,7 @@ static int fluke_generic_attach(gpib_board_t *board) return 0; } -static int fluke_config_dma(gpib_board_t *board, int output) +static int fluke_config_dma(struct gpib_board *board, int output) { struct fluke_priv *e_priv = board->private_data; struct dma_slave_config config; @@ -937,13 +923,14 @@ static int fluke_config_dma(gpib_board_t *board, int output) return dmaengine_slave_config(e_priv->dma_channel, &config); } -static int fluke_init(struct fluke_priv *e_priv, gpib_board_t *board, int handshake_mode) +static int fluke_init(struct fluke_priv *e_priv, struct gpib_board *board, int handshake_mode) { struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; nec7210_board_reset(nec_priv, board); write_byte(nec_priv, AUX_LO_SPEED, AUXMR); - /* set clock register for driving frequency + /* + * set clock register for driving frequency * ICR should be set to clock in megahertz (1-15) and to zero * for clocks faster than 15 MHz (max 20MHz) */ @@ -954,7 +941,7 @@ static int fluke_init(struct fluke_priv *e_priv, gpib_board_t *board, int handsh /* poll so we can detect ATN changes */ if (gpib_request_pseudo_irq(board, fluke_gpib_interrupt)) { - pr_err("fluke_gpib: failed to allocate pseudo_irq\n"); + dev_err(board->gpib_dev, "failed to allocate pseudo_irq\n"); return -EINVAL; } @@ -962,7 +949,8 @@ static int fluke_init(struct fluke_priv *e_priv, gpib_board_t *board, int handsh return 0; } -/* This function is passed to dma_request_channel() in order to +/* + * This function is passed to dma_request_channel() in order to * select the pl330 dma channel which has been hardwired to * the gpib controller. */ @@ -972,7 +960,7 @@ static bool gpib_dma_channel_filter(struct dma_chan *chan, void *filter_param) return chan->chan_id == 0; } -static int fluke_attach_impl(gpib_board_t *board, const gpib_board_config_t *config, +static int fluke_attach_impl(struct gpib_board *board, const struct gpib_board_config *config, unsigned int handshake_mode) { struct fluke_priv *e_priv; @@ -984,7 +972,7 @@ static int fluke_attach_impl(gpib_board_t *board, const gpib_board_config_t *con dma_cap_mask_t dma_cap; if (!fluke_gpib_pdev) { - pr_err("No gpib platform device was found, attach failed.\n"); + dev_err(board->gpib_dev, "No fluke device was found, attach failed.\n"); return -ENODEV; } @@ -999,7 +987,7 @@ static int fluke_attach_impl(gpib_board_t *board, const gpib_board_config_t *con res = platform_get_resource(fluke_gpib_pdev, IORESOURCE_MEM, 0); if (!res) { - dev_err(&fluke_gpib_pdev->dev, "Unable to locate mmio resource for cb7210 gpib\n"); + dev_err(&fluke_gpib_pdev->dev, "Unable to locate mmio resource\n"); return -ENODEV; } @@ -1012,10 +1000,7 @@ static int fluke_attach_impl(gpib_board_t *board, const gpib_board_config_t *con e_priv->gpib_iomem_res = res; nec_priv->mmiobase = ioremap(e_priv->gpib_iomem_res->start, - resource_size(e_priv->gpib_iomem_res)); - pr_info("gpib: mmiobase %llx remapped to %p, length=%d\n", - (u64)e_priv->gpib_iomem_res->start, - nec_priv->mmiobase, (int)resource_size(e_priv->gpib_iomem_res)); + resource_size(e_priv->gpib_iomem_res)); if (!nec_priv->mmiobase) { dev_err(&fluke_gpib_pdev->dev, "Could not map I/O memory\n"); return -ENOMEM; @@ -1050,21 +1035,14 @@ static int fluke_attach_impl(gpib_board_t *board, const gpib_board_config_t *con e_priv->write_transfer_counter = ioremap(e_priv->write_transfer_counter_res->start, resource_size(e_priv->write_transfer_counter_res)); - pr_info("gpib: write transfer counter %lx remapped to %p, length=%d\n", - (unsigned long)e_priv->write_transfer_counter_res->start, - e_priv->write_transfer_counter, - (int)resource_size(e_priv->write_transfer_counter_res)); if (!e_priv->write_transfer_counter) { dev_err(&fluke_gpib_pdev->dev, "Could not map I/O memory\n"); return -ENOMEM; } irq = platform_get_irq(fluke_gpib_pdev, 0); - pr_info("gpib: irq %d\n", irq); - if (irq < 0) { - dev_err(&fluke_gpib_pdev->dev, "fluke_gpib: request for IRQ failed\n"); + if (irq < 0) return -EBUSY; - } retval = request_irq(irq, fluke_gpib_interrupt, isr_flags, fluke_gpib_pdev->name, board); if (retval) { dev_err(&fluke_gpib_pdev->dev, @@ -1078,25 +1056,27 @@ static int fluke_attach_impl(gpib_board_t *board, const gpib_board_config_t *con dma_cap_set(DMA_SLAVE, dma_cap); e_priv->dma_channel = dma_request_channel(dma_cap, gpib_dma_channel_filter, NULL); if (!e_priv->dma_channel) { - pr_err("fluke_gpib: failed to allocate a dma channel.\n"); - // we don't error out here because unaccel interface will still - // work without dma + dev_err(board->gpib_dev, "failed to allocate a dma channel.\n"); + /* + * we don't error out here because unaccel interface will still + * work without dma + */ } return fluke_init(e_priv, board, handshake_mode); } -int fluke_attach_holdoff_all(gpib_board_t *board, const gpib_board_config_t *config) +int fluke_attach_holdoff_all(struct gpib_board *board, const struct gpib_board_config *config) { return fluke_attach_impl(board, config, HR_HLDA); } -int fluke_attach_holdoff_end(gpib_board_t *board, const gpib_board_config_t *config) +int fluke_attach_holdoff_end(struct gpib_board *board, const struct gpib_board_config *config) { return fluke_attach_impl(board, config, HR_HLDE); } -void fluke_detach(gpib_board_t *board) +void fluke_detach(struct gpib_board *board) { struct fluke_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1142,8 +1122,7 @@ MODULE_DEVICE_TABLE(of, fluke_gpib_of_match); static struct platform_driver fluke_gpib_platform_driver = { .driver = { - .name = "fluke_gpib", - .owner = THIS_MODULE, + .name = DRV_NAME, .of_match_table = fluke_gpib_of_match, }, .probe = &fluke_gpib_probe @@ -1155,25 +1134,25 @@ static int __init fluke_init_module(void) result = platform_driver_register(&fluke_gpib_platform_driver); if (result) { - pr_err("fluke_gpib: platform_driver_register failed: error = %d\n", result); + pr_err("platform_driver_register failed: error = %d\n", result); return result; } result = gpib_register_driver(&fluke_unaccel_interface, THIS_MODULE); if (result) { - pr_err("fluke_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_unaccel; } result = gpib_register_driver(&fluke_hybrid_interface, THIS_MODULE); if (result) { - pr_err("fluke_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_hybrid; } result = gpib_register_driver(&fluke_interface, THIS_MODULE); if (result) { - pr_err("fluke_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_interface; } diff --git a/drivers/staging/gpib/eastwood/fluke_gpib.h b/drivers/staging/gpib/eastwood/fluke_gpib.h index 3e4348196b42..493c200d0bbf 100644 --- a/drivers/staging/gpib/eastwood/fluke_gpib.h +++ b/drivers/staging/gpib/eastwood/fluke_gpib.h @@ -55,8 +55,10 @@ enum state1_bits { SOURCE_HANDSHAKE_MASK = 0x7 }; -// we customized the cb7210 vhdl to give the "data in" status -// on the unused bit 7 of the address0 register. +/* + * we customized the cb7210 vhdl to give the "data in" status + * on the unused bit 7 of the address0 register. + */ enum cb7210_address0 { DATA_IN_STATUS = 0x80 }; @@ -67,8 +69,8 @@ static inline int cb7210_page_in_bits(unsigned int page) } // don't use without locking nec_priv->register_page_lock -static inline uint8_t fluke_read_byte_nolock(struct nec7210_priv *nec_priv, - int register_num) +static inline u8 fluke_read_byte_nolock(struct nec7210_priv *nec_priv, + int register_num) { u8 retval; @@ -77,14 +79,14 @@ static inline uint8_t fluke_read_byte_nolock(struct nec7210_priv *nec_priv, } // don't use without locking nec_priv->register_page_lock -static inline void fluke_write_byte_nolock(struct nec7210_priv *nec_priv, uint8_t data, +static inline void fluke_write_byte_nolock(struct nec7210_priv *nec_priv, u8 data, int register_num) { writel(data, nec_priv->mmiobase + register_num * nec_priv->offset); } -static inline uint8_t fluke_paged_read_byte(struct fluke_priv *e_priv, - unsigned int register_num, unsigned int page) +static inline u8 fluke_paged_read_byte(struct fluke_priv *e_priv, + unsigned int register_num, unsigned int page) { struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; u8 retval; @@ -99,7 +101,7 @@ static inline uint8_t fluke_paged_read_byte(struct fluke_priv *e_priv, return retval; } -static inline void fluke_paged_write_byte(struct fluke_priv *e_priv, uint8_t data, +static inline void fluke_paged_write_byte(struct fluke_priv *e_priv, u8 data, unsigned int register_num, unsigned int page) { struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; @@ -124,11 +126,12 @@ enum bus_status_bits { }; enum cb7210_aux_cmds { -/* AUX_RTL2 is an undocumented aux command which causes cb7210 to assert - * (and keep asserted) local rtl message. This is used in conjunction - * with the (stupid) cb7210 implementation - * of the normal nec7210 AUX_RTL aux command, which - * causes the rtl message to toggle between on and off. +/* + * AUX_RTL2 is an undocumented aux command which causes cb7210 to assert + * (and keep asserted) local rtl message. This is used in conjunction + * with the (stupid) cb7210 implementation + * of the normal nec7210 AUX_RTL aux command, which + * causes the rtl message to toggle between on and off. */ AUX_RTL2 = 0xd, AUX_NBAF = 0xe, // new byte available false (also clears seoi) diff --git a/drivers/staging/gpib/fmh_gpib/fmh_gpib.c b/drivers/staging/gpib/fmh_gpib/fmh_gpib.c index f950e7cdd8f8..4138f3d2bae7 100644 --- a/drivers/staging/gpib/fmh_gpib/fmh_gpib.c +++ b/drivers/staging/gpib/fmh_gpib/fmh_gpib.c @@ -12,6 +12,10 @@ * (C) 2017 Frank Mori Hess ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include "fmh_gpib.h" #include "gpibP.h" @@ -28,19 +32,23 @@ MODULE_DESCRIPTION("GPIB Driver for fmh_gpib_core"); MODULE_AUTHOR("Frank Mori Hess <fmh6jj@gmail.com>"); static irqreturn_t fmh_gpib_interrupt(int irq, void *arg); -static int fmh_gpib_attach_holdoff_all(gpib_board_t *board, const gpib_board_config_t *config); -static int fmh_gpib_attach_holdoff_end(gpib_board_t *board, const gpib_board_config_t *config); -static void fmh_gpib_detach(gpib_board_t *board); -static int fmh_gpib_pci_attach_holdoff_all(gpib_board_t *board, const gpib_board_config_t *config); -static int fmh_gpib_pci_attach_holdoff_end(gpib_board_t *board, const gpib_board_config_t *config); -static void fmh_gpib_pci_detach(gpib_board_t *board); -static int fmh_gpib_config_dma(gpib_board_t *board, int output); -static irqreturn_t fmh_gpib_internal_interrupt(gpib_board_t *board); +static int fmh_gpib_attach_holdoff_all(struct gpib_board *board, + const struct gpib_board_config *config); +static int fmh_gpib_attach_holdoff_end(struct gpib_board *board, + const struct gpib_board_config *config); +static void fmh_gpib_detach(struct gpib_board *board); +static int fmh_gpib_pci_attach_holdoff_all(struct gpib_board *board, + const struct gpib_board_config *config); +static int fmh_gpib_pci_attach_holdoff_end(struct gpib_board *board, + const struct gpib_board_config *config); +static void fmh_gpib_pci_detach(struct gpib_board *board); +static int fmh_gpib_config_dma(struct gpib_board *board, int output); +static irqreturn_t fmh_gpib_internal_interrupt(struct gpib_board *board); static struct platform_driver fmh_gpib_platform_driver; static struct pci_driver fmh_gpib_pci_driver; // wrappers for interface functions -static int fmh_gpib_read(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fmh_gpib_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct fmh_priv *priv = board->private_data; @@ -48,7 +56,7 @@ static int fmh_gpib_read(gpib_board_t *board, uint8_t *buffer, size_t length, return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read); } -static int fmh_gpib_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fmh_gpib_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { struct fmh_priv *priv = board->private_data; @@ -56,7 +64,7 @@ static int fmh_gpib_write(gpib_board_t *board, uint8_t *buffer, size_t length, return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written); } -static int fmh_gpib_command(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fmh_gpib_command(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written) { struct fmh_priv *priv = board->private_data; @@ -64,106 +72,107 @@ static int fmh_gpib_command(gpib_board_t *board, uint8_t *buffer, size_t length, return nec7210_command(board, &priv->nec7210_priv, buffer, length, bytes_written); } -static int fmh_gpib_take_control(gpib_board_t *board, int synchronous) +static int fmh_gpib_take_control(struct gpib_board *board, int synchronous) { struct fmh_priv *priv = board->private_data; return nec7210_take_control(board, &priv->nec7210_priv, synchronous); } -static int fmh_gpib_go_to_standby(gpib_board_t *board) +static int fmh_gpib_go_to_standby(struct gpib_board *board) { struct fmh_priv *priv = board->private_data; return nec7210_go_to_standby(board, &priv->nec7210_priv); } -static void fmh_gpib_request_system_control(gpib_board_t *board, int request_control) +static int fmh_gpib_request_system_control(struct gpib_board *board, int request_control) { struct fmh_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; - nec7210_request_system_control(board, nec_priv, request_control); + return nec7210_request_system_control(board, nec_priv, request_control); } -static void fmh_gpib_interface_clear(gpib_board_t *board, int assert) +static void fmh_gpib_interface_clear(struct gpib_board *board, int assert) { struct fmh_priv *priv = board->private_data; nec7210_interface_clear(board, &priv->nec7210_priv, assert); } -static void fmh_gpib_remote_enable(gpib_board_t *board, int enable) +static void fmh_gpib_remote_enable(struct gpib_board *board, int enable) { struct fmh_priv *priv = board->private_data; nec7210_remote_enable(board, &priv->nec7210_priv, enable); } -static int fmh_gpib_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int fmh_gpib_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct fmh_priv *priv = board->private_data; return nec7210_enable_eos(board, &priv->nec7210_priv, eos_byte, compare_8_bits); } -static void fmh_gpib_disable_eos(gpib_board_t *board) +static void fmh_gpib_disable_eos(struct gpib_board *board) { struct fmh_priv *priv = board->private_data; nec7210_disable_eos(board, &priv->nec7210_priv); } -static unsigned int fmh_gpib_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int fmh_gpib_update_status(struct gpib_board *board, unsigned int clear_mask) { struct fmh_priv *priv = board->private_data; return nec7210_update_status(board, &priv->nec7210_priv, clear_mask); } -static int fmh_gpib_primary_address(gpib_board_t *board, unsigned int address) +static int fmh_gpib_primary_address(struct gpib_board *board, unsigned int address) { struct fmh_priv *priv = board->private_data; return nec7210_primary_address(board, &priv->nec7210_priv, address); } -static int fmh_gpib_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int fmh_gpib_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct fmh_priv *priv = board->private_data; return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable); } -static int fmh_gpib_parallel_poll(gpib_board_t *board, uint8_t *result) +static int fmh_gpib_parallel_poll(struct gpib_board *board, u8 *result) { struct fmh_priv *priv = board->private_data; return nec7210_parallel_poll(board, &priv->nec7210_priv, result); } -static void fmh_gpib_parallel_poll_configure(gpib_board_t *board, uint8_t configuration) +static void fmh_gpib_parallel_poll_configure(struct gpib_board *board, u8 configuration) { struct fmh_priv *priv = board->private_data; nec7210_parallel_poll_configure(board, &priv->nec7210_priv, configuration); } -static void fmh_gpib_parallel_poll_response(gpib_board_t *board, int ist) +static void fmh_gpib_parallel_poll_response(struct gpib_board *board, int ist) { struct fmh_priv *priv = board->private_data; nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist); } -static void fmh_gpib_local_parallel_poll_mode(gpib_board_t *board, int local) +static void fmh_gpib_local_parallel_poll_mode(struct gpib_board *board, int local) { struct fmh_priv *priv = board->private_data; if (local) { write_byte(&priv->nec7210_priv, AUX_I_REG | LOCAL_PPOLL_MODE_BIT, AUXMR); } else { - /* For fmh_gpib_core, remote parallel poll config mode is unaffected by the + /* + * For fmh_gpib_core, remote parallel poll config mode is unaffected by the * state of the disable bit of the parallel poll register (unlike the tnt4882). * So, we don't need to worry about that. */ @@ -171,7 +180,7 @@ static void fmh_gpib_local_parallel_poll_mode(gpib_board_t *board, int local) } } -static void fmh_gpib_serial_poll_response2(gpib_board_t *board, uint8_t status, +static void fmh_gpib_serial_poll_response2(struct gpib_board *board, u8 status, int new_reason_for_service) { struct fmh_priv *priv = board->private_data; @@ -189,7 +198,8 @@ static void fmh_gpib_serial_poll_response2(gpib_board_t *board, uint8_t status, } if (reqt) { - /* It may seem like a race to issue reqt before updating + /* + * It may seem like a race to issue reqt before updating * the status byte, but it is not. The chip does not * issue the reqt until the SPMR is written to at * a later time. @@ -198,7 +208,8 @@ static void fmh_gpib_serial_poll_response2(gpib_board_t *board, uint8_t status, } else if (reqf) { write_byte(&priv->nec7210_priv, AUX_REQF, AUXMR); } - /* We need to always zero bit 6 of the status byte before writing it to + /* + * We need to always zero bit 6 of the status byte before writing it to * the SPMR to insure we are using * serial poll mode SP1, and not accidentally triggering mode SP3. */ @@ -206,14 +217,14 @@ static void fmh_gpib_serial_poll_response2(gpib_board_t *board, uint8_t status, spin_unlock_irqrestore(&board->spinlock, flags); } -static uint8_t fmh_gpib_serial_poll_status(gpib_board_t *board) +static u8 fmh_gpib_serial_poll_status(struct gpib_board *board) { struct fmh_priv *priv = board->private_data; return nec7210_serial_poll_status(board, &priv->nec7210_priv); } -static void fmh_gpib_return_to_local(gpib_board_t *board) +static void fmh_gpib_return_to_local(struct gpib_board *board) { struct fmh_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; @@ -223,9 +234,9 @@ static void fmh_gpib_return_to_local(gpib_board_t *board) write_byte(nec_priv, AUX_RTL, AUXMR); } -static int fmh_gpib_line_status(const gpib_board_t *board) +static int fmh_gpib_line_status(const struct gpib_board *board) { - int status = ValidALL; + int status = VALID_ALL; int bsr_bits; struct fmh_priv *e_priv; struct nec7210_priv *nec_priv; @@ -236,26 +247,26 @@ static int fmh_gpib_line_status(const gpib_board_t *board) bsr_bits = read_byte(nec_priv, BUS_STATUS_REG); if ((bsr_bits & BSR_REN_BIT) == 0) - status |= BusREN; + status |= BUS_REN; if ((bsr_bits & BSR_IFC_BIT) == 0) - status |= BusIFC; + status |= BUS_IFC; if ((bsr_bits & BSR_SRQ_BIT) == 0) - status |= BusSRQ; + status |= BUS_SRQ; if ((bsr_bits & BSR_EOI_BIT) == 0) - status |= BusEOI; + status |= BUS_EOI; if ((bsr_bits & BSR_NRFD_BIT) == 0) - status |= BusNRFD; + status |= BUS_NRFD; if ((bsr_bits & BSR_NDAC_BIT) == 0) - status |= BusNDAC; + status |= BUS_NDAC; if ((bsr_bits & BSR_DAV_BIT) == 0) - status |= BusDAV; + status |= BUS_DAV; if ((bsr_bits & BSR_ATN_BIT) == 0) - status |= BusATN; + status |= BUS_ATN; return status; } -static unsigned int fmh_gpib_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int fmh_gpib_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; @@ -272,7 +283,7 @@ static unsigned int fmh_gpib_t1_delay(gpib_board_t *board, unsigned int nano_sec return retval; } -static int lacs_or_read_ready(gpib_board_t *board) +static int lacs_or_read_ready(struct gpib_board *board) { const struct fmh_priv *e_priv = board->private_data; const struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; @@ -287,7 +298,7 @@ static int lacs_or_read_ready(gpib_board_t *board) return retval; } -static int wait_for_read(gpib_board_t *board) +static int wait_for_read(struct gpib_board *board) { struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; @@ -306,7 +317,7 @@ static int wait_for_read(gpib_board_t *board) return retval; } -static int wait_for_rx_fifo_half_full_or_end(gpib_board_t *board) +static int wait_for_rx_fifo_half_full_or_end(struct gpib_board *board) { struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; @@ -327,14 +338,14 @@ static int wait_for_rx_fifo_half_full_or_end(gpib_board_t *board) return retval; } -/* Wait until the gpib chip is ready to accept a data out byte. +/* + * Wait until the gpib chip is ready to accept a data out byte. */ -static int wait_for_data_out_ready(gpib_board_t *board) +static int wait_for_data_out_ready(struct gpib_board *board) { struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; int retval = 0; -// printk("%s: enter\n", __FUNCTION__); if (wait_event_interruptible(board->wait, (test_bit(TACS_NUM, &board->status) && @@ -348,19 +359,18 @@ static int wait_for_data_out_ready(gpib_board_t *board) retval = -ETIMEDOUT; if (test_and_clear_bit(DEV_CLEAR_BN, &nec_priv->state)) retval = -EINTR; -// printk("%s: exit, retval=%i\n", __FUNCTION__, retval); + return retval; } static void fmh_gpib_dma_callback(void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; unsigned long flags; spin_lock_irqsave(&board->spinlock, flags); -// printk("%s: enter\n", __FUNCTION__); nec7210_set_reg_bits(nec_priv, IMR1, HR_DOIE | HR_DIIE, HR_DOIE | HR_DIIE); wake_up_interruptible(&board->wait); @@ -370,11 +380,11 @@ static void fmh_gpib_dma_callback(void *arg) clear_bit(DMA_WRITE_IN_PROGRESS_BN, &nec_priv->state); clear_bit(DMA_READ_IN_PROGRESS_BN, &nec_priv->state); - // printk("%s: exit\n", __FUNCTION__); spin_unlock_irqrestore(&board->spinlock, flags); } -/* returns true when all the bytes of a write have been transferred to +/* + * returns true when all the bytes of a write have been transferred to * the chip and successfully transferred out over the gpib bus. */ static int fmh_gpib_all_bytes_are_sent(struct fmh_priv *e_priv) @@ -388,7 +398,7 @@ static int fmh_gpib_all_bytes_are_sent(struct fmh_priv *e_priv) return 1; } -static int fmh_gpib_dma_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fmh_gpib_dma_write(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written) { struct fmh_priv *e_priv = board->private_data; @@ -399,14 +409,13 @@ static int fmh_gpib_dma_write(gpib_board_t *board, uint8_t *buffer, size_t lengt struct dma_async_tx_descriptor *tx_desc; *bytes_written = 0; -// printk("%s: enter\n", __FUNCTION__); if (WARN_ON_ONCE(length > e_priv->dma_buffer_size)) return -EFAULT; dmaengine_terminate_all(e_priv->dma_channel); memcpy(e_priv->dma_buffer, buffer, length); address = dma_map_single(board->dev, e_priv->dma_buffer, length, DMA_TO_DEVICE); if (dma_mapping_error(board->dev, address)) - pr_err("dma mapping error in dma write!\n"); + dev_err(board->gpib_dev, "dma mapping error in dma write!\n"); /* program dma controller */ retval = fmh_gpib_config_dma(board, 1); if (retval) @@ -415,7 +424,7 @@ static int fmh_gpib_dma_write(gpib_board_t *board, uint8_t *buffer, size_t lengt tx_desc = dmaengine_prep_slave_single(e_priv->dma_channel, address, length, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!tx_desc) { - pr_err("fmh_gpib_gpib: failed to allocate dma transmit descriptor\n"); + dev_err(board->gpib_dev, "failed to allocate dma transmit descriptor\n"); retval = -ENOMEM; goto cleanup; } @@ -432,19 +441,17 @@ static int fmh_gpib_dma_write(gpib_board_t *board, uint8_t *buffer, size_t lengt dma_async_issue_pending(e_priv->dma_channel); clear_bit(WRITE_READY_BN, &nec_priv->state); set_bit(DMA_WRITE_IN_PROGRESS_BN, &nec_priv->state); -// printk("%s: in spin lock\n", __FUNCTION__); + spin_unlock_irqrestore(&board->spinlock, flags); -// printk("%s: waiting for write.\n", __FUNCTION__); // suspend until message is sent if (wait_event_interruptible(board->wait, fmh_gpib_all_bytes_are_sent(e_priv) || test_bit(BUS_ERROR_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib write interrupted!\n"); + test_bit(TIMO_NUM, &board->status))) retval = -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) retval = -ETIMEDOUT; if (test_and_clear_bit(DEV_CLEAR_BN, &nec_priv->state)) @@ -464,16 +471,12 @@ static int fmh_gpib_dma_write(gpib_board_t *board, uint8_t *buffer, size_t lengt fifo_xfer_counter_mask); if (WARN_ON_ONCE(*bytes_written > length)) return -EFAULT; - /* printk("length=%i, *bytes_written=%i, residue=%i, retval=%i\n", - * length, *bytes_written, get_dma_residue(e_priv->dma_channel), retval); - */ cleanup: dma_unmap_single(board->dev, address, length, DMA_TO_DEVICE); -// printk("%s: exit, retval=%d\n", __FUNCTION__, retval); return retval; } -static int fmh_gpib_accel_write(gpib_board_t *board, uint8_t *buffer, +static int fmh_gpib_accel_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { struct fmh_priv *e_priv = board->private_data; @@ -484,7 +487,7 @@ static int fmh_gpib_accel_write(gpib_board_t *board, uint8_t *buffer, size_t dma_remainder = remainder; if (!e_priv->dma_channel) { - pr_err("fmh_gpib_gpib: No dma channel available, cannot do accel write."); + dev_err(board->gpib_dev, "No dma channel available, cannot do accel write."); return -ENXIO; } @@ -498,7 +501,6 @@ static int fmh_gpib_accel_write(gpib_board_t *board, uint8_t *buffer, if (send_eoi) --dma_remainder; -// printk("%s: entering while loop\n", __FUNCTION__); while (dma_remainder > 0) { size_t num_bytes; @@ -524,11 +526,12 @@ static int fmh_gpib_accel_write(gpib_board_t *board, uint8_t *buffer, //handle sending of last byte with eoi if (send_eoi) { size_t num_bytes; - // printk("%s: handling last byte\n", __FUNCTION__); + if (WARN_ON_ONCE(remainder != 1)) return -EFAULT; - /* wait until we are sure we will be able to write the data byte + /* + * wait until we are sure we will be able to write the data byte * into the chip before we send AUX_SEOI. This prevents a timeout * scenario where we send AUX_SEOI but then timeout without getting * any bytes into the gpib chip. This will result in the first byte @@ -545,7 +548,6 @@ static int fmh_gpib_accel_write(gpib_board_t *board, uint8_t *buffer, return retval; remainder -= num_bytes; } -// printk("%s: bytes send=%i\n", __FUNCTION__, (int)(length - remainder)); return 0; } @@ -556,21 +558,22 @@ static int fmh_gpib_get_dma_residue(struct dma_chan *chan, dma_cookie_t cookie) result = dmaengine_pause(chan); if (result < 0) { - pr_err("fmh_gpib_gpib: dma pause failed?\n"); + pr_err("dma pause failed?\n"); return result; } dmaengine_tx_status(chan, cookie, &state); - // dma330 hardware doesn't support resume, so dont call this - // method unless the dma transfer is done. + /* + * dma330 hardware doesn't support resume, so dont call this + * method unless the dma transfer is done. + */ return state.residue; } -static int wait_for_tx_fifo_half_empty(gpib_board_t *board) +static int wait_for_tx_fifo_half_empty(struct gpib_board *board) { struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; int retval = 0; -// printk("%s: enter\n", __FUNCTION__); if (wait_event_interruptible(board->wait, (test_bit(TACS_NUM, &board->status) && @@ -584,14 +587,15 @@ static int wait_for_tx_fifo_half_empty(gpib_board_t *board) retval = -ETIMEDOUT; if (test_and_clear_bit(DEV_CLEAR_BN, &nec_priv->state)) retval = -EINTR; -// printk("%s: exit, retval=%i\n", __FUNCTION__, retval); + return retval; } -/* supports writing a chunk of data whose length must fit into the hardware'd xfer counter, +/* + * supports writing a chunk of data whose length must fit into the hardware'd xfer counter, * called in a loop by fmh_gpib_fifo_write() */ -static int fmh_gpib_fifo_write_countable(gpib_board_t *board, uint8_t *buffer, +static int fmh_gpib_fifo_write_countable(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { struct fmh_priv *e_priv = board->private_data; @@ -600,7 +604,6 @@ static int fmh_gpib_fifo_write_countable(gpib_board_t *board, uint8_t *buffer, unsigned int remainder; *bytes_written = 0; -// printk("%s: enter\n", __FUNCTION__); if (WARN_ON_ONCE(length > fifo_xfer_counter_mask)) return -EFAULT; @@ -635,10 +638,9 @@ static int fmh_gpib_fifo_write_countable(gpib_board_t *board, uint8_t *buffer, fmh_gpib_all_bytes_are_sent(e_priv) || test_bit(BUS_ERROR_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib write interrupted!\n"); + test_bit(TIMO_NUM, &board->status))) retval = -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) retval = -ETIMEDOUT; if (test_and_clear_bit(DEV_CLEAR_BN, &nec_priv->state)) @@ -655,15 +657,11 @@ cleanup: fifo_xfer_counter_mask); if (WARN_ON_ONCE(*bytes_written > length)) return -EFAULT; - /* printk("length=%i, *bytes_written=%i, residue=%i, retval=%i\n", - * length, *bytes_written, get_dma_residue(e_priv->dma_channel), retval); - */ -// printk("%s: exit, retval=%d\n", __FUNCTION__, retval); return retval; } -static int fmh_gpib_fifo_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fmh_gpib_fifo_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { struct fmh_priv *e_priv = board->private_data; @@ -678,8 +676,6 @@ static int fmh_gpib_fifo_write(gpib_board_t *board, uint8_t *buffer, size_t leng clear_bit(DEV_CLEAR_BN, &nec_priv->state); // XXX FIXME -// printk("%s: entering while loop\n", __FUNCTION__); - while (remainder > 0) { size_t num_bytes; int last_pass; @@ -708,11 +704,11 @@ static int fmh_gpib_fifo_write(gpib_board_t *board, uint8_t *buffer, size_t leng if (need_resched()) schedule(); } -// printk("%s: bytes send=%i\n", __FUNCTION__, (int)(length - remainder)); + return retval; } -static int fmh_gpib_dma_read(gpib_board_t *board, uint8_t *buffer, +static int fmh_gpib_dma_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct fmh_priv *e_priv = board->private_data; @@ -725,10 +721,6 @@ static int fmh_gpib_dma_read(gpib_board_t *board, uint8_t *buffer, struct dma_async_tx_descriptor *tx_desc; dma_cookie_t dma_cookie; - // printk("%s: enter, bus_address=0x%x, length=%i\n", __FUNCTION__, - //(unsigned)bus_address, -// (int)length); - *bytes_read = 0; *end = 0; if (length == 0) @@ -737,7 +729,7 @@ static int fmh_gpib_dma_read(gpib_board_t *board, uint8_t *buffer, bus_address = dma_map_single(board->dev, e_priv->dma_buffer, length, DMA_FROM_DEVICE); if (dma_mapping_error(board->dev, bus_address)) - pr_err("dma mapping error in dma read!"); + dev_err(board->gpib_dev, "dma mapping error in dma read!"); /* program dma controller */ retval = fmh_gpib_config_dma(board, 0); @@ -749,7 +741,7 @@ static int fmh_gpib_dma_read(gpib_board_t *board, uint8_t *buffer, length, DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!tx_desc) { - pr_err("fmh_gpib_gpib: failed to allocate dma transmit descriptor\n"); + dev_err(board->gpib_dev, "failed to allocate dma transmit descriptor\n"); dma_unmap_single(board->dev, bus_address, length, DMA_FROM_DEVICE); return -EIO; } @@ -769,7 +761,7 @@ static int fmh_gpib_dma_read(gpib_board_t *board, uint8_t *buffer, set_bit(DMA_READ_IN_PROGRESS_BN, &nec_priv->state); spin_unlock_irqrestore(&board->spinlock, flags); -// printk("waiting for data transfer.\n"); + // wait for data to transfer wait_retval = wait_event_interruptible(board->wait, test_bit(DMA_READ_IN_PROGRESS_BN, &nec_priv->state) @@ -777,10 +769,9 @@ static int fmh_gpib_dma_read(gpib_board_t *board, uint8_t *buffer, test_bit(RECEIVED_END_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status)); - if (wait_retval) { - pr_warn("fmh_gpib: dma read wait interrupted\n"); + if (wait_retval) retval = -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) retval = -ETIMEDOUT; if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) @@ -788,8 +779,10 @@ static int fmh_gpib_dma_read(gpib_board_t *board, uint8_t *buffer, // stop the dma transfer nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAI, 0); fifos_write(e_priv, 0, FIFO_CONTROL_STATUS_REG); - // give time for pl330 to transfer any in-flight data, since - // pl330 will throw it away when dmaengine_pause is called. + /* + * give time for pl330 to transfer any in-flight data, since + * pl330 will throw it away when dmaengine_pause is called. + */ usleep_range(10, 15); residue = fmh_gpib_get_dma_residue(e_priv->dma_channel, dma_cookie); if (WARN_ON_ONCE(residue > length || residue < 0)) @@ -813,25 +806,26 @@ static int fmh_gpib_dma_read(gpib_board_t *board, uint8_t *buffer, buffer[(*bytes_read)++] = fifos_read(e_priv, FIFO_DATA_REG) & fifo_data_mask; } - /* If we got an end interrupt, figure out if it was + /* + * If we got an end interrupt, figure out if it was * associated with the last byte we dma'd or with a * byte still sitting on the cb7210. */ spin_lock_irqsave(&board->spinlock, flags); if (*bytes_read > 0 && test_bit(READ_READY_BN, &nec_priv->state) == 0) { - // If there is no byte sitting on the cb7210 and we - // saw an end, we need to deal with it now + /* + * If there is no byte sitting on the cb7210 and we + * saw an end, we need to deal with it now + */ if (test_and_clear_bit(RECEIVED_END_BN, &nec_priv->state)) *end = 1; } spin_unlock_irqrestore(&board->spinlock, flags); -// printk("\tbytes_read=%i, residue=%i, end=%i, retval=%i, wait_retval=%i\n", -// *bytes_read, residue, *end, retval, wait_retval); return retval; } -static void fmh_gpib_release_rfd_holdoff(gpib_board_t *board, struct fmh_priv *e_priv) +static void fmh_gpib_release_rfd_holdoff(struct gpib_board *board, struct fmh_priv *e_priv) { struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; unsigned int ext_status_1; @@ -841,7 +835,8 @@ static void fmh_gpib_release_rfd_holdoff(gpib_board_t *board, struct fmh_priv *e ext_status_1 = read_byte(nec_priv, EXT_STATUS_1_REG); - /* if there is an end byte sitting on the chip, don't release + /* + * if there is an end byte sitting on the chip, don't release * holdoff. We want it left set after we read out the end * byte. */ @@ -850,7 +845,8 @@ static void fmh_gpib_release_rfd_holdoff(gpib_board_t *board, struct fmh_priv *e if (ext_status_1 & RFD_HOLDOFF_STATUS_BIT) write_byte(nec_priv, AUX_FH, AUXMR); - /* Check if an end byte raced in before we executed the AUX_FH command. + /* + * Check if an end byte raced in before we executed the AUX_FH command. * If it did, we want to make sure the rfd holdoff is in effect. The end * byte can arrive since * AUX_RFD_HOLDOFF_ASAP doesn't immediately force the acceptor handshake @@ -868,7 +864,7 @@ static void fmh_gpib_release_rfd_holdoff(gpib_board_t *board, struct fmh_priv *e spin_unlock_irqrestore(&board->spinlock, flags); } -static int fmh_gpib_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fmh_gpib_accel_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct fmh_priv *e_priv = board->private_data; @@ -915,20 +911,17 @@ static int fmh_gpib_accel_read(gpib_board_t *board, uint8_t *buffer, size_t leng return retval; } -/* Read a chunk of data whose length is within the limits of the hardware's +/* + * Read a chunk of data whose length is within the limits of the hardware's * xfer counter. Called in a loop from fmh_gpib_fifo_read(). */ -static int fmh_gpib_fifo_read_countable(gpib_board_t *board, uint8_t *buffer, +static int fmh_gpib_fifo_read_countable(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; int retval = 0; - // printk("%s: enter, bus_address=0x%x, length=%i\n", __FUNCTION__, - // (unsigned)bus_address, -// (int)length); - *bytes_read = 0; *end = 0; if (length == 0) @@ -977,13 +970,10 @@ cleanup: *end = 1; } -// printk("\tbytes_read=%i, end=%i, retval=%i, wait_retval=%i\n", -// *bytes_read, *end, retval, wait_retval); - return retval; } -static int fmh_gpib_fifo_read(gpib_board_t *board, uint8_t *buffer, size_t length, +static int fmh_gpib_fifo_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct fmh_priv *e_priv = board->private_data; @@ -998,7 +988,8 @@ static int fmh_gpib_fifo_read(gpib_board_t *board, uint8_t *buffer, size_t lengt *end = 0; *bytes_read = 0; - /* Do a little prep with data in interrupt so that following wait_for_read() + /* + * Do a little prep with data in interrupt so that following wait_for_read() * will wake up if a data byte is received. */ nec7210_set_reg_bits(nec_priv, IMR1, HR_DIIE, HR_DIIE); @@ -1040,7 +1031,7 @@ static int fmh_gpib_fifo_read(gpib_board_t *board, uint8_t *buffer, size_t lengt return retval; } -static gpib_interface_t fmh_gpib_unaccel_interface = { +static struct gpib_interface fmh_gpib_unaccel_interface = { .name = "fmh_gpib_unaccel", .attach = fmh_gpib_attach_holdoff_all, .detach = fmh_gpib_detach, @@ -1068,7 +1059,7 @@ static gpib_interface_t fmh_gpib_unaccel_interface = { .return_to_local = fmh_gpib_return_to_local, }; -static gpib_interface_t fmh_gpib_interface = { +static struct gpib_interface fmh_gpib_interface = { .name = "fmh_gpib", .attach = fmh_gpib_attach_holdoff_end, .detach = fmh_gpib_detach, @@ -1096,7 +1087,7 @@ static gpib_interface_t fmh_gpib_interface = { .return_to_local = fmh_gpib_return_to_local, }; -static gpib_interface_t fmh_gpib_pci_interface = { +static struct gpib_interface fmh_gpib_pci_interface = { .name = "fmh_gpib_pci", .attach = fmh_gpib_pci_attach_holdoff_end, .detach = fmh_gpib_pci_detach, @@ -1124,7 +1115,7 @@ static gpib_interface_t fmh_gpib_pci_interface = { .return_to_local = fmh_gpib_return_to_local, }; -static gpib_interface_t fmh_gpib_pci_unaccel_interface = { +static struct gpib_interface fmh_gpib_pci_unaccel_interface = { .name = "fmh_gpib_pci_unaccel", .attach = fmh_gpib_pci_attach_holdoff_all, .detach = fmh_gpib_pci_detach, @@ -1152,7 +1143,7 @@ static gpib_interface_t fmh_gpib_pci_unaccel_interface = { .return_to_local = fmh_gpib_return_to_local, }; -irqreturn_t fmh_gpib_internal_interrupt(gpib_board_t *board) +irqreturn_t fmh_gpib_internal_interrupt(struct gpib_board *board) { unsigned int status0, status1, status2, ext_status_1, fifo_status; struct fmh_priv *priv = board->private_data; @@ -1165,7 +1156,7 @@ irqreturn_t fmh_gpib_internal_interrupt(gpib_board_t *board) fifo_status = fifos_read(priv, FIFO_CONTROL_STATUS_REG); if (status0 & IFC_INTERRUPT_BIT) { - push_gpib_event(board, EventIFC); + push_gpib_event(board, EVENT_IFC); retval = IRQ_HANDLED; } @@ -1195,7 +1186,8 @@ irqreturn_t fmh_gpib_internal_interrupt(gpib_board_t *board) clear_bit(RFD_HOLDOFF_BN, &nec_priv->state); if (ext_status_1 & END_STATUS_BIT) { - /* only set RECEIVED_END while there is still a data + /* + * only set RECEIVED_END while there is still a data * byte sitting in the chip, to avoid spuriously * setting it multiple times after it has been cleared * during a read. @@ -1208,7 +1200,8 @@ irqreturn_t fmh_gpib_internal_interrupt(gpib_board_t *board) if ((fifo_status & TX_FIFO_HALF_EMPTY_INTERRUPT_IS_ENABLED) && (fifo_status & TX_FIFO_HALF_EMPTY)) { - /* We really only want to clear the + /* + * We really only want to clear the * TX_FIFO_HALF_EMPTY_INTERRUPT_ENABLE bit in the * FIFO_CONTROL_STATUS_REG. Since we are not being * careful, this also has a side effect of disabling @@ -1222,7 +1215,8 @@ irqreturn_t fmh_gpib_internal_interrupt(gpib_board_t *board) if ((fifo_status & RX_FIFO_HALF_FULL_INTERRUPT_IS_ENABLED) && (fifo_status & RX_FIFO_HALF_FULL)) { - /* We really only want to clear the + /* + * We really only want to clear the * RX_FIFO_HALF_FULL_INTERRUPT_ENABLE bit in the * FIFO_CONTROL_STATUS_REG. Since we are not being * careful, this also has a side effect of disabling @@ -1242,7 +1236,7 @@ irqreturn_t fmh_gpib_internal_interrupt(gpib_board_t *board) irqreturn_t fmh_gpib_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; unsigned long flags; irqreturn_t retval; @@ -1252,7 +1246,7 @@ irqreturn_t fmh_gpib_interrupt(int irq, void *arg) return retval; } -static int fmh_gpib_allocate_private(gpib_board_t *board) +static int fmh_gpib_allocate_private(struct gpib_board *board) { struct fmh_priv *priv; @@ -1269,7 +1263,7 @@ static int fmh_gpib_allocate_private(gpib_board_t *board) return 0; } -static void fmh_gpib_generic_detach(gpib_board_t *board) +static void fmh_gpib_generic_detach(struct gpib_board *board) { if (board->private_data) { struct fmh_priv *e_priv = board->private_data; @@ -1283,7 +1277,7 @@ static void fmh_gpib_generic_detach(gpib_board_t *board) } // generic part of attach functions -static int fmh_gpib_generic_attach(gpib_board_t *board) +static int fmh_gpib_generic_attach(struct gpib_board *board) { struct fmh_priv *e_priv; struct nec7210_priv *nec_priv; @@ -1303,7 +1297,7 @@ static int fmh_gpib_generic_attach(gpib_board_t *board) return 0; } -static int fmh_gpib_config_dma(gpib_board_t *board, int output) +static int fmh_gpib_config_dma(struct gpib_board *board, int output) { struct fmh_priv *e_priv = board->private_data; struct dma_slave_config config; @@ -1333,7 +1327,7 @@ static int fmh_gpib_config_dma(gpib_board_t *board, int output) return dmaengine_slave_config(e_priv->dma_channel, &config); } -static int fmh_gpib_init(struct fmh_priv *e_priv, gpib_board_t *board, int handshake_mode) +static int fmh_gpib_init(struct fmh_priv *e_priv, struct gpib_board *board, int handshake_mode) { struct nec7210_priv *nec_priv = &e_priv->nec7210_priv; unsigned long flags; @@ -1364,7 +1358,7 @@ static int fmh_gpib_init(struct fmh_priv *e_priv, gpib_board_t *board, int hands /* Match callback for driver_find_device */ static int fmh_gpib_device_match(struct device *dev, const void *data) { - const gpib_board_config_t *config = data; + const struct gpib_board_config *config = data; if (dev_get_drvdata(dev)) return 0; @@ -1376,11 +1370,11 @@ static int fmh_gpib_device_match(struct device *dev, const void *data) if (config->serial_number) return 0; - dev_notice(dev, "matched: %s\n", of_node_full_name(dev_of_node((dev)))); + dev_dbg(dev, "matched: %s\n", of_node_full_name(dev_of_node((dev)))); return 1; } -static int fmh_gpib_attach_impl(gpib_board_t *board, const gpib_board_config_t *config, +static int fmh_gpib_attach_impl(struct gpib_board *board, const struct gpib_board_config *config, unsigned int handshake_mode, int acquire_dma) { struct fmh_priv *e_priv; @@ -1393,7 +1387,7 @@ static int fmh_gpib_attach_impl(gpib_board_t *board, const gpib_board_config_t * board->dev = driver_find_device(&fmh_gpib_platform_driver.driver, NULL, (const void *)config, &fmh_gpib_device_match); if (!board->dev) { - pr_err("No matching fmh_gpib_core device was found, attach failed."); + dev_err(board->gpib_dev, "No matching fmh_gpib_core device was found, attach failed."); return -ENODEV; } // currently only used to mark the device as already attached @@ -1409,7 +1403,7 @@ static int fmh_gpib_attach_impl(gpib_board_t *board, const gpib_board_config_t * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "gpib_control_status"); if (!res) { - dev_err(board->dev, "Unable to locate mmio resource for cb7210 gpib\n"); + dev_err(board->dev, "Unable to locate mmio resource\n"); return -ENODEV; } @@ -1422,13 +1416,13 @@ static int fmh_gpib_attach_impl(gpib_board_t *board, const gpib_board_config_t * e_priv->gpib_iomem_res = res; nec_priv->mmiobase = ioremap(e_priv->gpib_iomem_res->start, - resource_size(e_priv->gpib_iomem_res)); + resource_size(e_priv->gpib_iomem_res)); if (!nec_priv->mmiobase) { - dev_err(board->dev, "Could not map I/O memory for gpib\n"); + dev_err(board->dev, "Could not map I/O memory\n"); return -ENOMEM; } - dev_info(board->dev, "iobase %pr remapped to %p\n", - e_priv->gpib_iomem_res, nec_priv->mmiobase); + dev_dbg(board->dev, "iobase %pr remapped to %p\n", + e_priv->gpib_iomem_res, nec_priv->mmiobase); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dma_fifos"); if (!res) { @@ -1448,16 +1442,13 @@ static int fmh_gpib_attach_impl(gpib_board_t *board, const gpib_board_config_t * dev_err(board->dev, "Could not map I/O memory for fifos\n"); return -ENOMEM; } - dev_info(board->dev, "dma fifos 0x%lx remapped to %p, length=%ld\n", - (unsigned long)e_priv->dma_port_res->start, e_priv->fifo_base, - (unsigned long)resource_size(e_priv->dma_port_res)); + dev_dbg(board->dev, "dma fifos 0x%lx remapped to %p, length=%ld\n", + (unsigned long)e_priv->dma_port_res->start, e_priv->fifo_base, + (unsigned long)resource_size(e_priv->dma_port_res)); irq = platform_get_irq(pdev, 0); - pr_info("gpib: irq %d\n", irq); - if (irq < 0) { - dev_err(board->dev, "fmh_gpib_gpib: request for IRQ failed\n"); + if (irq < 0) return -EBUSY; - } retval = request_irq(irq, fmh_gpib_interrupt, IRQF_SHARED, pdev->name, board); if (retval) { dev_err(board->dev, @@ -1474,7 +1465,8 @@ static int fmh_gpib_attach_impl(gpib_board_t *board, const gpib_board_config_t * return -EIO; } } - /* in the future we might want to know the half-fifo size + /* + * in the future we might want to know the half-fifo size * (dma_burst_length) even when not using dma, so go ahead an * initialize it unconditionally. */ @@ -1484,17 +1476,17 @@ static int fmh_gpib_attach_impl(gpib_board_t *board, const gpib_board_config_t * return fmh_gpib_init(e_priv, board, handshake_mode); } -int fmh_gpib_attach_holdoff_all(gpib_board_t *board, const gpib_board_config_t *config) +int fmh_gpib_attach_holdoff_all(struct gpib_board *board, const struct gpib_board_config *config) { return fmh_gpib_attach_impl(board, config, HR_HLDA, 0); } -int fmh_gpib_attach_holdoff_end(gpib_board_t *board, const gpib_board_config_t *config) +int fmh_gpib_attach_holdoff_end(struct gpib_board *board, const struct gpib_board_config *config) { return fmh_gpib_attach_impl(board, config, HR_HLDE, 1); } -void fmh_gpib_detach(gpib_board_t *board) +void fmh_gpib_detach(struct gpib_board *board) { struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1527,7 +1519,8 @@ void fmh_gpib_detach(gpib_board_t *board) fmh_gpib_generic_detach(board); } -static int fmh_gpib_pci_attach_impl(gpib_board_t *board, const gpib_board_config_t *config, +static int fmh_gpib_pci_attach_impl(struct gpib_board *board, + const struct gpib_board_config *config, unsigned int handshake_mode) { struct fmh_priv *e_priv; @@ -1546,7 +1539,7 @@ static int fmh_gpib_pci_attach_impl(gpib_board_t *board, const gpib_board_config pci_device = gpib_pci_get_device(config, BOGUS_PCI_VENDOR_ID_FLUKE, BOGUS_PCI_DEVICE_ID_FLUKE_BLADERUNNER, NULL); if (!pci_device) { - pr_err("No matching fmh_gpib_core pci device was found, attach failed."); + dev_err(board->gpib_dev, "No matching fmh_gpib_core pci device was found, attach failed."); return -ENODEV; } board->dev = &pci_device->dev; @@ -1563,34 +1556,32 @@ static int fmh_gpib_pci_attach_impl(gpib_board_t *board, const gpib_board_config return -EIO; } e_priv->gpib_iomem_res = &pci_device->resource[gpib_control_status_pci_resource_index]; - e_priv->dma_port_res = &pci_device->resource[gpib_fifo_pci_resource_index]; + e_priv->dma_port_res = &pci_device->resource[gpib_fifo_pci_resource_index]; nec_priv->mmiobase = ioremap(pci_resource_start(pci_device, - gpib_control_status_pci_resource_index), - pci_resource_len(pci_device, - gpib_control_status_pci_resource_index)); - dev_info(board->dev, "base address for gpib control/status registers remapped to 0x%p\n", - nec_priv->mmiobase); + gpib_control_status_pci_resource_index), + pci_resource_len(pci_device, + gpib_control_status_pci_resource_index)); + dev_dbg(board->dev, "base address for gpib control/status registers remapped to 0x%p\n", + nec_priv->mmiobase); if (e_priv->dma_port_res->flags & IORESOURCE_MEM) { e_priv->fifo_base = ioremap(pci_resource_start(pci_device, gpib_fifo_pci_resource_index), pci_resource_len(pci_device, gpib_fifo_pci_resource_index)); - dev_info(board->dev, "base address for gpib fifo registers remapped to 0x%p\n", - e_priv->fifo_base); + dev_dbg(board->dev, "base address for gpib fifo registers remapped to 0x%p\n", + e_priv->fifo_base); } else { e_priv->fifo_base = NULL; - dev_info(board->dev, "hardware has no gpib fifo registers.\n"); + dev_dbg(board->dev, "hardware has no gpib fifo registers.\n"); } if (pci_device->irq) { retval = request_irq(pci_device->irq, fmh_gpib_interrupt, IRQF_SHARED, KBUILD_MODNAME, board); if (retval) { - dev_err(board->dev, - "cannot register interrupt handler err=%d\n", - retval); + dev_err(board->dev, "cannot register interrupt handler err=%d\n", retval); return retval; } } @@ -1602,12 +1593,14 @@ static int fmh_gpib_pci_attach_impl(gpib_board_t *board, const gpib_board_config return fmh_gpib_init(e_priv, board, handshake_mode); } -int fmh_gpib_pci_attach_holdoff_all(gpib_board_t *board, const gpib_board_config_t *config) +int fmh_gpib_pci_attach_holdoff_all(struct gpib_board *board, + const struct gpib_board_config *config) { return fmh_gpib_pci_attach_impl(board, config, HR_HLDA); } -int fmh_gpib_pci_attach_holdoff_end(gpib_board_t *board, const gpib_board_config_t *config) +int fmh_gpib_pci_attach_holdoff_end(struct gpib_board *board, + const struct gpib_board_config *config) { int retval; struct fmh_priv *e_priv; @@ -1615,13 +1608,13 @@ int fmh_gpib_pci_attach_holdoff_end(gpib_board_t *board, const gpib_board_config retval = fmh_gpib_pci_attach_impl(board, config, HR_HLDE); e_priv = board->private_data; if (retval == 0 && e_priv && e_priv->supports_fifo_interrupts == 0) { - pr_err("fmh_gpib: your fmh_gpib_core does not appear to support fifo interrupts. Try the fmh_gpib_pci_unaccel board type instead."); + dev_err(board->gpib_dev, "your fmh_gpib_core does not appear to support fifo interrupts. Try the fmh_gpib_pci_unaccel board type instead."); return -EIO; } return retval; } -void fmh_gpib_pci_detach(gpib_board_t *board) +void fmh_gpib_pci_detach(struct gpib_board *board) { struct fmh_priv *e_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1662,8 +1655,7 @@ MODULE_DEVICE_TABLE(of, fmh_gpib_of_match); static struct platform_driver fmh_gpib_platform_driver = { .driver = { - .name = "fmh_gpib", - .owner = THIS_MODULE, + .name = DRV_NAME, .of_match_table = fmh_gpib_of_match, }, .probe = &fmh_gpib_platform_probe @@ -1681,7 +1673,7 @@ static const struct pci_device_id fmh_gpib_pci_match[] = { MODULE_DEVICE_TABLE(pci, fmh_gpib_pci_match); static struct pci_driver fmh_gpib_pci_driver = { - .name = "fmh_gpib", + .name = DRV_NAME, .id_table = fmh_gpib_pci_match, .probe = &fmh_gpib_pci_probe }; @@ -1692,37 +1684,37 @@ static int __init fmh_gpib_init_module(void) result = platform_driver_register(&fmh_gpib_platform_driver); if (result) { - pr_err("fmh_gpib: platform_driver_register failed: error = %d\n", result); + pr_err("platform_driver_register failed: error = %d\n", result); return result; } result = pci_register_driver(&fmh_gpib_pci_driver); if (result) { - pr_err("fmh_gpib: pci_register_driver failed: error = %d\n", result); + pr_err("pci_register_driver failed: error = %d\n", result); goto err_pci_driver; } result = gpib_register_driver(&fmh_gpib_unaccel_interface, THIS_MODULE); if (result) { - pr_err("fmh_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_unaccel; } result = gpib_register_driver(&fmh_gpib_interface, THIS_MODULE); if (result) { - pr_err("fmh_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_interface; } result = gpib_register_driver(&fmh_gpib_pci_unaccel_interface, THIS_MODULE); if (result) { - pr_err("fmh_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_pci_unaccel; } result = gpib_register_driver(&fmh_gpib_pci_interface, THIS_MODULE); if (result) { - pr_err("fmh_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_pci; } diff --git a/drivers/staging/gpib/fmh_gpib/fmh_gpib.h b/drivers/staging/gpib/fmh_gpib/fmh_gpib.h index de6fd2164414..e7602d7e1401 100644 --- a/drivers/staging/gpib/fmh_gpib/fmh_gpib.h +++ b/drivers/staging/gpib/fmh_gpib/fmh_gpib.h @@ -124,13 +124,13 @@ static const unsigned int fifo_data_mask = 0x00ff; static const unsigned int fifo_xfer_counter_mask = 0x0fff; static const unsigned int fifo_max_burst_length_mask = 0x00ff; -static inline uint8_t gpib_cs_read_byte(struct nec7210_priv *nec_priv, - unsigned int register_num) +static inline u8 gpib_cs_read_byte(struct nec7210_priv *nec_priv, + unsigned int register_num) { return readb(nec_priv->mmiobase + register_num * nec_priv->offset); } -static inline void gpib_cs_write_byte(struct nec7210_priv *nec_priv, uint8_t data, +static inline void gpib_cs_write_byte(struct nec7210_priv *nec_priv, u8 data, unsigned int register_num) { writeb(data, nec_priv->mmiobase + register_num * nec_priv->offset); diff --git a/drivers/staging/gpib/gpio/gpib_bitbang.c b/drivers/staging/gpib/gpio/gpib_bitbang.c index 828c99ea613f..625fef24a0bf 100644 --- a/drivers/staging/gpib/gpio/gpib_bitbang.c +++ b/drivers/staging/gpib/gpio/gpib_bitbang.c @@ -25,12 +25,15 @@ * device support (non master operation) */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt #define NAME KBUILD_MODNAME #define ENABLE_IRQ(IRQ, TYPE) irq_set_irq_type(IRQ, TYPE) #define DISABLE_IRQ(IRQ) irq_set_irq_type(IRQ, IRQ_TYPE_NONE) -/* Debug print levels: +/* + * Debug print levels: * 0 = load/unload info and errors that make the driver fail; * 1 = + warnings for unforeseen events that may break the current * operation and lead to a timeout, but do not affect the @@ -41,7 +44,7 @@ */ #define dbg_printk(level, frm, ...) \ do { if (debug >= (level)) \ - pr_info("%s:%s - " frm, NAME, __func__, ## __VA_ARGS__); } \ + dev_dbg(board->gpib_dev, frm, ## __VA_ARGS__); } \ while (0) #define LINVAL gpiod_get_value(DAV), \ @@ -63,7 +66,6 @@ #include <linux/gpio/machine.h> #include <linux/gpio.h> #include <linux/irq.h> -#include <linux/leds.h> static int sn7516x_used = 1, sn7516x; module_param(sn7516x_used, int, 0660); @@ -133,19 +135,14 @@ enum lines_t { #define SN7516X_PINS 4 #define NUM_PINS (GPIB_PINS + SN7516X_PINS) -DEFINE_LED_TRIGGER(ledtrig_gpib); -#define ACT_LED_ON do { \ +#define ACT_LED_ON do { \ if (ACT_LED) \ - gpiod_direction_output(ACT_LED, 1); \ - else \ - led_trigger_event(ledtrig_gpib, LED_FULL); } \ - while (0) -#define ACT_LED_OFF do { \ + gpiod_direction_output(ACT_LED, 1); \ + } while (0) +#define ACT_LED_OFF do { \ if (ACT_LED) \ - gpiod_direction_output(ACT_LED, 0); \ - else \ - led_trigger_event(ledtrig_gpib, LED_OFF); } \ - while (0) + gpiod_direction_output(ACT_LED, 0); \ + } while (0) static struct gpio_desc *all_descriptors[GPIB_PINS + SN7516X_PINS]; @@ -309,20 +306,20 @@ struct bb_priv { int dav_seq; long all_irqs; int dav_idle; - int atn_asserted; enum talker_function_state talker_state; enum listener_function_state listener_state; }; static inline long usec_diff(struct timespec64 *a, struct timespec64 *b); -static void bb_buffer_print(unsigned char *buffer, size_t length, int cmd, int eoi); +static void bb_buffer_print(struct gpib_board *board, unsigned char *buffer, size_t length, + int cmd, int eoi); static void set_data_lines(u8 byte); static u8 get_data_lines(void); static void set_data_lines_input(void); static void set_data_lines_output(void); -static inline int check_for_eos(struct bb_priv *priv, uint8_t byte); -static void set_atn(struct bb_priv *priv, int atn_asserted); +static inline int check_for_eos(struct bb_priv *priv, u8 byte); +static void set_atn(struct gpib_board *board, int atn_asserted); static inline void SET_DIR_WRITE(struct bb_priv *priv); static inline void SET_DIR_READ(struct bb_priv *priv); @@ -334,11 +331,7 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB helper functions for bitbanging I/O"); /**** global variables ****/ -#ifdef CONFIG_GPIB_DEBUG -static int debug = 1; -#else static int debug; -#endif module_param(debug, int, 0644); static char printable(char x) @@ -354,7 +347,7 @@ static char printable(char x) * * ***************************************************************************/ -static int bb_read(gpib_board_t *board, uint8_t *buffer, size_t length, +static int bb_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct bb_priv *priv = board->private_data; @@ -426,7 +419,7 @@ read_end: static irqreturn_t bb_DAV_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct bb_priv *priv = board->private_data; int val; unsigned long flags; @@ -492,7 +485,7 @@ dav_exit: * * ***************************************************************************/ -static int bb_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int bb_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { unsigned long flags; @@ -508,7 +501,7 @@ static int bb_write(gpib_board_t *board, uint8_t *buffer, size_t length, board, mutex_is_locked(&board->user_mutex), length); if (debug > 1) - bb_buffer_print(buffer, length, priv->cmd, send_eoi); + bb_buffer_print(board, buffer, length, priv->cmd, send_eoi); priv->count = 0; priv->phase = 300; @@ -523,7 +516,7 @@ static int bb_write(gpib_board_t *board, uint8_t *buffer, size_t length, gpiod_get_value(NRFD), gpiod_get_value(NDAC)); if (gpiod_get_value(NRFD) && gpiod_get_value(NDAC)) { /* check for listener */ - retval = -ENODEV; + retval = -ENOTCONN; goto write_end; } @@ -550,7 +543,6 @@ static int bb_write(gpib_board_t *board, uint8_t *buffer, size_t length, dbg_printk(1, "timeout after %zu/%zu at %d " LINFMT " eoi: %d\n", priv->w_cnt, length, priv->phase, LINVAL, send_eoi); } else { - // dbg_printk(1,"written %zu\n", priv->w_cnt); retval = priv->w_cnt; } } else { @@ -582,7 +574,7 @@ write_end: static irqreturn_t bb_NRFD_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct bb_priv *priv = board->private_data; unsigned long flags; int nrfd; @@ -621,7 +613,8 @@ static irqreturn_t bb_NRFD_interrupt(int irq, void *arg) goto nrfd_exit; } - if (priv->atn_asserted && priv->w_cnt >= priv->length) { // test for end of transfer + if (priv->w_cnt >= priv->length) { // test for missed NDAC end of transfer + dev_err(board->gpib_dev, "Unexpected NRFD exit\n"); priv->write_done = 1; priv->w_busy = 0; wake_up_interruptible(&board->wait); @@ -655,7 +648,7 @@ nrfd_exit: static irqreturn_t bb_NDAC_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct bb_priv *priv = board->private_data; unsigned long flags; int ndac; @@ -693,14 +686,14 @@ static irqreturn_t bb_NDAC_interrupt(int irq, void *arg) dbg_printk(3, "accepted %zu\n", priv->w_cnt - 1); - if (!priv->atn_asserted && priv->w_cnt >= priv->length) { // test for end of transfer + gpiod_set_value(DAV, 1); // Data not available + priv->dav_tx = 1; + priv->phase = 510; + + if (priv->w_cnt >= priv->length) { // test for end of transfer priv->write_done = 1; priv->w_busy = 0; wake_up_interruptible(&board->wait); - } else { - gpiod_set_value(DAV, 1); // Data not available - priv->dav_tx = 1; - priv->phase = 510; } ndac_exit: @@ -716,7 +709,7 @@ ndac_exit: static irqreturn_t bb_SRQ_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; int val = gpiod_get_value(SRQ); @@ -730,7 +723,7 @@ static irqreturn_t bb_SRQ_interrupt(int irq, void *arg) return IRQ_HANDLED; } -static int bb_command(gpib_board_t *board, uint8_t *buffer, +static int bb_command(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written) { size_t ret; @@ -811,7 +804,8 @@ static char *cmd_string[32] = { "CFE" // 0x1f }; -static void bb_buffer_print(unsigned char *buffer, size_t length, int cmd, int eoi) +static void bb_buffer_print(struct gpib_board *board, unsigned char *buffer, size_t length, + int cmd, int eoi) { int i; @@ -843,17 +837,20 @@ static void bb_buffer_print(unsigned char *buffer, size_t length, int cmd, int e * STATUS Management * * * ***************************************************************************/ -static void set_atn(struct bb_priv *priv, int atn_asserted) +static void set_atn(struct gpib_board *board, int atn_asserted) { + struct bb_priv *priv = board->private_data; + if (priv->listener_state != listener_idle && priv->talker_state != talker_idle) { - dbg_printk(0, "listener/talker state machine conflict\n"); + dev_err(board->gpib_dev, "listener/talker state machine conflict\n"); } if (atn_asserted) { if (priv->listener_state == listener_active) priv->listener_state = listener_addressed; if (priv->talker_state == talker_active) priv->talker_state = talker_addressed; + SET_DIR_WRITE(priv); // need to be able to read bus NRFD/NDAC } else { if (priv->listener_state == listener_addressed) { priv->listener_state = listener_active; @@ -863,37 +860,43 @@ static void set_atn(struct bb_priv *priv, int atn_asserted) priv->talker_state = talker_active; } gpiod_direction_output(_ATN, !atn_asserted); - priv->atn_asserted = atn_asserted; } -static int bb_take_control(gpib_board_t *board, int synchronous) +static int bb_take_control(struct gpib_board *board, int synchronous) { dbg_printk(2, "%d\n", synchronous); - set_atn(board->private_data, 1); - set_bit(CIC_NUM, &board->status); + set_atn(board, 1); return 0; } -static int bb_go_to_standby(gpib_board_t *board) +static int bb_go_to_standby(struct gpib_board *board) { dbg_printk(2, "\n"); - set_atn(board->private_data, 0); + set_atn(board, 0); return 0; } -static void bb_request_system_control(gpib_board_t *board, int request_control) +static int bb_request_system_control(struct gpib_board *board, int request_control) { + struct bb_priv *priv = board->private_data; + dbg_printk(2, "%d\n", request_control); - if (request_control) { - set_bit(CIC_NUM, &board->status); - // drive DAV & EOI false, enable NRFD & NDAC irqs - SET_DIR_WRITE(board->private_data); - } else { - clear_bit(CIC_NUM, &board->status); - } + if (!request_control) + return -EINVAL; + + gpiod_direction_output(REN, 1); /* user space must enable REN if needed */ + gpiod_direction_output(IFC, 1); /* user space must toggle IFC if needed */ + if (sn7516x) + gpiod_direction_output(DC, 0); /* enable ATN as output on SN75161/2 */ + + gpiod_direction_input(SRQ); + + ENABLE_IRQ(priv->irq_SRQ, IRQ_TYPE_EDGE_FALLING); + + return 0; } -static void bb_interface_clear(gpib_board_t *board, int assert) +static void bb_interface_clear(struct gpib_board *board, int assert) { struct bb_priv *priv = board->private_data; @@ -902,12 +905,13 @@ static void bb_interface_clear(gpib_board_t *board, int assert) gpiod_direction_output(IFC, 0); priv->talker_state = talker_idle; priv->listener_state = listener_idle; + set_bit(CIC_NUM, &board->status); } else { gpiod_direction_output(IFC, 1); } } -static void bb_remote_enable(gpib_board_t *board, int enable) +static void bb_remote_enable(struct gpib_board *board, int enable) { dbg_printk(2, "%d\n", enable); if (enable) { @@ -919,7 +923,7 @@ static void bb_remote_enable(gpib_board_t *board, int enable) } } -static int bb_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int bb_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct bb_priv *priv = board->private_data; @@ -932,7 +936,7 @@ static int bb_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bi return 0; } -static void bb_disable_eos(gpib_board_t *board) +static void bb_disable_eos(struct gpib_board *board) { struct bb_priv *priv = board->private_data; @@ -940,7 +944,7 @@ static void bb_disable_eos(gpib_board_t *board) priv->eos_flags &= ~REOS; } -static unsigned int bb_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int bb_update_status(struct gpib_board *board, unsigned int clear_mask) { struct bb_priv *priv = board->private_data; @@ -971,14 +975,14 @@ static unsigned int bb_update_status(gpib_board_t *board, unsigned int clear_mas return board->status; } -static int bb_primary_address(gpib_board_t *board, unsigned int address) +static int bb_primary_address(struct gpib_board *board, unsigned int address) { dbg_printk(2, "%d\n", address); board->pad = address; return 0; } -static int bb_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int bb_secondary_address(struct gpib_board *board, unsigned int address, int enable) { dbg_printk(2, "%d %d\n", address, enable); if (enable) @@ -986,33 +990,29 @@ static int bb_secondary_address(gpib_board_t *board, unsigned int address, int e return 0; } -static int bb_parallel_poll(gpib_board_t *board, uint8_t *result) +static int bb_parallel_poll(struct gpib_board *board, u8 *result) { - dbg_printk(1, "%s\n", "not implemented"); - return -EPERM; + return -ENOENT; } -static void bb_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void bb_parallel_poll_configure(struct gpib_board *board, u8 config) { - dbg_printk(1, "%s\n", "not implemented"); } -static void bb_parallel_poll_response(gpib_board_t *board, int ist) +static void bb_parallel_poll_response(struct gpib_board *board, int ist) { } -static void bb_serial_poll_response(gpib_board_t *board, uint8_t status) +static void bb_serial_poll_response(struct gpib_board *board, u8 status) { - dbg_printk(1, "%s\n", "not implemented"); } -static uint8_t bb_serial_poll_status(gpib_board_t *board) +static u8 bb_serial_poll_status(struct gpib_board *board) { - dbg_printk(1, "%s\n", "not implemented"); - return 0; // -ENOSYS; + return 0; // -ENOENT; } -static unsigned int bb_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int bb_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct bb_priv *priv = board->private_data; @@ -1028,33 +1028,30 @@ static unsigned int bb_t1_delay(gpib_board_t *board, unsigned int nano_sec) return priv->t1_delay; } -static void bb_return_to_local(gpib_board_t *board) +static void bb_return_to_local(struct gpib_board *board) { - dbg_printk(1, "%s\n", "not implemented"); } -static int bb_line_status(const gpib_board_t *board) +static int bb_line_status(const struct gpib_board *board) { - int line_status = ValidALL; - -// dbg_printk(1,"\n"); + int line_status = VALID_ALL; if (gpiod_get_value(REN) == 0) - line_status |= BusREN; + line_status |= BUS_REN; if (gpiod_get_value(IFC) == 0) - line_status |= BusIFC; + line_status |= BUS_IFC; if (gpiod_get_value(NDAC) == 0) - line_status |= BusNDAC; + line_status |= BUS_NDAC; if (gpiod_get_value(NRFD) == 0) - line_status |= BusNRFD; + line_status |= BUS_NRFD; if (gpiod_get_value(DAV) == 0) - line_status |= BusDAV; + line_status |= BUS_DAV; if (gpiod_get_value(EOI) == 0) - line_status |= BusEOI; + line_status |= BUS_EOI; if (gpiod_get_value(_ATN) == 0) - line_status |= BusATN; + line_status |= BUS_ATN; if (gpiod_get_value(SRQ) == 0) - line_status |= BusSRQ; + line_status |= BUS_SRQ; dbg_printk(2, "status lines: %4x\n", line_status); @@ -1067,7 +1064,7 @@ static int bb_line_status(const gpib_board_t *board) * * ***************************************************************************/ -static int allocate_private(gpib_board_t *board) +static int allocate_private(struct gpib_board *board) { board->private_data = kzalloc(sizeof(struct bb_priv), GFP_KERNEL); if (!board->private_data) @@ -1075,13 +1072,13 @@ static int allocate_private(gpib_board_t *board) return 0; } -static void free_private(gpib_board_t *board) +static void free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; } -static int bb_get_irq(gpib_board_t *board, char *name, +static int bb_get_irq(struct gpib_board *board, char *name, struct gpio_desc *gpio, int *irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long flags) { @@ -1091,11 +1088,11 @@ static int bb_get_irq(gpib_board_t *board, char *name, *irq = gpiod_to_irq(gpio); dbg_printk(2, "IRQ %s: %d\n", name, *irq); if (*irq < 0) { - dbg_printk(0, "gpib: can't get IRQ for %s\n", name); + dev_err(board->gpib_dev, "can't get IRQ for %s\n", name); return -1; } if (request_threaded_irq(*irq, handler, thread_fn, flags, name, board)) { - dbg_printk(0, "gpib: can't request IRQ for %s %d\n", name, *irq); + dev_err(board->gpib_dev, "can't request IRQ for %s %d\n", name, *irq); *irq = 0; return -1; } @@ -1103,7 +1100,7 @@ static int bb_get_irq(gpib_board_t *board, char *name, return 0; } -static void bb_free_irq(gpib_board_t *board, int *irq, char *name) +static void bb_free_irq(struct gpib_board *board, int *irq, char *name) { if (*irq) { free_irq(*irq, board); @@ -1124,10 +1121,9 @@ static void release_gpios(void) } } -static int allocate_gpios(gpib_board_t *board) +static int allocate_gpios(struct gpib_board *board) { - int j, retval = 0; - bool error = false; + int j; int table_index = 0; char name[256]; struct gpio_desc *desc; @@ -1138,8 +1134,8 @@ static int allocate_gpios(gpib_board_t *board) return -ENOENT; } - lookup_table = lookup_tables[0]; - lookup_table->dev_id = dev_name(board->gpib_dev); + lookup_table = lookup_tables[table_index]; + lookup_table->dev_id = dev_name(board->gpib_dev); gpiod_add_lookup_table(lookup_table); dbg_printk(1, "Allocating gpios using table index %d\n", table_index); @@ -1156,33 +1152,29 @@ try_again: gpiod_remove_lookup_table(lookup_table); table_index++; lookup_table = lookup_tables[table_index]; - if (lookup_table) { - dbg_printk(1, "Allocation failed, now using table_index %d\n", - table_index); - lookup_table->dev_id = dev_name(board->gpib_dev); - gpiod_add_lookup_table(lookup_table); - goto try_again; + if (!lookup_table) { + dev_err(board->gpib_dev, "Unable to obtain gpio descriptor for pin %d error %ld\n", + gpios_vector[j], PTR_ERR(desc)); + goto alloc_gpios_fail; } - dbg_printk(0, "Unable to obtain gpio descriptor for pin %d error %ld\n", - gpios_vector[j], PTR_ERR(desc)); - error = true; - break; + dbg_printk(1, "Allocation failed, now using table_index %d\n", table_index); + lookup_table->dev_id = dev_name(board->gpib_dev); + gpiod_add_lookup_table(lookup_table); + goto try_again; } all_descriptors[j] = desc; } - if (error) { /* undo what already done */ - release_gpios(); - retval = -1; - } - if (lookup_table) - gpiod_remove_lookup_table(lookup_table); - // Initialize LED trigger - led_trigger_register_simple("gpib", &ledtrig_gpib); - return retval; + gpiod_remove_lookup_table(lookup_table); + + return 0; + +alloc_gpios_fail: + release_gpios(); + return -1; } -static void bb_detach(gpib_board_t *board) +static void bb_detach(struct gpib_board *board) { struct bb_priv *priv = board->private_data; @@ -1190,8 +1182,6 @@ static void bb_detach(gpib_board_t *board) if (!board->private_data) return; - led_trigger_unregister_simple(ledtrig_gpib); - bb_free_irq(board, &priv->irq_DAV, NAME "_DAV"); bb_free_irq(board, &priv->irq_NRFD, NAME "_NRFD"); bb_free_irq(board, &priv->irq_NDAC, NAME "_NDAC"); @@ -1212,7 +1202,7 @@ static void bb_detach(gpib_board_t *board) free_private(board); } -static int bb_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int bb_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct bb_priv *priv; int retval = 0; @@ -1251,9 +1241,8 @@ static int bb_attach(gpib_board_t *board, const gpib_board_config_t *config) gpios_vector[&(D06) - &all_descriptors[0]] = YOGA_D06_pin_nr; gpios_vector[&(PE) - &all_descriptors[0]] = -1; gpios_vector[&(DC) - &all_descriptors[0]] = -1; - gpios_vector[&(ACT_LED) - &all_descriptors[0]] = -1; } else { - dbg_printk(0, "Unrecognized pin mapping.\n"); + dev_err(board->gpib_dev, "Unrecognized pin map %s\n", pin_map); goto bb_attach_fail; } dbg_printk(0, "Using pin map \"%s\" %s\n", pin_map, (sn7516x) ? @@ -1262,7 +1251,8 @@ static int bb_attach(gpib_board_t *board, const gpib_board_config_t *config) if (allocate_gpios(board)) goto bb_attach_fail; -/* Configure SN7516X control lines. +/* + * Configure SN7516X control lines. * drive ATN, IFC and REN as outputs only when master * i.e. system controller. In this mode can only be the CIC * When not master then enable device mode ATN, IFC & REN as inputs @@ -1272,6 +1262,10 @@ static int bb_attach(gpib_board_t *board, const gpib_board_config_t *config) gpiod_direction_output(TE, 1); gpiod_direction_output(PE, 1); } +/* Set main control lines to a known state */ + gpiod_direction_output(IFC, 1); + gpiod_direction_output(REN, 1); + gpiod_direction_output(_ATN, 1); if (strcmp(PINMAP_2, pin_map) == 0) { /* YOGA: enable level shifters */ gpiod_direction_output(YOGA_ENABLE, 1); @@ -1299,8 +1293,6 @@ static int bb_attach(gpib_board_t *board, const gpib_board_config_t *config) IRQF_TRIGGER_NONE)) goto bb_attach_fail_r; - ENABLE_IRQ(priv->irq_SRQ, IRQ_TYPE_EDGE_FALLING); - dbg_printk(0, "attached board %d\n", board->minor); goto bb_attach_out; @@ -1312,7 +1304,7 @@ bb_attach_out: return retval; } -static gpib_interface_t bb_interface = { +static struct gpib_interface bb_interface = { .name = NAME, .attach = bb_attach, .detach = bb_detach, @@ -1344,19 +1336,15 @@ static int __init bb_init_module(void) int result = gpib_register_driver(&bb_interface, THIS_MODULE); if (result) { - pr_err("gpib_bitbang: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); return result; } - dbg_printk(0, "module loaded with pin map \"%s\"%s\n", - pin_map, (sn7516x_used) ? " and SN7516x driver support" : ""); return 0; } static void __exit bb_exit_module(void) { - dbg_printk(0, "module unloaded!"); - gpib_unregister_driver(&bb_interface); } @@ -1374,7 +1362,7 @@ inline long usec_diff(struct timespec64 *a, struct timespec64 *b) (a->tv_nsec - b->tv_nsec) / 1000); } -static inline int check_for_eos(struct bb_priv *priv, uint8_t byte) +static inline int check_for_eos(struct bb_priv *priv, u8 byte) { if (priv->eos_check) return 0; diff --git a/drivers/staging/gpib/hp_82335/hp82335.c b/drivers/staging/gpib/hp_82335/hp82335.c index 700d1ba029d2..d0e47ef77c87 100644 --- a/drivers/staging/gpib/hp_82335/hp82335.c +++ b/drivers/staging/gpib/hp_82335/hp82335.c @@ -4,10 +4,15 @@ * copyright : (C) 2002 by Frank Mori Hess * ***************************************************************************/ -/*should enable ATN interrupts (and update board->status on occurrence), - * implement recovery from bus errors (if necessary) +/* + * should enable ATN interrupts (and update board->status on occurrence), + * implement recovery from bus errors (if necessary) */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include "hp82335.h" #include <linux/io.h> #include <linux/ioport.h> @@ -20,160 +25,162 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB driver for HP 82335 interface cards"); -static int hp82335_attach(gpib_board_t *board, const gpib_board_config_t *config); - -static void hp82335_detach(gpib_board_t *board); +static int hp82335_attach(struct gpib_board *board, const struct gpib_board_config *config); +static void hp82335_detach(struct gpib_board *board); +static irqreturn_t hp82335_interrupt(int irq, void *arg); // wrappers for interface functions -int hp82335_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read) +static int hp82335_read(struct gpib_board *board, u8 *buffer, size_t length, + int *end, size_t *bytes_read) { struct hp82335_priv *priv = board->private_data; return tms9914_read(board, &priv->tms9914_priv, buffer, length, end, bytes_read); } -int hp82335_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) +static int hp82335_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, + size_t *bytes_written) { struct hp82335_priv *priv = board->private_data; return tms9914_write(board, &priv->tms9914_priv, buffer, length, send_eoi, bytes_written); } -int hp82335_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int hp82335_command(struct gpib_board *board, u8 *buffer, size_t length, + size_t *bytes_written) { struct hp82335_priv *priv = board->private_data; return tms9914_command(board, &priv->tms9914_priv, buffer, length, bytes_written); } -int hp82335_take_control(gpib_board_t *board, int synchronous) +static int hp82335_take_control(struct gpib_board *board, int synchronous) { struct hp82335_priv *priv = board->private_data; return tms9914_take_control(board, &priv->tms9914_priv, synchronous); } -int hp82335_go_to_standby(gpib_board_t *board) +static int hp82335_go_to_standby(struct gpib_board *board) { struct hp82335_priv *priv = board->private_data; return tms9914_go_to_standby(board, &priv->tms9914_priv); } -void hp82335_request_system_control(gpib_board_t *board, int request_control) +static int hp82335_request_system_control(struct gpib_board *board, int request_control) { struct hp82335_priv *priv = board->private_data; - tms9914_request_system_control(board, &priv->tms9914_priv, request_control); + return tms9914_request_system_control(board, &priv->tms9914_priv, request_control); } -void hp82335_interface_clear(gpib_board_t *board, int assert) +static void hp82335_interface_clear(struct gpib_board *board, int assert) { struct hp82335_priv *priv = board->private_data; tms9914_interface_clear(board, &priv->tms9914_priv, assert); } -void hp82335_remote_enable(gpib_board_t *board, int enable) +static void hp82335_remote_enable(struct gpib_board *board, int enable) { struct hp82335_priv *priv = board->private_data; tms9914_remote_enable(board, &priv->tms9914_priv, enable); } -int hp82335_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int hp82335_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct hp82335_priv *priv = board->private_data; return tms9914_enable_eos(board, &priv->tms9914_priv, eos_byte, compare_8_bits); } -void hp82335_disable_eos(gpib_board_t *board) +static void hp82335_disable_eos(struct gpib_board *board) { struct hp82335_priv *priv = board->private_data; tms9914_disable_eos(board, &priv->tms9914_priv); } -unsigned int hp82335_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int hp82335_update_status(struct gpib_board *board, unsigned int clear_mask) { struct hp82335_priv *priv = board->private_data; return tms9914_update_status(board, &priv->tms9914_priv, clear_mask); } -int hp82335_primary_address(gpib_board_t *board, unsigned int address) +static int hp82335_primary_address(struct gpib_board *board, unsigned int address) { struct hp82335_priv *priv = board->private_data; return tms9914_primary_address(board, &priv->tms9914_priv, address); } -int hp82335_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int hp82335_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct hp82335_priv *priv = board->private_data; return tms9914_secondary_address(board, &priv->tms9914_priv, address, enable); } -int hp82335_parallel_poll(gpib_board_t *board, uint8_t *result) +static int hp82335_parallel_poll(struct gpib_board *board, u8 *result) { struct hp82335_priv *priv = board->private_data; return tms9914_parallel_poll(board, &priv->tms9914_priv, result); } -void hp82335_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void hp82335_parallel_poll_configure(struct gpib_board *board, u8 config) { struct hp82335_priv *priv = board->private_data; tms9914_parallel_poll_configure(board, &priv->tms9914_priv, config); } -void hp82335_parallel_poll_response(gpib_board_t *board, int ist) +static void hp82335_parallel_poll_response(struct gpib_board *board, int ist) { struct hp82335_priv *priv = board->private_data; tms9914_parallel_poll_response(board, &priv->tms9914_priv, ist); } -void hp82335_serial_poll_response(gpib_board_t *board, uint8_t status) +static void hp82335_serial_poll_response(struct gpib_board *board, u8 status) { struct hp82335_priv *priv = board->private_data; tms9914_serial_poll_response(board, &priv->tms9914_priv, status); } -static uint8_t hp82335_serial_poll_status(gpib_board_t *board) +static u8 hp82335_serial_poll_status(struct gpib_board *board) { struct hp82335_priv *priv = board->private_data; return tms9914_serial_poll_status(board, &priv->tms9914_priv); } -static int hp82335_line_status(const gpib_board_t *board) +static int hp82335_line_status(const struct gpib_board *board) { struct hp82335_priv *priv = board->private_data; return tms9914_line_status(board, &priv->tms9914_priv); } -static unsigned int hp82335_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int hp82335_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct hp82335_priv *priv = board->private_data; return tms9914_t1_delay(board, &priv->tms9914_priv, nano_sec); } -void hp82335_return_to_local(gpib_board_t *board) +static void hp82335_return_to_local(struct gpib_board *board) { struct hp82335_priv *priv = board->private_data; tms9914_return_to_local(board, &priv->tms9914_priv); } -static gpib_interface_t hp82335_interface = { +static struct gpib_interface hp82335_interface = { .name = "hp82335", .attach = hp82335_attach, .detach = hp82335_detach, @@ -201,7 +208,7 @@ static gpib_interface_t hp82335_interface = { .return_to_local = hp82335_return_to_local, }; -int hp82335_allocate_private(gpib_board_t *board) +static int hp82335_allocate_private(struct gpib_board *board) { board->private_data = kzalloc(sizeof(struct hp82335_priv), GFP_KERNEL); if (!board->private_data) @@ -209,7 +216,7 @@ int hp82335_allocate_private(gpib_board_t *board) return 0; } -void hp82335_free_private(gpib_board_t *board) +static void hp82335_free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; @@ -220,12 +227,12 @@ static inline unsigned int tms9914_to_hp82335_offset(unsigned int register_num) return 0x1ff8 + register_num; } -static uint8_t hp82335_read_byte(struct tms9914_priv *priv, unsigned int register_num) +static u8 hp82335_read_byte(struct tms9914_priv *priv, unsigned int register_num) { return tms9914_iomem_read_byte(priv, tms9914_to_hp82335_offset(register_num)); } -static void hp82335_write_byte(struct tms9914_priv *priv, uint8_t data, unsigned int register_num) +static void hp82335_write_byte(struct tms9914_priv *priv, u8 data, unsigned int register_num) { tms9914_iomem_write_byte(priv, data, tms9914_to_hp82335_offset(register_num)); } @@ -237,7 +244,7 @@ static void hp82335_clear_interrupt(struct hp82335_priv *hp_priv) writeb(0, tms_priv->mmiobase + HPREG_INTR_CLEAR); } -int hp82335_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int hp82335_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct hp82335_priv *hp_priv; struct tms9914_priv *tms_priv; @@ -272,26 +279,23 @@ int hp82335_attach(gpib_board_t *board, const gpib_board_config_t *config) case 0xfc000: break; default: - pr_err("hp82335: invalid base io address 0x%u\n", config->ibbase); + dev_err(board->gpib_dev, "invalid base io address 0x%x\n", config->ibbase); return -EINVAL; } if (!request_mem_region(upper_iomem_base, hp82335_upper_iomem_size, "hp82335")) { - pr_err("hp82335: failed to allocate io memory region 0x%lx-0x%lx\n", - upper_iomem_base, upper_iomem_base + hp82335_upper_iomem_size - 1); + dev_err(board->gpib_dev, "failed to allocate io memory region 0x%lx-0x%lx\n", + upper_iomem_base, upper_iomem_base + hp82335_upper_iomem_size - 1); return -EBUSY; } hp_priv->raw_iobase = upper_iomem_base; tms_priv->mmiobase = ioremap(upper_iomem_base, hp82335_upper_iomem_size); - pr_info("hp82335: upper half of 82335 iomem region 0x%lx remapped to 0x%p\n", - hp_priv->raw_iobase, tms_priv->mmiobase); - retval = request_irq(config->ibirq, hp82335_interrupt, 0, "hp82335", board); + retval = request_irq(config->ibirq, hp82335_interrupt, 0, DRV_NAME, board); if (retval) { - pr_err("hp82335: can't request IRQ %d\n", config->ibirq); + dev_err(board->gpib_dev, "can't request IRQ %d\n", config->ibirq); return retval; } hp_priv->irq = config->ibirq; - pr_info("hp82335: IRQ %d\n", config->ibirq); tms9914_board_reset(tms_priv); @@ -304,7 +308,7 @@ int hp82335_attach(gpib_board_t *board, const gpib_board_config_t *config) return 0; } -void hp82335_detach(gpib_board_t *board) +static void hp82335_detach(struct gpib_board *board) { struct hp82335_priv *hp_priv = board->private_data; struct tms9914_priv *tms_priv; @@ -329,7 +333,7 @@ static int __init hp82335_init_module(void) int result = gpib_register_driver(&hp82335_interface, THIS_MODULE); if (result) { - pr_err("hp82335: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); return result; } @@ -348,10 +352,10 @@ module_exit(hp82335_exit_module); * GPIB interrupt service routines */ -irqreturn_t hp82335_interrupt(int irq, void *arg) +static irqreturn_t hp82335_interrupt(int irq, void *arg) { int status1, status2; - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct hp82335_priv *priv = board->private_data; unsigned long flags; irqreturn_t retval; diff --git a/drivers/staging/gpib/hp_82335/hp82335.h b/drivers/staging/gpib/hp_82335/hp82335.h index 4b185d7c5188..0c252a712ec9 100644 --- a/drivers/staging/gpib/hp_82335/hp82335.h +++ b/drivers/staging/gpib/hp_82335/hp82335.h @@ -17,36 +17,6 @@ struct hp82335_priv { unsigned long raw_iobase; }; -// interface functions -int hp82335_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read); -int hp82335_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written); -int hp82335_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written); -int hp82335_take_control(gpib_board_t *board, int synchronous); -int hp82335_go_to_standby(gpib_board_t *board); -void hp82335_request_system_control(gpib_board_t *board, int request_control); -void hp82335_interface_clear(gpib_board_t *board, int assert); -void hp82335_remote_enable(gpib_board_t *board, int enable); -int hp82335_enable_eos(gpib_board_t *board, uint8_t eos_byte, int - compare_8_bits); -void hp82335_disable_eos(gpib_board_t *board); -unsigned int hp82335_update_status(gpib_board_t *board, unsigned int clear_mask); -int hp82335_primary_address(gpib_board_t *board, unsigned int address); -int hp82335_secondary_address(gpib_board_t *board, unsigned int address, int - enable); -int hp82335_parallel_poll(gpib_board_t *board, uint8_t *result); -void hp82335_parallel_poll_configure(gpib_board_t *board, uint8_t config); -void hp82335_parallel_poll_response(gpib_board_t *board, int ist); -void hp82335_serial_poll_response(gpib_board_t *board, uint8_t status); -void hp82335_return_to_local(gpib_board_t *board); - -// interrupt service routines -irqreturn_t hp82335_interrupt(int irq, void *arg); - -// utility functions -int hp82335_allocate_private(gpib_board_t *board); -void hp82335_free_private(gpib_board_t *board); - // size of io memory region used static const int hp82335_rom_size = 0x2000; static const int hp82335_upper_iomem_size = 0x2000; diff --git a/drivers/staging/gpib/hp_82341/hp_82341.c b/drivers/staging/gpib/hp_82341/hp_82341.c index 0ddae295912f..1b0822b2a3b8 100644 --- a/drivers/staging/gpib/hp_82341/hp_82341.c +++ b/drivers/staging/gpib/hp_82341/hp_82341.c @@ -6,6 +6,10 @@ * copyright : (C) 2002, 2005 by Frank Mori Hess * ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include "hp_82341.h" #include <linux/delay.h> #include <linux/ioport.h> @@ -16,9 +20,17 @@ #include <linux/isapnp.h> MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("GPIB driver for hp 82341a/b/c/d boards"); + +static unsigned short read_and_clear_event_status(struct gpib_board *board); +static void set_transfer_counter(struct hp_82341_priv *hp_priv, int count); +static int read_transfer_counter(struct hp_82341_priv *hp_priv); +static int hp_82341_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, + size_t *bytes_written); +static irqreturn_t hp_82341_interrupt(int irq, void *arg); -int hp_82341_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, - size_t *bytes_read) +static int hp_82341_accel_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, + size_t *bytes_read) { struct hp_82341_priv *hp_priv = board->private_data; struct tms9914_priv *tms_priv = &hp_priv->tms9914_priv; @@ -39,18 +51,19 @@ int hp_82341_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int return 0; //disable fifo for the moment outb(DIRECTION_GPIB_TO_HOST_BIT, hp_priv->iobase[3] + BUFFER_CONTROL_REG); - // Handle corner case of board not in holdoff and one byte has slipped in already. - // Also, board sometimes has problems (spurious 1 byte reads) when read fifo is - // started up with board in - // TACS under certain data holdoff conditions. Doing a 1 byte tms9914-style - // read avoids these problems. + /* + * Handle corner case of board not in holdoff and one byte has slipped in already. + * Also, board sometimes has problems (spurious 1 byte reads) when read fifo is + * started up with board in TACS under certain data holdoff conditions. + * Doing a 1 byte tms9914-style read avoids these problems. + */ if (/*tms_priv->holdoff_active == 0 && */length > 1) { size_t num_bytes; retval = tms9914_read(board, tms_priv, buffer, 1, end, &num_bytes); *bytes_read += num_bytes; if (retval < 0) - pr_err("tms9914_read failed retval=%i\n", retval); + dev_err(board->gpib_dev, "tms9914_read failed retval=%i\n", retval); if (retval < 0 || *end) return retval; ++buffer; @@ -86,7 +99,6 @@ int hp_82341_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int test_bit(DEV_CLEAR_BN, &tms_priv->state) || test_bit(TIMO_NUM, &board->status)); if (retval) { - pr_warn("%s: read wait interrupted\n", __func__); retval = -ERESTARTSYS; break; } @@ -111,12 +123,10 @@ int hp_82341_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int tms_priv->holdoff_active = 1; } if (test_bit(TIMO_NUM, &board->status)) { - pr_debug("%s: minor %i: read timed out\n", __FILE__, board->minor); retval = -ETIMEDOUT; break; } if (test_bit(DEV_CLEAR_BN, &tms_priv->state)) { - pr_warn("%s: device clear interrupted read\n", __FILE__); retval = -EINTR; break; } @@ -138,7 +148,7 @@ int hp_82341_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int return 0; } -static int restart_write_fifo(gpib_board_t *board, struct hp_82341_priv *hp_priv) +static int restart_write_fifo(struct gpib_board *board, struct hp_82341_priv *hp_priv) { struct tms9914_priv *tms_priv = &hp_priv->tms9914_priv; @@ -149,7 +159,7 @@ static int restart_write_fifo(gpib_board_t *board, struct hp_82341_priv *hp_priv //restart doesn't work if data holdoff is in effect status = tms9914_line_status(board, tms_priv); - if ((status & BusNRFD) == 0) { + if ((status & BUS_NRFD) == 0) { outb(RESTART_STREAM_BIT, hp_priv->iobase[0] + STREAM_STATUS_REG); return 0; } @@ -163,8 +173,8 @@ static int restart_write_fifo(gpib_board_t *board, struct hp_82341_priv *hp_priv return 0; } -int hp_82341_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written) +static int hp_82341_accel_write(struct gpib_board *board, u8 *buffer, size_t length, + int send_eoi, size_t *bytes_written) { struct hp_82341_priv *hp_priv = board->private_data; struct tms9914_priv *tms_priv = &hp_priv->tms9914_priv; @@ -204,7 +214,7 @@ int hp_82341_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, outb(ENABLE_TI_BUFFER_BIT, hp_priv->iobase[3] + BUFFER_CONTROL_REG); retval = restart_write_fifo(board, hp_priv); if (retval < 0) { - pr_err("hp82341: failed to restart write stream\n"); + dev_err(board->gpib_dev, "failed to restart write stream\n"); break; } retval = wait_event_interruptible(board->wait, @@ -216,17 +226,14 @@ int hp_82341_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, outb(0, hp_priv->iobase[3] + BUFFER_CONTROL_REG); *bytes_written += block_size - read_transfer_counter(hp_priv); if (retval) { - pr_warn("%s: write wait interrupted\n", __FILE__); retval = -ERESTARTSYS; break; } if (test_bit(TIMO_NUM, &board->status)) { - pr_debug("%s: minor %i: write timed out\n", __FILE__, board->minor); retval = -ETIMEDOUT; break; } if (test_bit(DEV_CLEAR_BN, &tms_priv->state)) { - pr_warn("%s: device clear interrupted write\n", __FILE__); retval = -EINTR; break; } @@ -244,48 +251,50 @@ int hp_82341_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, return 0; } -static int hp_82341_attach(gpib_board_t *board, const gpib_board_config_t *config); +static int hp_82341_attach(struct gpib_board *board, const struct gpib_board_config *config); -static void hp_82341_detach(gpib_board_t *board); +static void hp_82341_detach(struct gpib_board *board); // wrappers for interface functions -int hp_82341_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read) +static int hp_82341_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, + size_t *bytes_read) { struct hp_82341_priv *priv = board->private_data; return tms9914_read(board, &priv->tms9914_priv, buffer, length, end, bytes_read); } -int hp_82341_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) +static int hp_82341_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, + size_t *bytes_written) { struct hp_82341_priv *priv = board->private_data; return tms9914_write(board, &priv->tms9914_priv, buffer, length, send_eoi, bytes_written); } -int hp_82341_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int hp_82341_command(struct gpib_board *board, u8 *buffer, size_t length, + size_t *bytes_written) { struct hp_82341_priv *priv = board->private_data; return tms9914_command(board, &priv->tms9914_priv, buffer, length, bytes_written); } -int hp_82341_take_control(gpib_board_t *board, int synchronous) +static int hp_82341_take_control(struct gpib_board *board, int synchronous) { struct hp_82341_priv *priv = board->private_data; return tms9914_take_control(board, &priv->tms9914_priv, synchronous); } -int hp_82341_go_to_standby(gpib_board_t *board) +static int hp_82341_go_to_standby(struct gpib_board *board) { struct hp_82341_priv *priv = board->private_data; return tms9914_go_to_standby(board, &priv->tms9914_priv); } -void hp_82341_request_system_control(gpib_board_t *board, int request_control) +static int hp_82341_request_system_control(struct gpib_board *board, int request_control) { struct hp_82341_priv *priv = board->private_data; @@ -294,115 +303,115 @@ void hp_82341_request_system_control(gpib_board_t *board, int request_control) else priv->mode_control_bits &= ~SYSTEM_CONTROLLER_BIT; outb(priv->mode_control_bits, priv->iobase[0] + MODE_CONTROL_STATUS_REG); - tms9914_request_system_control(board, &priv->tms9914_priv, request_control); + return tms9914_request_system_control(board, &priv->tms9914_priv, request_control); } -void hp_82341_interface_clear(gpib_board_t *board, int assert) +static void hp_82341_interface_clear(struct gpib_board *board, int assert) { struct hp_82341_priv *priv = board->private_data; tms9914_interface_clear(board, &priv->tms9914_priv, assert); } -void hp_82341_remote_enable(gpib_board_t *board, int enable) +static void hp_82341_remote_enable(struct gpib_board *board, int enable) { struct hp_82341_priv *priv = board->private_data; tms9914_remote_enable(board, &priv->tms9914_priv, enable); } -int hp_82341_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int hp_82341_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct hp_82341_priv *priv = board->private_data; return tms9914_enable_eos(board, &priv->tms9914_priv, eos_byte, compare_8_bits); } -void hp_82341_disable_eos(gpib_board_t *board) +static void hp_82341_disable_eos(struct gpib_board *board) { struct hp_82341_priv *priv = board->private_data; tms9914_disable_eos(board, &priv->tms9914_priv); } -unsigned int hp_82341_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int hp_82341_update_status(struct gpib_board *board, unsigned int clear_mask) { struct hp_82341_priv *priv = board->private_data; return tms9914_update_status(board, &priv->tms9914_priv, clear_mask); } -int hp_82341_primary_address(gpib_board_t *board, unsigned int address) +static int hp_82341_primary_address(struct gpib_board *board, unsigned int address) { struct hp_82341_priv *priv = board->private_data; return tms9914_primary_address(board, &priv->tms9914_priv, address); } -int hp_82341_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int hp_82341_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct hp_82341_priv *priv = board->private_data; return tms9914_secondary_address(board, &priv->tms9914_priv, address, enable); } -int hp_82341_parallel_poll(gpib_board_t *board, uint8_t *result) +static int hp_82341_parallel_poll(struct gpib_board *board, u8 *result) { struct hp_82341_priv *priv = board->private_data; return tms9914_parallel_poll(board, &priv->tms9914_priv, result); } -void hp_82341_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void hp_82341_parallel_poll_configure(struct gpib_board *board, u8 config) { struct hp_82341_priv *priv = board->private_data; tms9914_parallel_poll_configure(board, &priv->tms9914_priv, config); } -void hp_82341_parallel_poll_response(gpib_board_t *board, int ist) +static void hp_82341_parallel_poll_response(struct gpib_board *board, int ist) { struct hp_82341_priv *priv = board->private_data; tms9914_parallel_poll_response(board, &priv->tms9914_priv, ist); } -void hp_82341_serial_poll_response(gpib_board_t *board, uint8_t status) +static void hp_82341_serial_poll_response(struct gpib_board *board, u8 status) { struct hp_82341_priv *priv = board->private_data; tms9914_serial_poll_response(board, &priv->tms9914_priv, status); } -static uint8_t hp_82341_serial_poll_status(gpib_board_t *board) +static u8 hp_82341_serial_poll_status(struct gpib_board *board) { struct hp_82341_priv *priv = board->private_data; return tms9914_serial_poll_status(board, &priv->tms9914_priv); } -static int hp_82341_line_status(const gpib_board_t *board) +static int hp_82341_line_status(const struct gpib_board *board) { struct hp_82341_priv *priv = board->private_data; return tms9914_line_status(board, &priv->tms9914_priv); } -static unsigned int hp_82341_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int hp_82341_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct hp_82341_priv *priv = board->private_data; return tms9914_t1_delay(board, &priv->tms9914_priv, nano_sec); } -void hp_82341_return_to_local(gpib_board_t *board) +static void hp_82341_return_to_local(struct gpib_board *board) { struct hp_82341_priv *priv = board->private_data; tms9914_return_to_local(board, &priv->tms9914_priv); } -static gpib_interface_t hp_82341_unaccel_interface = { +static struct gpib_interface hp_82341_unaccel_interface = { .name = "hp_82341_unaccel", .attach = hp_82341_attach, .detach = hp_82341_detach, @@ -430,7 +439,7 @@ static gpib_interface_t hp_82341_unaccel_interface = { .return_to_local = hp_82341_return_to_local, }; -static gpib_interface_t hp_82341_interface = { +static struct gpib_interface hp_82341_interface = { .name = "hp_82341", .attach = hp_82341_attach, .detach = hp_82341_detach, @@ -457,7 +466,7 @@ static gpib_interface_t hp_82341_interface = { .return_to_local = hp_82341_return_to_local, }; -int hp_82341_allocate_private(gpib_board_t *board) +static int hp_82341_allocate_private(struct gpib_board *board) { board->private_data = kzalloc(sizeof(struct hp_82341_priv), GFP_KERNEL); if (!board->private_data) @@ -465,18 +474,18 @@ int hp_82341_allocate_private(gpib_board_t *board) return 0; } -void hp_82341_free_private(gpib_board_t *board) +static void hp_82341_free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; } -static uint8_t hp_82341_read_byte(struct tms9914_priv *priv, unsigned int register_num) +static u8 hp_82341_read_byte(struct tms9914_priv *priv, unsigned int register_num) { return inb(priv->iobase + register_num); } -static void hp_82341_write_byte(struct tms9914_priv *priv, uint8_t data, unsigned int register_num) +static void hp_82341_write_byte(struct tms9914_priv *priv, u8 data, unsigned int register_num) { outb(data, priv->iobase + register_num); } @@ -486,21 +495,21 @@ static int hp_82341_find_isapnp_board(struct pnp_dev **dev) *dev = pnp_find_dev(NULL, ISAPNP_VENDOR('H', 'W', 'P'), ISAPNP_FUNCTION(0x1411), NULL); if (!*dev || !(*dev)->card) { - pr_err("hp_82341: failed to find isapnp board\n"); + pr_err("failed to find isapnp board\n"); return -ENODEV; } if (pnp_device_attach(*dev) < 0) { - pr_err("hp_82341: board already active, skipping\n"); + pr_err("board already active, skipping\n"); return -EBUSY; } if (pnp_activate_dev(*dev) < 0) { pnp_device_detach(*dev); - pr_err("hp_82341: failed to activate() atgpib/tnt, aborting\n"); + pr_err("failed to activate(), aborting\n"); return -EAGAIN; } if (!pnp_port_valid(*dev, 0) || !pnp_irq_valid(*dev, 0)) { pnp_device_detach(*dev); - pr_err("hp_82341: invalid port or irq for atgpib/tnt, aborting\n"); + pr_err("invalid port or irq, aborting\n"); return -ENOMEM; } return 0; @@ -521,7 +530,7 @@ static int xilinx_ready(struct hp_82341_priv *hp_priv) else return 0; default: - pr_err("hp_82341: %s: bug! unknown hw_version\n", __func__); + pr_err("bug! unknown hw_version\n"); break; } return 0; @@ -541,7 +550,7 @@ static int xilinx_done(struct hp_82341_priv *hp_priv) else return 0; default: - pr_err("hp_82341: %s: bug! unknown hw_version\n", __func__); + pr_err("bug! unknown hw_version\n"); break; } return 0; @@ -562,7 +571,7 @@ static int irq_valid(struct hp_82341_priv *hp_priv, int irq) case 15: return 1; default: - pr_err("hp_82341: invalid irq=%i for 82341C, irq must be 3, 5, 7, 9, 10, 11, 12, or 15.\n", + pr_err("invalid irq=%i for 82341C, irq must be 3, 5, 7, 9, 10, 11, 12, or 15.\n", irq); return 0; } @@ -570,7 +579,7 @@ static int irq_valid(struct hp_82341_priv *hp_priv, int irq) case HW_VERSION_82341D: return 1; default: - pr_err("hp_82341: %s: bug! unknown hw_version\n", __func__); + pr_err("bug! unknown hw_version\n"); break; } return 0; @@ -592,7 +601,7 @@ static int hp_82341_load_firmware_array(struct hp_82341_priv *hp_priv, usleep_range(10, 15); } if (j == timeout) { - pr_err("hp_82341: timed out waiting for Xilinx ready.\n"); + pr_err("timed out waiting for Xilinx ready.\n"); return -ETIMEDOUT; } outb(firmware_data[i], hp_priv->iobase[0] + XILINX_DATA_REG); @@ -605,38 +614,39 @@ static int hp_82341_load_firmware_array(struct hp_82341_priv *hp_priv, usleep_range(10, 15); } if (j == timeout) { - pr_err("hp_82341: timed out waiting for Xilinx done.\n"); + pr_err("timed out waiting for Xilinx done.\n"); return -ETIMEDOUT; } return 0; } -static int hp_82341_load_firmware(struct hp_82341_priv *hp_priv, const gpib_board_config_t *config) +static int hp_82341_load_firmware(struct hp_82341_priv *hp_priv, + const struct gpib_board_config *config) { if (config->init_data_length == 0) { if (xilinx_done(hp_priv)) return 0; - pr_err("hp_82341: board needs be initialized with firmware upload.\n" + pr_err("board needs be initialized with firmware upload.\n" "\tUse the --init-data option of gpib_config.\n"); return -EINVAL; } switch (hp_priv->hw_version) { case HW_VERSION_82341C: if (config->init_data_length != hp_82341c_firmware_length) { - pr_err("hp_82341: bad firmware length=%i for 82341c (expected %i).\n", + pr_err("bad firmware length=%i for 82341c (expected %i).\n", config->init_data_length, hp_82341c_firmware_length); return -EINVAL; } break; case HW_VERSION_82341D: if (config->init_data_length != hp_82341d_firmware_length) { - pr_err("hp_82341: bad firmware length=%i for 82341d (expected %i).\n", + pr_err("bad firmware length=%i for 82341d (expected %i).\n", config->init_data_length, hp_82341d_firmware_length); return -EINVAL; } break; default: - pr_err("hp_82341: %s: bug! unknown hw_version\n", __func__); + pr_err("bug! unknown hw_version\n"); break; } return hp_82341_load_firmware_array(hp_priv, config->init_data, config->init_data_length); @@ -678,7 +688,7 @@ static int clear_xilinx(struct hp_82341_priv *hp_priv) return 0; } -int hp_82341_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int hp_82341_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct hp_82341_priv *hp_priv; struct tms9914_priv *tms_priv; @@ -714,13 +724,12 @@ int hp_82341_attach(gpib_board_t *board, const gpib_board_config_t *config) hp_priv->hw_version = HW_VERSION_82341C; hp_priv->io_region_offset = 0x400; } - pr_info("hp_82341: base io 0x%u\n", iobase); for (i = 0; i < hp_82341_num_io_regions; ++i) { start_addr = iobase + i * hp_priv->io_region_offset; - if (!request_region(start_addr, hp_82341_region_iosize, "hp_82341")) { - pr_err("hp_82341: failed to allocate io ports 0x%lx-0x%lx\n", - start_addr, - start_addr + hp_82341_region_iosize - 1); + if (!request_region(start_addr, hp_82341_region_iosize, DRV_NAME)) { + dev_err(board->gpib_dev, "failed to allocate io ports 0x%x-0x%x\n", + start_addr, + start_addr + hp_82341_region_iosize - 1); return -EIO; } hp_priv->iobase[i] = start_addr; @@ -730,7 +739,7 @@ int hp_82341_attach(gpib_board_t *board, const gpib_board_config_t *config) retval = isapnp_cfg_begin(hp_priv->pnp_dev->card->number, hp_priv->pnp_dev->number); if (retval < 0) { - pr_err("hp_82341: isapnp_cfg_begin returned error\n"); + dev_err(board->gpib_dev, "isapnp_cfg_begin returned error\n"); return retval; } isapnp_write_byte(PIO_DIRECTION_REG, HP_82341D_XILINX_READY_BIT | @@ -746,12 +755,11 @@ int hp_82341_attach(gpib_board_t *board, const gpib_board_config_t *config) return retval; if (irq_valid(hp_priv, irq) == 0) return -EINVAL; - if (request_irq(irq, hp_82341_interrupt, 0, "hp_82341", board)) { - pr_err("hp_82341: failed to allocate IRQ %d\n", irq); + if (request_irq(irq, hp_82341_interrupt, 0, DRV_NAME, board)) { + dev_err(board->gpib_dev, "failed to allocate IRQ %d\n", irq); return -EIO; } hp_priv->irq = irq; - pr_info("hp_82341: IRQ %d\n", irq); hp_priv->config_control_bits &= ~IRQ_SELECT_MASK; hp_priv->config_control_bits |= IRQ_SELECT_BITS(irq); outb(hp_priv->config_control_bits, hp_priv->iobase[0] + CONFIG_CONTROL_STATUS_REG); @@ -768,13 +776,11 @@ int hp_82341_attach(gpib_board_t *board, const gpib_board_config_t *config) hp_priv->iobase[0] + EVENT_STATUS_REG); tms9914_online(board, tms_priv); - pr_info("hp_82341: board id %x %x %x %x\n", inb(hp_priv->iobase[1] + ID0_REG), - inb(hp_priv->iobase[1] + ID1_REG), inb(hp_priv->iobase[2] + ID2_REG), - inb(hp_priv->iobase[2] + ID3_REG)); + return 0; } -void hp_82341_detach(gpib_board_t *board) +static void hp_82341_detach(struct gpib_board *board) { struct hp_82341_priv *hp_priv = board->private_data; struct tms9914_priv *tms_priv; @@ -799,11 +805,14 @@ void hp_82341_detach(gpib_board_t *board) hp_82341_free_private(board); } +#if 0 +/* unused, will be needed when the driver is turned into a pnp_driver */ static const struct pnp_device_id hp_82341_pnp_table[] = { {.id = "HWP1411"}, {.id = ""} }; MODULE_DEVICE_TABLE(pnp, hp_82341_pnp_table); +#endif static int __init hp_82341_init_module(void) { @@ -811,13 +820,13 @@ static int __init hp_82341_init_module(void) ret = gpib_register_driver(&hp_82341_unaccel_interface, THIS_MODULE); if (ret) { - pr_err("hp_82341: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); return ret; } ret = gpib_register_driver(&hp_82341_interface, THIS_MODULE); if (ret) { - pr_err("hp_82341: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); gpib_unregister_driver(&hp_82341_unaccel_interface); return ret; } @@ -837,7 +846,7 @@ module_exit(hp_82341_exit_module); /* * GPIB interrupt service routines */ -unsigned short read_and_clear_event_status(gpib_board_t *board) +static unsigned short read_and_clear_event_status(struct gpib_board *board) { struct hp_82341_priv *hp_priv = board->private_data; unsigned long flags; @@ -850,10 +859,10 @@ unsigned short read_and_clear_event_status(gpib_board_t *board) return status; } -irqreturn_t hp_82341_interrupt(int irq, void *arg) +static irqreturn_t hp_82341_interrupt(int irq, void *arg) { int status1, status2; - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct hp_82341_priv *hp_priv = board->private_data; struct tms9914_priv *tms_priv = &hp_priv->tms9914_priv; unsigned long flags; @@ -862,7 +871,6 @@ irqreturn_t hp_82341_interrupt(int irq, void *arg) spin_lock_irqsave(&board->spinlock, flags); event_status = inb(hp_priv->iobase[0] + EVENT_STATUS_REG); -// printk("hp_82341: interrupt event_status=0x%x\n", event_status); if (event_status & INTERRUPT_PENDING_EVENT_BIT) retval = IRQ_HANDLED; //write-clear status bits @@ -877,15 +885,12 @@ irqreturn_t hp_82341_interrupt(int irq, void *arg) status1 = read_byte(tms_priv, ISR0); status2 = read_byte(tms_priv, ISR1); tms9914_interrupt_have_status(board, tms_priv, status1, status2); -/* printk("hp_82341: interrupt status1=0x%x status2=0x%x\n", - * status1, status2); - */ } spin_unlock_irqrestore(&board->spinlock, flags); return retval; } -int read_transfer_counter(struct hp_82341_priv *hp_priv) +static int read_transfer_counter(struct hp_82341_priv *hp_priv) { int lo, mid, value; @@ -896,7 +901,7 @@ int read_transfer_counter(struct hp_82341_priv *hp_priv) return value; } -void set_transfer_counter(struct hp_82341_priv *hp_priv, int count) +static void set_transfer_counter(struct hp_82341_priv *hp_priv, int count) { int complement = -count; diff --git a/drivers/staging/gpib/hp_82341/hp_82341.h b/drivers/staging/gpib/hp_82341/hp_82341.h index 0065ebd9747c..370a3d4576eb 100644 --- a/drivers/staging/gpib/hp_82341/hp_82341.h +++ b/drivers/staging/gpib/hp_82341/hp_82341.h @@ -26,42 +26,6 @@ struct hp_82341_priv { enum hp_82341_hardware_version hw_version; }; - -// interface functions -int hp_82341_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, - size_t *bytes_read); -int hp_82341_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written); -int hp_82341_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, - size_t *bytes_read); -int hp_82341_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written); -int hp_82341_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written); -int hp_82341_take_control(gpib_board_t *board, int synchronous); -int hp_82341_go_to_standby(gpib_board_t *board); -void hp_82341_request_system_control(gpib_board_t *board, int request_control); -void hp_82341_interface_clear(gpib_board_t *board, int assert); -void hp_82341_remote_enable(gpib_board_t *board, int enable); -int hp_82341_enable_eos(gpib_board_t *board, uint8_t eos_byte, int - compare_8_bits); -void hp_82341_disable_eos(gpib_board_t *board); -unsigned int hp_82341_update_status(gpib_board_t *board, unsigned int clear_mask); -int hp_82341_primary_address(gpib_board_t *board, unsigned int address); -int hp_82341_secondary_address(gpib_board_t *board, unsigned int address, int - enable); -int hp_82341_parallel_poll(gpib_board_t *board, uint8_t *result); -void hp_82341_parallel_poll_configure(gpib_board_t *board, uint8_t config); -void hp_82341_parallel_poll_response(gpib_board_t *board, int ist); -void hp_82341_serial_poll_response(gpib_board_t *board, uint8_t status); -void hp_82341_return_to_local(gpib_board_t *board); - -// interrupt service routines -irqreturn_t hp_82341_interrupt(int irq, void *arg); - -// utility functions -int hp_82341_allocate_private(gpib_board_t *board); -void hp_82341_free_private(gpib_board_t *board); - static const int hp_82341_region_iosize = 0x8; static const int hp_82341_num_io_regions = 4; static const int hp_82341_fifo_size = 0xffe; @@ -199,7 +163,3 @@ enum hp_82341d_pnp_pio_bits { HP_82341D_LEGACY_MODE_BIT = 0x4, HP_82341D_NOT_PROG_BIT = 0x8, // clear to reinitialize xilinx }; - -unsigned short read_and_clear_event_status(gpib_board_t *board); -int read_transfer_counter(struct hp_82341_priv *hp_priv); -void set_transfer_counter(struct hp_82341_priv *hp_priv, int count); diff --git a/drivers/staging/gpib/include/gpibP.h b/drivers/staging/gpib/include/gpibP.h index d35fdd391f7e..0af72934ce24 100644 --- a/drivers/staging/gpib/include/gpibP.h +++ b/drivers/staging/gpib/include/gpibP.h @@ -11,28 +11,28 @@ #include "gpib_types.h" #include "gpib_proto.h" -#include "gpib_user.h" +#include "gpib.h" #include "gpib_ioctl.h" #include <linux/fs.h> #include <linux/interrupt.h> #include <linux/io.h> -int 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, +int gpib_register_driver(struct gpib_interface *interface, struct module *mod); +void gpib_unregister_driver(struct gpib_interface *interface); +struct pci_dev *gpib_pci_get_device(const struct gpib_board_config *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, +struct pci_dev *gpib_pci_get_subsys(const struct gpib_board_config *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_board_t *board, 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); +unsigned int num_gpib_events(const struct gpib_event_queue *queue); +int push_gpib_event(struct gpib_board *board, short event_type); +int pop_gpib_event(struct gpib_board *board, struct gpib_event_queue *queue, short *event_type); +int gpib_request_pseudo_irq(struct gpib_board *board, irqreturn_t (*handler)(int, void *)); +void gpib_free_pseudo_irq(struct gpib_board *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 gpib_board board_array[GPIB_MAX_NUM_BOARDS]; extern struct list_head registered_drivers; diff --git a/drivers/staging/gpib/include/gpib_proto.h b/drivers/staging/gpib/include/gpib_proto.h index 1499f954210b..42e736e3b7cd 100644 --- a/drivers/staging/gpib/include/gpib_proto.h +++ b/drivers/staging/gpib/include/gpib_proto.h @@ -8,13 +8,9 @@ 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); +void os_start_timer(struct gpib_board *board, unsigned int usec_timeout); +void os_remove_timer(struct gpib_board *board); +void init_gpib_board(struct gpib_board *board); static inline unsigned long usec_to_jiffies(unsigned int usec) { unsigned long usec_per_jiffy = 1000000 / HZ; @@ -22,35 +18,32 @@ static inline unsigned long usec_to_jiffies(unsigned int usec) 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); +int serial_poll_all(struct gpib_board *board, unsigned int usec_timeout); +void init_gpib_descriptor(struct gpib_descriptor *desc); +int dvrsp(struct gpib_board *board, unsigned int pad, int sad, + unsigned int usec_timeout, u8 *result); +int ibcac(struct gpib_board *board, int sync, int fallback_to_async); +int ibcmd(struct gpib_board *board, u8 *buf, size_t length, size_t *bytes_written); +int ibgts(struct gpib_board *board); +int ibonline(struct gpib_board *board); +int iboffline(struct gpib_board *board); +int iblines(const struct gpib_board *board, short *lines); +int ibrd(struct gpib_board *board, u8 *buf, size_t length, int *end_flag, size_t *bytes_read); +int ibrpp(struct gpib_board *board, u8 *buf); +int ibrsv2(struct gpib_board *board, u8 status_byte, int new_reason_for_service); +int ibrsc(struct gpib_board *board, int request_control); +int ibsic(struct gpib_board *board, unsigned int usec_duration); +int ibsre(struct gpib_board *board, int enable); +int ibpad(struct gpib_board *board, unsigned int addr); +int ibsad(struct gpib_board *board, int addr); +int ibeos(struct gpib_board *board, int eos, int eosflags); +int ibwait(struct gpib_board *board, int wait_mask, int clear_mask, int set_mask, + int *status, unsigned long usec_timeout, struct gpib_descriptor *desc); +int ibwrt(struct gpib_board *board, u8 *buf, size_t cnt, int send_eoi, size_t *bytes_written); +int ibstatus(struct gpib_board *board); +int general_ibstatus(struct gpib_board *board, const struct gpib_status_queue *device, + int clear_mask, int set_mask, struct gpib_descriptor *desc); +int io_timed_out(struct gpib_board *board); +int ibppc(struct gpib_board *board, u8 configuration); #endif /* GPIB_PROTO_INCLUDED */ diff --git a/drivers/staging/gpib/include/gpib_types.h b/drivers/staging/gpib/include/gpib_types.h index b41781a55a60..db040c80d778 100644 --- a/drivers/staging/gpib/include/gpib_types.h +++ b/drivers/staging/gpib/include/gpib_types.h @@ -8,12 +8,7 @@ #define _GPIB_TYPES_H #ifdef __KERNEL__ -/* gpib_interface_t defines the interface - * between the board-specific details dealt with in the drivers - * and generic interface provided by gpib-common. - * This really should be in a different header file. - */ -#include "gpib_user.h" +#include "gpib.h" #include <linux/atomic.h> #include <linux/device.h> #include <linux/mutex.h> @@ -22,11 +17,10 @@ #include <linux/timer.h> #include <linux/interrupt.h> -typedef struct gpib_interface_struct gpib_interface_t; -typedef struct gpib_board_struct gpib_board_t; +struct gpib_board; /* config parameters that are only used by driver attach functions */ -typedef struct { +struct gpib_board_config { /* firmware blob */ void *init_data; int init_data_length; @@ -37,11 +31,13 @@ typedef struct { unsigned int ibirq; /* dma channel to use for non-pnp cards (set by core, driver should make local copy) */ unsigned int ibdma; - /* pci bus of card, useful for distinguishing multiple identical pci cards + /* + * pci bus of card, useful for distinguishing multiple identical pci cards * (negative means don't care) */ int pci_bus; - /* pci slot of card, useful for distinguishing multiple identical pci cards + /* + * pci slot of card, useful for distinguishing multiple identical pci cards * (negative means don't care) */ int pci_slot; @@ -49,16 +45,23 @@ typedef struct { char *device_path; /* serial number of hardware to attach */ char *serial_number; -} gpib_board_config_t; +}; -struct gpib_interface_struct { +/* + * struct gpib_interface defines the interface + * between the board-specific details dealt with in the drivers + * and generic interface provided by gpib-common. + * This really should be in a different header file. + */ +struct gpib_interface { /* name of board */ char *name; /* attach() initializes board and allocates resources */ - int (*attach)(gpib_board_t *board, const gpib_board_config_t *config); + int (*attach)(struct gpib_board *board, const struct gpib_board_config *config); /* detach() shuts down board and frees resources */ - void (*detach)(gpib_board_t *board); - /* read() should read at most 'length' bytes from the bus into + void (*detach)(struct gpib_board *board); + /* + * read() should read at most 'length' bytes from the bus into * 'buffer'. It should return when it fills the buffer or * encounters an END (EOI and or EOS if appropriate). It should set 'end' * to be nonzero if the read was terminated by an END, otherwise 'end' @@ -68,76 +71,88 @@ struct gpib_interface_struct { * return indicates error. * nbytes returns number of bytes read */ - int (*read)(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, + int (*read)(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read); - /* write() should write 'length' bytes from buffer to the bus. + /* + * write() should write 'length' bytes from buffer to the bus. * If the boolean value send_eoi is nonzero, then EOI should * be sent along with the last byte. Returns number of bytes * written or negative value on error. */ - int (*write)(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, + int (*write)(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written); - /* command() writes the command bytes in 'buffer' to the bus + /* + * command() writes the command bytes in 'buffer' to the bus * Returns zero on success or negative value on error. */ - int (*command)(gpib_board_t *board, uint8_t *buffer, size_t length, + int (*command)(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written); - /* Take control (assert ATN). If 'asyncronous' is nonzero, take + /* + * Take control (assert ATN). If 'asyncronous' is nonzero, take * control asyncronously (assert ATN immediately without waiting * for other processes to complete first). Should not return * until board becomes controller in charge. Returns zero no success, * nonzero on error. */ - int (*take_control)(gpib_board_t *board, int asyncronous); - /* De-assert ATN. Returns zero on success, nonzer on error. + int (*take_control)(struct gpib_board *board, int asyncronous); + /* + * De-assert ATN. Returns zero on success, nonzer on error. */ - int (*go_to_standby)(gpib_board_t *board); + int (*go_to_standby)(struct gpib_board *board); /* request/release control of the IFC and REN lines (system controller) */ - void (*request_system_control)(gpib_board_t *board, int request_control); - /* Asserts or de-asserts 'interface clear' (IFC) depending on + int (*request_system_control)(struct gpib_board *board, int request_control); + /* + * Asserts or de-asserts 'interface clear' (IFC) depending on * boolean value of 'assert' */ - void (*interface_clear)(gpib_board_t *board, int assert); - /* Sends remote enable command if 'enable' is nonzero, disables remote mode + void (*interface_clear)(struct gpib_board *board, int assert); + /* + * Sends remote enable command if 'enable' is nonzero, disables remote mode * if 'enable' is zero */ - void (*remote_enable)(gpib_board_t *board, int enable); - /* enable END for reads, when byte 'eos' is received. If + void (*remote_enable)(struct gpib_board *board, int enable); + /* + * enable END for reads, when byte 'eos' is received. If * 'compare_8_bits' is nonzero, then all 8 bits are compared * with the eos bytes. Otherwise only the 7 least significant * bits are compared. */ - int (*enable_eos)(gpib_board_t *board, uint8_t eos, int compare_8_bits); + int (*enable_eos)(struct gpib_board *board, u8 eos, int compare_8_bits); /* disable END on eos byte (END on EOI only)*/ - void (*disable_eos)(gpib_board_t *board); + void (*disable_eos)(struct gpib_board *board); /* configure parallel poll */ - void (*parallel_poll_configure)(gpib_board_t *board, uint8_t configuration); + void (*parallel_poll_configure)(struct gpib_board *board, u8 configuration); /* conduct parallel poll */ - int (*parallel_poll)(gpib_board_t *board, uint8_t *result); + int (*parallel_poll)(struct gpib_board *board, u8 *result); /* set/clear ist (individual status bit) */ - void (*parallel_poll_response)(gpib_board_t *board, int ist); + void (*parallel_poll_response)(struct gpib_board *board, int ist); /* select local parallel poll configuration mode PP2 versus remote PP1 */ - void (*local_parallel_poll_mode)(gpib_board_t *board, int local); - /* Returns current status of the bus lines. Should be set to + void (*local_parallel_poll_mode)(struct gpib_board *board, int local); + /* + * Returns current status of the bus lines. Should be set to * NULL if your board does not have the ability to query the * state of the bus lines. */ - int (*line_status)(const gpib_board_t *board); - /* updates and returns the board's current status. + int (*line_status)(const struct gpib_board *board); + /* + * updates and returns the board's current status. * The meaning of the bits are specified in gpib_user.h * in the IBSTA section. The driver does not need to * worry about setting the CMPL, END, TIMO, or ERR bits. */ - unsigned int (*update_status)(gpib_board_t *board, unsigned int clear_mask); - /* Sets primary address 0-30 for gpib interface card. + unsigned int (*update_status)(struct gpib_board *board, unsigned int clear_mask); + /* + * Sets primary address 0-30 for gpib interface card. */ - int (*primary_address)(gpib_board_t *board, unsigned int address); - /* Sets and enables, or disables secondary address 0-30 + int (*primary_address)(struct gpib_board *board, unsigned int address); + /* + * Sets and enables, or disables secondary address 0-30 * for gpib interface card. */ - int (*secondary_address)(gpib_board_t *board, unsigned int address, + int (*secondary_address)(struct gpib_board *board, unsigned int address, int enable); - /* Sets the byte the board should send in response to a serial poll. + /* + * Sets the byte the board should send in response to a serial poll. * This function should also start or stop requests for service via * IEEE 488.2 reqt/reqf, based on MSS (bit 6 of the status_byte). * If the more flexible serial_poll_response2 is implemented by the @@ -149,8 +164,9 @@ struct gpib_interface_struct { * by IEEE 488.2 section 11.3.3.4.3 "Allowed Coupled Control of * STB, reqt, and reqf". */ - void (*serial_poll_response)(gpib_board_t *board, uint8_t status_byte); - /* Sets the byte the board should send in response to a serial poll. + void (*serial_poll_response)(struct gpib_board *board, u8 status_byte); + /* + * Sets the byte the board should send in response to a serial poll. * This function should also request service via IEEE 488.2 reqt/reqf * based on MSS (bit 6 of the status_byte) and new_reason_for_service. * reqt should be set true if new_reason_for_service is true, @@ -164,29 +180,30 @@ struct gpib_interface_struct { * If this method is left NULL by the driver, then the user library * function ibrsv2 will not work. */ - void (*serial_poll_response2)(gpib_board_t *board, uint8_t status_byte, + void (*serial_poll_response2)(struct gpib_board *board, u8 status_byte, int new_reason_for_service); - /* returns the byte the board will send in response to a serial poll. + /* + * returns the byte the board will send in response to a serial poll. */ - uint8_t (*serial_poll_status)(gpib_board_t *board); + u8 (*serial_poll_status)(struct gpib_board *board); /* adjust T1 delay */ - unsigned int (*t1_delay)(gpib_board_t *board, unsigned int nano_sec); + int (*t1_delay)(struct gpib_board *board, unsigned int nano_sec); /* go to local mode */ - void (*return_to_local)(gpib_board_t *board); + void (*return_to_local)(struct gpib_board *board); /* board does not support 7 bit eos comparisons */ unsigned no_7_bit_eos : 1; /* skip check for listeners before trying to send command bytes */ unsigned skip_check_for_command_acceptors : 1; }; -typedef struct { +struct gpib_event_queue { struct list_head event_head; spinlock_t lock; // for access to event list unsigned int num_events; unsigned dropped_event : 1; -} gpib_event_queue_t; +}; -static inline void init_event_queue(gpib_event_queue_t *queue) +static inline void init_event_queue(struct gpib_event_queue *queue) { INIT_LIST_HEAD(&queue->event_head); queue->num_events = 0; @@ -198,7 +215,7 @@ static inline void init_event_queue(gpib_event_queue_t *queue) struct gpib_pseudo_irq { struct timer_list timer; irqreturn_t (*handler)(int irq, void *arg); - gpib_board_t *board; + struct gpib_board *board; atomic_t active; }; @@ -210,20 +227,22 @@ static inline void init_gpib_pseudo_irq(struct gpib_pseudo_irq *pseudo_irq) } /* list so we can make a linked list of drivers */ -typedef struct gpib_interface_list_struct { +struct gpib_interface_list { struct list_head list; - gpib_interface_t *interface; + struct gpib_interface *interface; struct module *module; -} gpib_interface_list_t; +}; -/* One gpib_board_t is allocated for each physical board in the computer. +/* + * One struct gpib_board is allocated for each physical board in the computer. * It provides storage for variables local to each board, and interface * functions for performing operations on the board */ -struct gpib_board_struct { +struct gpib_board { /* functions used by this board */ - gpib_interface_t *interface; - /* Pointer to module whose use count we should increment when + struct gpib_interface *interface; + /* + * Pointer to module whose use count we should increment when * interface is in use */ struct module *provider_module; @@ -231,20 +250,24 @@ struct gpib_board_struct { u8 *buffer; /* length of buffer */ unsigned int buffer_length; - /* Used to hold the board's current status (see update_status() above) + /* + * Used to hold the board's current status (see update_status() above) */ unsigned long status; - /* Driver should only sleep on this wait queue. It is special in that the + /* + * Driver should only sleep on this wait queue. It is special in that the * core will wake this queue and set the TIMO bit in 'status' when the * watchdog timer times out. */ wait_queue_head_t wait; - /* Lock that only allows one process to access this board at a time. + /* + * Lock that only allows one process to access this board at a time. * Has to be first in any locking order, since it can be locked over * multiple ioctls. */ struct mutex user_mutex; - /* Mutex which compensates for removal of "big kernel lock" from kernel. + /* + * Mutex which compensates for removal of "big kernel lock" from kernel. * Should not be held for extended waits. */ struct mutex big_gpib_mutex; @@ -259,7 +282,8 @@ struct gpib_board_struct { struct device *dev; /* gpib_common device gpibN */ struct device *gpib_dev; - /* 'private_data' can be used as seen fit by the driver to + /* + * 'private_data' can be used as seen fit by the driver to * store additional variables for this board */ void *private_data; @@ -284,34 +308,36 @@ struct gpib_board_struct { /* autospoll kernel thread */ struct task_struct *autospoll_task; /* queue for recording received trigger/clear/ifc events */ - gpib_event_queue_t event_queue; + struct gpib_event_queue event_queue; /* minor number for this board's device file */ int minor; /* struct to deal with polling mode*/ struct gpib_pseudo_irq pseudo_irq; /* error dong autopoll */ atomic_t stuck_srq; - gpib_board_config_t config; + struct gpib_board_config config; /* Flag that indicates whether board is system controller of the bus */ unsigned master : 1; /* individual status bit */ unsigned ist : 1; - /* one means local parallel poll mode ieee 488.1 PP2 (or no parallel poll PP0), + /* + * one means local parallel poll mode ieee 488.1 PP2 (or no parallel poll PP0), * zero means remote parallel poll configuration mode ieee 488.1 PP1 */ unsigned local_ppoll_mode : 1; }; /* element of event queue */ -typedef struct { +struct gpib_event { struct list_head list; short event_type; -} gpib_event_t; +}; -/* Each board has a list of gpib_status_queue_t to keep track of all open devices +/* + * Each board has a list of gpib_status_queue to keep track of all open devices * on the bus, so we know what address to poll when we get a service request */ -typedef struct { +struct gpib_status_queue { /* list_head so we can make a linked list of devices */ struct list_head list; unsigned int pad; /* primary gpib address */ @@ -323,31 +349,31 @@ typedef struct { unsigned int reference_count; /* flags loss of status byte error due to limit on size of queue */ unsigned dropped_byte : 1; -} gpib_status_queue_t; +}; -typedef struct { +struct gpib_status_byte { struct list_head list; u8 poll_byte; -} status_byte_t; +}; -void init_gpib_status_queue(gpib_status_queue_t *device); +void init_gpib_status_queue(struct gpib_status_queue *device); /* Used to store device-descriptor-specific information */ -typedef struct { +struct gpib_descriptor { unsigned int pad; /* primary gpib address */ int sad; /* secondary gpib address (negative means disabled) */ atomic_t io_in_progress; unsigned is_board : 1; unsigned autopoll_enabled : 1; -} gpib_descriptor_t; +}; -typedef struct { +struct gpib_file_private { atomic_t holding_mutex; - gpib_descriptor_t *descriptors[GPIB_MAX_NUM_DESCRIPTORS]; + struct gpib_descriptor *descriptors[GPIB_MAX_NUM_DESCRIPTORS]; /* locked while descriptors are being allocated/deallocated */ struct mutex descriptors_mutex; unsigned got_module : 1; -} gpib_file_private_t; +}; #endif /* __KERNEL__ */ diff --git a/drivers/staging/gpib/include/nec7210.h b/drivers/staging/gpib/include/nec7210.h index ca998c4a84bf..312217b4580e 100644 --- a/drivers/staging/gpib/include/nec7210.h +++ b/drivers/staging/gpib/include/nec7210.h @@ -78,64 +78,64 @@ enum { }; // interface functions -int nec7210_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, +int nec7210_read(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length, int *end, size_t *bytes_read); -int nec7210_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, +int nec7210_write(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written); -int nec7210_command(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, +int nec7210_command(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length, size_t *bytes_written); -int nec7210_take_control(gpib_board_t *board, struct nec7210_priv *priv, int syncronous); -int nec7210_go_to_standby(gpib_board_t *board, struct nec7210_priv *priv); -void nec7210_request_system_control(gpib_board_t *board, - struct nec7210_priv *priv, int request_control); -void nec7210_interface_clear(gpib_board_t *board, struct nec7210_priv *priv, int assert); -void nec7210_remote_enable(gpib_board_t *board, struct nec7210_priv *priv, int enable); -int nec7210_enable_eos(gpib_board_t *board, struct nec7210_priv *priv, uint8_t eos_bytes, +int nec7210_take_control(struct gpib_board *board, struct nec7210_priv *priv, int syncronous); +int nec7210_go_to_standby(struct gpib_board *board, struct nec7210_priv *priv); +int nec7210_request_system_control(struct gpib_board *board, + struct nec7210_priv *priv, int request_control); +void nec7210_interface_clear(struct gpib_board *board, struct nec7210_priv *priv, int assert); +void nec7210_remote_enable(struct gpib_board *board, struct nec7210_priv *priv, int enable); +int nec7210_enable_eos(struct gpib_board *board, struct nec7210_priv *priv, u8 eos_bytes, int compare_8_bits); -void nec7210_disable_eos(gpib_board_t *board, struct nec7210_priv *priv); -unsigned int nec7210_update_status(gpib_board_t *board, struct nec7210_priv *priv, +void nec7210_disable_eos(struct gpib_board *board, struct nec7210_priv *priv); +unsigned int nec7210_update_status(struct gpib_board *board, struct nec7210_priv *priv, unsigned int clear_mask); -unsigned int nec7210_update_status_nolock(gpib_board_t *board, struct nec7210_priv *priv); -int nec7210_primary_address(const gpib_board_t *board, +unsigned int nec7210_update_status_nolock(struct gpib_board *board, struct nec7210_priv *priv); +int nec7210_primary_address(const struct gpib_board *board, struct nec7210_priv *priv, unsigned int address); -int nec7210_secondary_address(const gpib_board_t *board, struct nec7210_priv *priv, +int nec7210_secondary_address(const struct gpib_board *board, struct nec7210_priv *priv, unsigned int address, int enable); -int nec7210_parallel_poll(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *result); -void nec7210_serial_poll_response(gpib_board_t *board, struct nec7210_priv *priv, uint8_t status); -void nec7210_parallel_poll_configure(gpib_board_t *board, +int nec7210_parallel_poll(struct gpib_board *board, struct nec7210_priv *priv, u8 *result); +void nec7210_serial_poll_response(struct gpib_board *board, + struct nec7210_priv *priv, u8 status); +void nec7210_parallel_poll_configure(struct gpib_board *board, struct nec7210_priv *priv, unsigned int configuration); -void nec7210_parallel_poll_response(gpib_board_t *board, +void nec7210_parallel_poll_response(struct gpib_board *board, struct nec7210_priv *priv, int ist); -uint8_t nec7210_serial_poll_status(gpib_board_t *board, - struct nec7210_priv *priv); -unsigned int nec7210_t1_delay(gpib_board_t *board, - struct nec7210_priv *priv, unsigned int nano_sec); -void nec7210_return_to_local(const gpib_board_t *board, struct nec7210_priv *priv); +u8 nec7210_serial_poll_status(struct gpib_board *board, struct nec7210_priv *priv); +int nec7210_t1_delay(struct gpib_board *board, + struct nec7210_priv *priv, unsigned int nano_sec); +void nec7210_return_to_local(const struct gpib_board *board, struct nec7210_priv *priv); // utility functions -void nec7210_board_reset(struct nec7210_priv *priv, const gpib_board_t *board); -void nec7210_board_online(struct nec7210_priv *priv, const gpib_board_t *board); +void nec7210_board_reset(struct nec7210_priv *priv, const struct gpib_board *board); +void nec7210_board_online(struct nec7210_priv *priv, const struct gpib_board *board); unsigned int nec7210_set_reg_bits(struct nec7210_priv *priv, unsigned int reg, unsigned int mask, unsigned int bits); -void nec7210_set_handshake_mode(gpib_board_t *board, struct nec7210_priv *priv, int mode); -void nec7210_release_rfd_holdoff(gpib_board_t *board, struct nec7210_priv *priv); -uint8_t nec7210_read_data_in(gpib_board_t *board, struct nec7210_priv *priv, int *end); +void nec7210_set_handshake_mode(struct gpib_board *board, struct nec7210_priv *priv, int mode); +void nec7210_release_rfd_holdoff(struct gpib_board *board, struct nec7210_priv *priv); +u8 nec7210_read_data_in(struct gpib_board *board, struct nec7210_priv *priv, int *end); // wrappers for io functions -uint8_t nec7210_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num); -void nec7210_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num); -uint8_t nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num); -void nec7210_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num); -uint8_t nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num); -void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, +u8 nec7210_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num); +void nec7210_ioport_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num); +u8 nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num); +void nec7210_iomem_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num); +u8 nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num); +void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num); -uint8_t nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num); -void nec7210_locking_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, +u8 nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num); +void nec7210_locking_iomem_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num); // interrupt service routine -irqreturn_t nec7210_interrupt(gpib_board_t *board, struct nec7210_priv *priv); -irqreturn_t nec7210_interrupt_have_status(gpib_board_t *board, +irqreturn_t nec7210_interrupt(struct gpib_board *board, struct nec7210_priv *priv); +irqreturn_t nec7210_interrupt_have_status(struct gpib_board *board, struct nec7210_priv *priv, int status1, int status2); #endif //_NEC7210_H diff --git a/drivers/staging/gpib/include/nec7210_registers.h b/drivers/staging/gpib/include/nec7210_registers.h index 888803dd97f9..97c53ac8e805 100644 --- a/drivers/staging/gpib/include/nec7210_registers.h +++ b/drivers/staging/gpib/include/nec7210_registers.h @@ -17,7 +17,8 @@ enum nec7210_chipset { TNT5004, // NI (minor differences to TNT4882) }; -/* nec7210 register numbers (might need to be multiplied by +/* + * nec7210 register numbers (might need to be multiplied by * a board-dependent offset to get actually io address offset) */ // write registers diff --git a/drivers/staging/gpib/include/tms9914.h b/drivers/staging/gpib/include/tms9914.h index d8c8d1c9b131..50a9d3b22619 100644 --- a/drivers/staging/gpib/include/tms9914.h +++ b/drivers/staging/gpib/include/tms9914.h @@ -79,59 +79,61 @@ enum { }; // interface functions -int tms9914_read(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer, +int tms9914_read(struct gpib_board *board, struct tms9914_priv *priv, u8 *buffer, size_t length, int *end, size_t *bytes_read); -int tms9914_write(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer, +int tms9914_write(struct gpib_board *board, struct tms9914_priv *priv, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written); -int tms9914_command(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer, +int tms9914_command(struct gpib_board *board, struct tms9914_priv *priv, u8 *buffer, size_t length, size_t *bytes_written); -int tms9914_take_control(gpib_board_t *board, struct tms9914_priv *priv, int syncronous); -/* alternate version of tms9914_take_control which works around buggy tcs +int tms9914_take_control(struct gpib_board *board, struct tms9914_priv *priv, int syncronous); +/* + * alternate version of tms9914_take_control which works around buggy tcs * implementation. */ -int tms9914_take_control_workaround(gpib_board_t *board, struct tms9914_priv *priv, +int tms9914_take_control_workaround(struct gpib_board *board, struct tms9914_priv *priv, int syncronous); -int tms9914_go_to_standby(gpib_board_t *board, struct tms9914_priv *priv); -void tms9914_request_system_control(gpib_board_t *board, struct tms9914_priv *priv, - int request_control); -void tms9914_interface_clear(gpib_board_t *board, struct tms9914_priv *priv, int assert); -void tms9914_remote_enable(gpib_board_t *board, struct tms9914_priv *priv, int enable); -int tms9914_enable_eos(gpib_board_t *board, struct tms9914_priv *priv, uint8_t eos_bytes, +int tms9914_go_to_standby(struct gpib_board *board, struct tms9914_priv *priv); +int tms9914_request_system_control(struct gpib_board *board, struct tms9914_priv *priv, + int request_control); +void tms9914_interface_clear(struct gpib_board *board, struct tms9914_priv *priv, int assert); +void tms9914_remote_enable(struct gpib_board *board, struct tms9914_priv *priv, int enable); +int tms9914_enable_eos(struct gpib_board *board, struct tms9914_priv *priv, u8 eos_bytes, int compare_8_bits); -void tms9914_disable_eos(gpib_board_t *board, struct tms9914_priv *priv); -unsigned int tms9914_update_status(gpib_board_t *board, struct tms9914_priv *priv, +void tms9914_disable_eos(struct gpib_board *board, struct tms9914_priv *priv); +unsigned int tms9914_update_status(struct gpib_board *board, struct tms9914_priv *priv, unsigned int clear_mask); -int tms9914_primary_address(gpib_board_t *board, +int tms9914_primary_address(struct gpib_board *board, struct tms9914_priv *priv, unsigned int address); -int tms9914_secondary_address(gpib_board_t *board, struct tms9914_priv *priv, +int tms9914_secondary_address(struct gpib_board *board, struct tms9914_priv *priv, unsigned int address, int enable); -int tms9914_parallel_poll(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *result); -void tms9914_parallel_poll_configure(gpib_board_t *board, - struct tms9914_priv *priv, uint8_t config); -void tms9914_parallel_poll_response(gpib_board_t *board, +int tms9914_parallel_poll(struct gpib_board *board, struct tms9914_priv *priv, u8 *result); +void tms9914_parallel_poll_configure(struct gpib_board *board, + struct tms9914_priv *priv, u8 config); +void tms9914_parallel_poll_response(struct gpib_board *board, struct tms9914_priv *priv, int ist); -void tms9914_serial_poll_response(gpib_board_t *board, struct tms9914_priv *priv, uint8_t status); -uint8_t tms9914_serial_poll_status(gpib_board_t *board, struct tms9914_priv *priv); -int tms9914_line_status(const gpib_board_t *board, struct tms9914_priv *priv); -unsigned int tms9914_t1_delay(gpib_board_t *board, struct tms9914_priv *priv, +void tms9914_serial_poll_response(struct gpib_board *board, + struct tms9914_priv *priv, u8 status); +u8 tms9914_serial_poll_status(struct gpib_board *board, struct tms9914_priv *priv); +int tms9914_line_status(const struct gpib_board *board, struct tms9914_priv *priv); +unsigned int tms9914_t1_delay(struct gpib_board *board, struct tms9914_priv *priv, unsigned int nano_sec); -void tms9914_return_to_local(const gpib_board_t *board, struct tms9914_priv *priv); +void tms9914_return_to_local(const struct gpib_board *board, struct tms9914_priv *priv); // utility functions void tms9914_board_reset(struct tms9914_priv *priv); -void tms9914_online(gpib_board_t *board, struct tms9914_priv *priv); +void tms9914_online(struct gpib_board *board, struct tms9914_priv *priv); void tms9914_release_holdoff(struct tms9914_priv *priv); void tms9914_set_holdoff_mode(struct tms9914_priv *priv, enum tms9914_holdoff_mode mode); // wrappers for io functions -uint8_t tms9914_ioport_read_byte(struct tms9914_priv *priv, unsigned int register_num); -void tms9914_ioport_write_byte(struct tms9914_priv *priv, uint8_t data, unsigned int register_num); -uint8_t tms9914_iomem_read_byte(struct tms9914_priv *priv, unsigned int register_num); -void tms9914_iomem_write_byte(struct tms9914_priv *priv, uint8_t data, unsigned int register_num); +u8 tms9914_ioport_read_byte(struct tms9914_priv *priv, unsigned int register_num); +void tms9914_ioport_write_byte(struct tms9914_priv *priv, u8 data, unsigned int register_num); +u8 tms9914_iomem_read_byte(struct tms9914_priv *priv, unsigned int register_num); +void tms9914_iomem_write_byte(struct tms9914_priv *priv, u8 data, unsigned int register_num); // interrupt service routine -irqreturn_t tms9914_interrupt(gpib_board_t *board, struct tms9914_priv *priv); -irqreturn_t tms9914_interrupt_have_status(gpib_board_t *board, struct tms9914_priv *priv, +irqreturn_t tms9914_interrupt(struct gpib_board *board, struct tms9914_priv *priv); +irqreturn_t tms9914_interrupt_have_status(struct gpib_board *board, struct tms9914_priv *priv, int status1, int status2); // tms9914 has 8 registers @@ -139,7 +141,8 @@ enum { ms9914_num_registers = 8, }; -/* tms9914 register numbers (might need to be multiplied by +/* + * tms9914 register numbers (might need to be multiplied by * a board-dependent offset to get actually io address offset) */ // write registers diff --git a/drivers/staging/gpib/ines/Makefile b/drivers/staging/gpib/ines/Makefile index 6b6e480fd811..88241f15ecea 100644 --- a/drivers/staging/gpib/ines/Makefile +++ b/drivers/staging/gpib/ines/Makefile @@ -1,4 +1,3 @@ -ccflags-$(CONFIG_GPIB_PCMCIA) := -DGPIB_PCMCIA obj-$(CONFIG_GPIB_INES) += ines_gpib.o diff --git a/drivers/staging/gpib/ines/ines.h b/drivers/staging/gpib/ines/ines.h index 3918737fa21a..f0210ce2470d 100644 --- a/drivers/staging/gpib/ines/ines.h +++ b/drivers/staging/gpib/ines/ines.h @@ -35,44 +35,6 @@ struct ines_priv { u8 extend_mode_bits; }; -// interface functions -int ines_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read); -int ines_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written); -int ines_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, - int *end, size_t *bytes_read); -int ines_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written); -int ines_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written); -int ines_take_control(gpib_board_t *board, int synchronous); -int ines_go_to_standby(gpib_board_t *board); -void ines_request_system_control(gpib_board_t *board, int request_control); -void ines_interface_clear(gpib_board_t *board, int assert); -void ines_remote_enable(gpib_board_t *board, int enable); -int ines_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits); -void ines_disable_eos(gpib_board_t *board); -unsigned int ines_update_status(gpib_board_t *board, unsigned int clear_mask); -int ines_primary_address(gpib_board_t *board, unsigned int address); -int ines_secondary_address(gpib_board_t *board, unsigned int address, int enable); -int ines_parallel_poll(gpib_board_t *board, uint8_t *result); -void ines_parallel_poll_configure(gpib_board_t *board, uint8_t config); -void ines_parallel_poll_response(gpib_board_t *board, int ist); -void ines_serial_poll_response(gpib_board_t *board, uint8_t status); -uint8_t ines_serial_poll_status(gpib_board_t *board); -int ines_line_status(const gpib_board_t *board); -unsigned int ines_t1_delay(gpib_board_t *board, unsigned int nano_sec); -void ines_return_to_local(gpib_board_t *board); - -// interrupt service routines -irqreturn_t ines_pci_interrupt(int irq, void *arg); -irqreturn_t ines_interrupt(gpib_board_t *board); - -// utility functions -void ines_free_private(gpib_board_t *board); -int ines_generic_attach(gpib_board_t *board); -void ines_online(struct ines_priv *priv, const gpib_board_t *board, int use_accel); -void ines_set_xfer_counter(struct ines_priv *priv, unsigned int count); - /* inb/outb wrappers */ static inline unsigned int ines_inb(struct ines_priv *priv, unsigned int register_number) { @@ -87,11 +49,6 @@ static inline void ines_outb(struct ines_priv *priv, unsigned int value, register_number * priv->nec7210_priv.offset); } -// pcmcia init/cleanup - -int ines_pcmcia_init_module(void); -void ines_pcmcia_cleanup_module(void); - enum ines_regs { // read FIFO_STATUS = 0x8, diff --git a/drivers/staging/gpib/ines/ines_gpib.c b/drivers/staging/gpib/ines/ines_gpib.c index 22a05a287bce..c851fd014f48 100644 --- a/drivers/staging/gpib/ines/ines_gpib.c +++ b/drivers/staging/gpib/ines/ines_gpib.c @@ -5,6 +5,10 @@ * (C) 2002 by Frank Mori Hess ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include "ines.h" #include <linux/pci.h> @@ -21,49 +25,49 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB driver for Ines iGPIB 72010"); -int ines_line_status(const gpib_board_t *board) +static irqreturn_t ines_interrupt(struct gpib_board *board); + +static int ines_line_status(const struct gpib_board *board) { - int status = ValidALL; + int status = VALID_ALL; int bcm_bits; struct ines_priv *ines_priv; - struct nec7210_priv *nec_priv; ines_priv = board->private_data; - nec_priv = &ines_priv->nec7210_priv; bcm_bits = ines_inb(ines_priv, BUS_CONTROL_MONITOR); if (bcm_bits & BCM_REN_BIT) - status |= BusREN; + status |= BUS_REN; if (bcm_bits & BCM_IFC_BIT) - status |= BusIFC; + status |= BUS_IFC; if (bcm_bits & BCM_SRQ_BIT) - status |= BusSRQ; + status |= BUS_SRQ; if (bcm_bits & BCM_EOI_BIT) - status |= BusEOI; + status |= BUS_EOI; if (bcm_bits & BCM_NRFD_BIT) - status |= BusNRFD; + status |= BUS_NRFD; if (bcm_bits & BCM_NDAC_BIT) - status |= BusNDAC; + status |= BUS_NDAC; if (bcm_bits & BCM_DAV_BIT) - status |= BusDAV; + status |= BUS_DAV; if (bcm_bits & BCM_ATN_BIT) - status |= BusATN; + status |= BUS_ATN; return status; } -void ines_set_xfer_counter(struct ines_priv *priv, unsigned int count) +static void ines_set_xfer_counter(struct ines_priv *priv, unsigned int count) { if (count > 0xffff) { - pr_err("ines: bug! tried to set xfer counter > 0xffff\n"); + pr_err("bug! tried to set xfer counter > 0xffff\n"); return; } ines_outb(priv, (count >> 8) & 0xff, XFER_COUNT_UPPER); ines_outb(priv, count & 0xff, XFER_COUNT_LOWER); } -unsigned int ines_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int ines_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct ines_priv *ines_priv = board->private_data; struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv; @@ -93,7 +97,7 @@ static inline unsigned short num_in_fifo_bytes(struct ines_priv *ines_priv) return ines_inb(ines_priv, IN_FIFO_COUNT); } -static ssize_t pio_read(gpib_board_t *board, struct ines_priv *ines_priv, uint8_t *buffer, +static ssize_t pio_read(struct gpib_board *board, struct ines_priv *ines_priv, u8 *buffer, size_t length, size_t *nbytes) { ssize_t retval = 0; @@ -106,21 +110,18 @@ static ssize_t pio_read(gpib_board_t *board, struct ines_priv *ines_priv, uint8_ num_in_fifo_bytes(ines_priv) || test_bit(RECEIVED_END_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || - test_bit(TIMO_NUM, &board->status))) { - pr_warn("gpib: pio read wait interrupted\n"); + test_bit(TIMO_NUM, &board->status))) return -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) return -ETIMEDOUT; if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) return -EINTR; num_fifo_bytes = num_in_fifo_bytes(ines_priv); - if (num_fifo_bytes + *nbytes > length) { - pr_warn("ines: counter allowed %li extra byte(s)\n", - (long)(num_fifo_bytes - (length - *nbytes))); + if (num_fifo_bytes + *nbytes > length) num_fifo_bytes = length - *nbytes; - } + for (i = 0; i < num_fifo_bytes; i++) buffer[(*nbytes)++] = read_byte(nec_priv, DIR); if (test_bit(RECEIVED_END_BN, &nec_priv->state) && @@ -134,8 +135,8 @@ static ssize_t pio_read(gpib_board_t *board, struct ines_priv *ines_priv, uint8_ return retval; } -int ines_accel_read(gpib_board_t *board, uint8_t *buffer, - size_t length, int *end, size_t *bytes_read) +static int ines_accel_read(struct gpib_board *board, u8 *buffer, + size_t length, int *end, size_t *bytes_read) { ssize_t retval = 0; struct ines_priv *ines_priv = board->private_data; @@ -191,7 +192,7 @@ static inline unsigned short num_out_fifo_bytes(struct ines_priv *ines_priv) return ines_inb(ines_priv, OUT_FIFO_COUNT); } -static int ines_write_wait(gpib_board_t *board, struct ines_priv *ines_priv, +static int ines_write_wait(struct gpib_board *board, struct ines_priv *ines_priv, unsigned int fifo_threshold) { struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv; @@ -201,10 +202,9 @@ static int ines_write_wait(gpib_board_t *board, struct ines_priv *ines_priv, num_out_fifo_bytes(ines_priv) < fifo_threshold || test_bit(BUS_ERROR_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib write interrupted\n"); + test_bit(TIMO_NUM, &board->status))) return -ERESTARTSYS; - } + if (test_bit(BUS_ERROR_BN, &nec_priv->state)) return -EIO; if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) @@ -215,8 +215,8 @@ static int ines_write_wait(gpib_board_t *board, struct ines_priv *ines_priv, return 0; } -int ines_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written) +static int ines_accel_write(struct gpib_board *board, u8 *buffer, size_t length, + int send_eoi, size_t *bytes_written) { size_t count = 0; ssize_t retval = 0; @@ -266,9 +266,9 @@ int ines_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, return retval; } -irqreturn_t ines_pci_interrupt(int irq, void *arg) +static irqreturn_t ines_pci_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct ines_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; @@ -283,7 +283,7 @@ irqreturn_t ines_pci_interrupt(int irq, void *arg) return ines_interrupt(board); } -irqreturn_t ines_interrupt(gpib_board_t *board) +static irqreturn_t ines_interrupt(struct gpib_board *board) { struct ines_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; @@ -297,11 +297,11 @@ irqreturn_t ines_interrupt(gpib_board_t *board) isr3_bits = ines_inb(priv, ISR3); isr4_bits = ines_inb(priv, ISR4); if (isr3_bits & IFC_ACTIVE_BIT) { - push_gpib_event(board, EventIFC); + push_gpib_event(board, EVENT_IFC); wake++; } if (isr3_bits & FIFO_ERROR_BIT) - pr_err("ines gpib: fifo error\n"); + dev_err(board->gpib_dev, "fifo error\n"); if (isr3_bits & XFER_COUNT_BIT) wake++; @@ -315,12 +315,12 @@ irqreturn_t ines_interrupt(gpib_board_t *board) return IRQ_HANDLED; } -static int ines_pci_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int ines_pci_accel_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int ines_isa_attach(gpib_board_t *board, const gpib_board_config_t *config); +static int ines_pci_attach(struct gpib_board *board, const struct gpib_board_config *config); +static int ines_pci_accel_attach(struct gpib_board *board, const struct gpib_board_config *config); +static int ines_isa_attach(struct gpib_board *board, const struct gpib_board_config *config); -static void ines_pci_detach(gpib_board_t *board); -static void ines_isa_detach(gpib_board_t *board); +static void ines_pci_detach(struct gpib_board *board); +static void ines_isa_detach(struct gpib_board *board); enum ines_pci_vendor_ids { PCI_VENDOR_ID_INES_QUICKLOGIC = 0x16da @@ -395,7 +395,8 @@ static struct ines_pci_id pci_ids[] = { static const int num_pci_chips = ARRAY_SIZE(pci_ids); // wrappers for interface functions -int ines_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read) +static int ines_read(struct gpib_board *board, u8 *buffer, size_t length, + int *end, size_t *bytes_read) { struct ines_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; @@ -413,134 +414,134 @@ int ines_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, siz return retval; } -int ines_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) +static int ines_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, + size_t *bytes_written) { struct ines_priv *priv = board->private_data; return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written); } -int ines_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int ines_command(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written) { struct ines_priv *priv = board->private_data; return nec7210_command(board, &priv->nec7210_priv, buffer, length, bytes_written); } -int ines_take_control(gpib_board_t *board, int synchronous) +static int ines_take_control(struct gpib_board *board, int synchronous) { struct ines_priv *priv = board->private_data; return nec7210_take_control(board, &priv->nec7210_priv, synchronous); } -int ines_go_to_standby(gpib_board_t *board) +static int ines_go_to_standby(struct gpib_board *board) { struct ines_priv *priv = board->private_data; return nec7210_go_to_standby(board, &priv->nec7210_priv); } -void ines_request_system_control(gpib_board_t *board, int request_control) +static int ines_request_system_control(struct gpib_board *board, int request_control) { struct ines_priv *priv = board->private_data; - nec7210_request_system_control(board, &priv->nec7210_priv, request_control); + return nec7210_request_system_control(board, &priv->nec7210_priv, request_control); } -void ines_interface_clear(gpib_board_t *board, int assert) +static void ines_interface_clear(struct gpib_board *board, int assert) { struct ines_priv *priv = board->private_data; nec7210_interface_clear(board, &priv->nec7210_priv, assert); } -void ines_remote_enable(gpib_board_t *board, int enable) +static void ines_remote_enable(struct gpib_board *board, int enable) { struct ines_priv *priv = board->private_data; nec7210_remote_enable(board, &priv->nec7210_priv, enable); } -int ines_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int ines_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct ines_priv *priv = board->private_data; return nec7210_enable_eos(board, &priv->nec7210_priv, eos_byte, compare_8_bits); } -void ines_disable_eos(gpib_board_t *board) +static void ines_disable_eos(struct gpib_board *board) { struct ines_priv *priv = board->private_data; nec7210_disable_eos(board, &priv->nec7210_priv); } -unsigned int ines_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int ines_update_status(struct gpib_board *board, unsigned int clear_mask) { struct ines_priv *priv = board->private_data; return nec7210_update_status(board, &priv->nec7210_priv, clear_mask); } -int ines_primary_address(gpib_board_t *board, unsigned int address) +static int ines_primary_address(struct gpib_board *board, unsigned int address) { struct ines_priv *priv = board->private_data; return nec7210_primary_address(board, &priv->nec7210_priv, address); } -int ines_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int ines_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct ines_priv *priv = board->private_data; return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable); } -int ines_parallel_poll(gpib_board_t *board, uint8_t *result) +static int ines_parallel_poll(struct gpib_board *board, u8 *result) { struct ines_priv *priv = board->private_data; return nec7210_parallel_poll(board, &priv->nec7210_priv, result); } -void ines_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void ines_parallel_poll_configure(struct gpib_board *board, u8 config) { struct ines_priv *priv = board->private_data; nec7210_parallel_poll_configure(board, &priv->nec7210_priv, config); } -void ines_parallel_poll_response(gpib_board_t *board, int ist) +static void ines_parallel_poll_response(struct gpib_board *board, int ist) { struct ines_priv *priv = board->private_data; nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist); } -void ines_serial_poll_response(gpib_board_t *board, uint8_t status) +static void ines_serial_poll_response(struct gpib_board *board, u8 status) { struct ines_priv *priv = board->private_data; nec7210_serial_poll_response(board, &priv->nec7210_priv, status); } -uint8_t ines_serial_poll_status(gpib_board_t *board) +static u8 ines_serial_poll_status(struct gpib_board *board) { struct ines_priv *priv = board->private_data; return nec7210_serial_poll_status(board, &priv->nec7210_priv); } -void ines_return_to_local(gpib_board_t *board) +static void ines_return_to_local(struct gpib_board *board) { struct ines_priv *priv = board->private_data; nec7210_return_to_local(board, &priv->nec7210_priv); } -static gpib_interface_t ines_pci_unaccel_interface = { +static struct gpib_interface ines_pci_unaccel_interface = { .name = "ines_pci_unaccel", .attach = ines_pci_attach, .detach = ines_pci_detach, @@ -568,7 +569,7 @@ static gpib_interface_t ines_pci_unaccel_interface = { .return_to_local = ines_return_to_local, }; -static gpib_interface_t ines_pci_interface = { +static struct gpib_interface ines_pci_interface = { .name = "ines_pci", .attach = ines_pci_accel_attach, .detach = ines_pci_detach, @@ -596,7 +597,7 @@ static gpib_interface_t ines_pci_interface = { .return_to_local = ines_return_to_local, }; -static gpib_interface_t ines_pci_accel_interface = { +static struct gpib_interface ines_pci_accel_interface = { .name = "ines_pci_accel", .attach = ines_pci_accel_attach, .detach = ines_pci_detach, @@ -624,7 +625,7 @@ static gpib_interface_t ines_pci_accel_interface = { .return_to_local = ines_return_to_local, }; -static gpib_interface_t ines_isa_interface = { +static struct gpib_interface ines_isa_interface = { .name = "ines_isa", .attach = ines_isa_attach, .detach = ines_isa_detach, @@ -652,7 +653,7 @@ static gpib_interface_t ines_isa_interface = { .return_to_local = ines_return_to_local, }; -static int ines_allocate_private(gpib_board_t *board) +static int ines_allocate_private(struct gpib_board *board) { struct ines_priv *priv; @@ -665,13 +666,13 @@ static int ines_allocate_private(gpib_board_t *board) return 0; } -void ines_free_private(gpib_board_t *board) +static void ines_free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; } -int ines_generic_attach(gpib_board_t *board) +static int ines_generic_attach(struct gpib_board *board) { struct ines_priv *ines_priv; struct nec7210_priv *nec_priv; @@ -691,7 +692,7 @@ int ines_generic_attach(gpib_board_t *board) return 0; } -void ines_online(struct ines_priv *ines_priv, const gpib_board_t *board, int use_accel) +static void ines_online(struct ines_priv *ines_priv, const struct gpib_board *board, int use_accel) { struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv; @@ -725,7 +726,7 @@ void ines_online(struct ines_priv *ines_priv, const gpib_board_t *board, int use nec7210_set_reg_bits(nec_priv, IMR1, HR_DOIE | HR_DIIE, 0); } -static int ines_common_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ines_common_pci_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct ines_priv *ines_priv; struct nec7210_priv *nec_priv; @@ -769,16 +770,16 @@ static int ines_common_pci_attach(gpib_board_t *board, const gpib_board_config_t } while (1); } if (!ines_priv->pci_device) { - pr_err("gpib: could not find ines PCI board\n"); + dev_err(board->gpib_dev, "could not find ines PCI board\n"); return -1; } if (pci_enable_device(ines_priv->pci_device)) { - pr_err("error enabling pci device\n"); + dev_err(board->gpib_dev, "error enabling pci device\n"); return -1; } - if (pci_request_regions(ines_priv->pci_device, "ines-gpib")) + if (pci_request_regions(ines_priv->pci_device, DRV_NAME)) return -1; nec_priv->iobase = pci_resource_start(ines_priv->pci_device, found_id.gpib_region); @@ -797,7 +798,7 @@ static int ines_common_pci_attach(gpib_board_t *board, const gpib_board_config_t case PCI_CHIP_QUICKLOGIC5030: break; default: - pr_err("gpib: unspecified chip type? (bug)\n"); + dev_err(board->gpib_dev, "unspecified chip type? (bug)\n"); nec_priv->iobase = 0; pci_release_regions(ines_priv->pci_device); return -1; @@ -813,8 +814,8 @@ static int ines_common_pci_attach(gpib_board_t *board, const gpib_board_config_t #endif isr_flags |= IRQF_SHARED; if (request_irq(ines_priv->pci_device->irq, ines_pci_interrupt, isr_flags, - "pci-gpib", board)) { - pr_err("gpib: can't request IRQ %d\n", ines_priv->pci_device->irq); + DRV_NAME, board)) { + dev_err(board->gpib_dev, "can't request IRQ %d\n", ines_priv->pci_device->irq); return -1; } ines_priv->irq = ines_priv->pci_device->irq; @@ -846,14 +847,14 @@ static int ines_common_pci_attach(gpib_board_t *board, const gpib_board_config_t case PCI_CHIP_QUICKLOGIC5030: break; default: - pr_err("gpib: unspecified chip type? (bug)\n"); + dev_err(board->gpib_dev, "unspecified chip type? (bug)\n"); return -1; } return 0; } -int ines_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ines_pci_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct ines_priv *ines_priv; int retval; @@ -868,7 +869,7 @@ int ines_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) return 0; } -int ines_pci_accel_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ines_pci_accel_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct ines_priv *ines_priv; int retval; @@ -885,7 +886,7 @@ int ines_pci_accel_attach(gpib_board_t *board, const gpib_board_config_t *config static const int ines_isa_iosize = 0x20; -int ines_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ines_isa_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct ines_priv *ines_priv; struct nec7210_priv *nec_priv; @@ -899,15 +900,16 @@ int ines_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) ines_priv = board->private_data; nec_priv = &ines_priv->nec7210_priv; - if (!request_region(config->ibbase, ines_isa_iosize, "ines_gpib")) { - pr_err("ines_gpib: ioports at 0x%x already in use\n", config->ibbase); - return -1; + if (!request_region(config->ibbase, ines_isa_iosize, DRV_NAME)) { + dev_err(board->gpib_dev, "ioports at 0x%x already in use\n", + config->ibbase); + return -EBUSY; } nec_priv->iobase = config->ibbase; nec_priv->offset = 1; nec7210_board_reset(nec_priv, board); - if (request_irq(config->ibirq, ines_pci_interrupt, isr_flags, "ines_gpib", board)) { - pr_err("ines_gpib: failed to allocate IRQ %d\n", config->ibirq); + if (request_irq(config->ibirq, ines_pci_interrupt, isr_flags, DRV_NAME, board)) { + dev_err(board->gpib_dev, "failed to allocate IRQ %d\n", config->ibirq); return -1; } ines_priv->irq = config->ibirq; @@ -915,7 +917,7 @@ int ines_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) return 0; } -void ines_pci_detach(gpib_board_t *board) +static void ines_pci_detach(struct gpib_board *board) { struct ines_priv *ines_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -949,7 +951,7 @@ void ines_pci_detach(gpib_board_t *board) ines_free_private(board); } -void ines_isa_detach(gpib_board_t *board) +static void ines_isa_detach(struct gpib_board *board) { struct ines_priv *ines_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -977,7 +979,7 @@ static struct pci_driver ines_pci_driver = { .probe = &ines_pci_probe }; -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA #include <linux/kernel.h> #include <linux/ptrace.h> @@ -988,74 +990,68 @@ static struct pci_driver ines_pci_driver = { #include <pcmcia/ds.h> #include <pcmcia/cisreg.h> -#ifdef PCMCIA_DEBUG -static int pc_debug = PCMCIA_DEBUG; -#define DEBUG(n, args...) do {if (pc_debug > (n)) pr_debug(args)} while (0) -#else -#define DEBUG(args...) -#endif - static const int ines_pcmcia_iosize = 0x20; -/* The event() function is this driver's Card Services event handler. - * It will be called by Card Services when an appropriate card status - * event is received. The config() and release() entry points are - * used to configure or release a socket, in response to card insertion - * and ejection events. They are invoked from the gpib event - * handler. +/* + * The event() function is this driver's Card Services event handler. + * It will be called by Card Services when an appropriate card status + * event is received. The config() and release() entry points are + * used to configure or release a socket, in response to card insertion + * and ejection events. They are invoked from the gpib event + * handler. */ static int ines_gpib_config(struct pcmcia_device *link); static void ines_gpib_release(struct pcmcia_device *link); -static int ines_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int ines_pcmcia_accel_attach(gpib_board_t *board, const gpib_board_config_t *config); -static void ines_pcmcia_detach(gpib_board_t *board); -static irqreturn_t ines_pcmcia_interrupt(int irq, void *arg); -static int ines_common_pcmcia_attach(gpib_board_t *board); +static int ines_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config); +static int ines_pcmcia_accel_attach(struct gpib_board *board, + const struct gpib_board_config *config); +static void ines_pcmcia_detach(struct gpib_board *board); +static int ines_common_pcmcia_attach(struct gpib_board *board); /* * A linked list of "instances" of the gpib device. Each actual - * PCMCIA card corresponds to one device instance, and is described - * by one dev_link_t structure (defined in ds.h). + * PCMCIA card corresponds to one device instance, and is described + * by one dev_link_t structure (defined in ds.h). * - * You may not want to use a linked list for this -- for example, the - * memory card driver uses an array of dev_link_t pointers, where minor - * device numbers are used to derive the corresponding array index. + * You may not want to use a linked list for this -- for example, the + * memory card driver uses an array of dev_link_t pointers, where minor + * device numbers are used to derive the corresponding array index. */ static struct pcmcia_device *curr_dev; /* - * A dev_link_t structure has fields for most things that are needed - * to keep track of a socket, but there will usually be some device - * specific information that also needs to be kept track of. The - * 'priv' pointer in a dev_link_t structure can be used to point to - * a device-specific private data structure, like this. + * A dev_link_t structure has fields for most things that are needed + * to keep track of a socket, but there will usually be some device + * specific information that also needs to be kept track of. The + * 'priv' pointer in a dev_link_t structure can be used to point to + * a device-specific private data structure, like this. * - * A driver needs to provide a dev_node_t structure for each device - * on a card. In some cases, there is only one device per card (for - * example, ethernet cards, modems). In other cases, there may be - * many actual or logical devices (SCSI adapters, memory cards with - * multiple partitions). The dev_node_t structures need to be kept - * in a linked list starting at the 'dev' field of a dev_link_t - * structure. We allocate them in the card's private data structure, - * because they generally can't be allocated dynamically. + * A driver needs to provide a dev_node_t structure for each device + * on a card. In some cases, there is only one device per card (for + * example, ethernet cards, modems). In other cases, there may be + * many actual or logical devices (SCSI adapters, memory cards with + * multiple partitions). The dev_node_t structures need to be kept + * in a linked list starting at the 'dev' field of a dev_link_t + * structure. We allocate them in the card's private data structure, + * because they generally can't be allocated dynamically. */ struct local_info { struct pcmcia_device *p_dev; - gpib_board_t *dev; + struct gpib_board *dev; u_short manfid; u_short cardid; }; /* - * gpib_attach() creates an "instance" of the driver, allocating - * local data structures for one device. The device is registered - * with Card Services. + * gpib_attach() creates an "instance" of the driver, allocating + * local data structures for one device. The device is registered + * with Card Services. * - * The dev_link structure is initialized, but we don't actually - * configure the card at this point -- we wait until we receive a - * card insertion event. + * The dev_link structure is initialized, but we don't actually + * configure the card at this point -- we wait until we receive a + * card insertion event. */ static int ines_gpib_probe(struct pcmcia_device *link) { @@ -1063,8 +1059,6 @@ static int ines_gpib_probe(struct pcmcia_device *link) // int ret, i; - DEBUG(0, "%s(0x%p)\n", __func__ link); - /* Allocate space for private device-specific data */ info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) @@ -1088,17 +1082,15 @@ static int ines_gpib_probe(struct pcmcia_device *link) } /* - * This deletes a driver "instance". The device is de-registered - * with Card Services. If it has been released, all local data - * structures are freed. Otherwise, the structures will be freed - * when the device is released. + * This deletes a driver "instance". The device is de-registered + * with Card Services. If it has been released, all local data + * structures are freed. Otherwise, the structures will be freed + * when the device is released. */ static void ines_gpib_remove(struct pcmcia_device *link) { struct local_info *info = link->priv; - //struct gpib_board_t *dev = info->dev; - - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; if (info->dev) ines_pcmcia_detach(info->dev); @@ -1114,19 +1106,15 @@ static int ines_gpib_config_iteration(struct pcmcia_device *link, void *priv_dat } /* - * gpib_config() is scheduled to run after a CARD_INSERTION event - * is received, to configure the PCMCIA socket, and to make the - * device available to the system. + * gpib_config() is scheduled to run after a CARD_INSERTION event + * is received, to configure the PCMCIA socket, and to make the + * device available to the system. */ static int ines_gpib_config(struct pcmcia_device *link) { - struct local_info *dev; int retval; void __iomem *virt; - dev = link->priv; - DEBUG(0, "%s(0x%p)\n", __func__, link); - retval = pcmcia_loop_config(link, &ines_gpib_config_iteration, NULL); if (retval) { dev_warn(&link->dev, "no configuration found\n"); @@ -1134,11 +1122,12 @@ static int ines_gpib_config(struct pcmcia_device *link) return -ENODEV; } - pr_debug("ines_cs: manufacturer: 0x%x card: 0x%x\n", - link->manf_id, link->card_id); + dev_dbg(&link->dev, "ines_cs: manufacturer: 0x%x card: 0x%x\n", + link->manf_id, link->card_id); - /* for the ines card we have to setup the configuration registers in - * attribute memory here + /* + * for the ines card we have to setup the configuration registers in + * attribute memory here */ link->resource[2]->flags |= WIN_MEMORY_TYPE_AM | WIN_DATA_WIDTH_8 | WIN_ENABLE; link->resource[2]->end = 0x1000; @@ -1167,30 +1156,27 @@ static int ines_gpib_config(struct pcmcia_device *link) ines_gpib_release(link); return -ENODEV; } - pr_info("ines gpib device loaded\n"); return 0; } /* gpib_config */ /* - * After a card is removed, gpib_release() will unregister the net - * device, and release the PCMCIA configuration. If the device is - * still open, this will be postponed until it is closed. + * After a card is removed, gpib_release() will unregister the net + * device, and release the PCMCIA configuration. If the device is + * still open, this will be postponed until it is closed. */ static void ines_gpib_release(struct pcmcia_device *link) { - DEBUG(0, "%s(0x%p)\n", __func__, link); pcmcia_disable_device(link); } /* gpib_release */ static int ines_gpib_suspend(struct pcmcia_device *link) { //struct local_info *info = link->priv; - //struct gpib_board_t *dev = info->dev; - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; if (link->open) - pr_err("Device still open ???\n"); + dev_err(&link->dev, "Device still open\n"); //netif_device_detach(dev); return 0; @@ -1199,12 +1185,10 @@ static int ines_gpib_suspend(struct pcmcia_device *link) static int ines_gpib_resume(struct pcmcia_device *link) { //struct local_info_t *info = link->priv; - //struct gpib_board_t *dev = info->dev; - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; /*if (link->open) { * ni_gpib_probe(dev); / really? - * printk("Gpib resumed ???\n"); * //netif_device_attach(dev); *} */ @@ -1227,13 +1211,12 @@ static struct pcmcia_driver ines_gpib_cs_driver = { .resume = ines_gpib_resume, }; -void ines_pcmcia_cleanup_module(void) +static void ines_pcmcia_cleanup_module(void) { - DEBUG(0, "ines_cs: unloading\n"); pcmcia_unregister_driver(&ines_gpib_cs_driver); } -static gpib_interface_t ines_pcmcia_unaccel_interface = { +static struct gpib_interface ines_pcmcia_unaccel_interface = { .name = "ines_pcmcia_unaccel", .attach = ines_pcmcia_attach, .detach = ines_pcmcia_detach, @@ -1261,7 +1244,7 @@ static gpib_interface_t ines_pcmcia_unaccel_interface = { .return_to_local = ines_return_to_local, }; -static gpib_interface_t ines_pcmcia_accel_interface = { +static struct gpib_interface ines_pcmcia_accel_interface = { .name = "ines_pcmcia_accel", .attach = ines_pcmcia_accel_attach, .detach = ines_pcmcia_detach, @@ -1289,7 +1272,7 @@ static gpib_interface_t ines_pcmcia_accel_interface = { .return_to_local = ines_return_to_local, }; -static gpib_interface_t ines_pcmcia_interface = { +static struct gpib_interface ines_pcmcia_interface = { .name = "ines_pcmcia", .attach = ines_pcmcia_accel_attach, .detach = ines_pcmcia_detach, @@ -1317,21 +1300,21 @@ static gpib_interface_t ines_pcmcia_interface = { .return_to_local = ines_return_to_local, }; -irqreturn_t ines_pcmcia_interrupt(int irq, void *arg) +static irqreturn_t ines_pcmcia_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; return ines_interrupt(board); } -int ines_common_pcmcia_attach(gpib_board_t *board) +static int ines_common_pcmcia_attach(struct gpib_board *board) { struct ines_priv *ines_priv; struct nec7210_priv *nec_priv; int retval; if (!curr_dev) { - pr_err("no ines pcmcia cards found\n"); + dev_err(board->gpib_dev, "no ines pcmcia cards found\n"); return -1; } @@ -1343,9 +1326,9 @@ int ines_common_pcmcia_attach(gpib_board_t *board) nec_priv = &ines_priv->nec7210_priv; if (!request_region(curr_dev->resource[0]->start, - resource_size(curr_dev->resource[0]), "ines_gpib")) { - pr_err("ines_gpib: ioports at 0x%lx already in use\n", - (unsigned long)(curr_dev->resource[0]->start)); + resource_size(curr_dev->resource[0]), DRV_NAME)) { + dev_err(board->gpib_dev, "ioports at 0x%lx already in use\n", + (unsigned long)(curr_dev->resource[0]->start)); return -1; } @@ -1355,7 +1338,7 @@ int ines_common_pcmcia_attach(gpib_board_t *board) if (request_irq(curr_dev->irq, ines_pcmcia_interrupt, IRQF_SHARED, "pcmcia-gpib", board)) { - pr_err("gpib: can't request IRQ %d\n", curr_dev->irq); + dev_err(board->gpib_dev, "can't request IRQ %d\n", curr_dev->irq); return -1; } ines_priv->irq = curr_dev->irq; @@ -1363,7 +1346,7 @@ int ines_common_pcmcia_attach(gpib_board_t *board) return 0; } -int ines_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ines_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct ines_priv *ines_priv; int retval; @@ -1378,7 +1361,8 @@ int ines_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config) return 0; } -int ines_pcmcia_accel_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ines_pcmcia_accel_attach(struct gpib_board *board, + const struct gpib_board_config *config) { struct ines_priv *ines_priv; int retval; @@ -1393,7 +1377,7 @@ int ines_pcmcia_accel_attach(gpib_board_t *board, const gpib_board_config_t *con return 0; } -void ines_pcmcia_detach(gpib_board_t *board) +static void ines_pcmcia_detach(struct gpib_board *board) { struct ines_priv *ines_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1410,7 +1394,7 @@ void ines_pcmcia_detach(gpib_board_t *board) ines_free_private(board); } -#endif /* GPIB_PCMCIA */ +#endif /* CONFIG_GPIB_PCMCIA */ static int __init ines_init_module(void) { @@ -1418,63 +1402,63 @@ static int __init ines_init_module(void) ret = pci_register_driver(&ines_pci_driver); if (ret) { - pr_err("ines_gpib: pci_register_driver failed: error = %d\n", ret); + pr_err("pci_register_driver failed: error = %d\n", ret); return ret; } ret = gpib_register_driver(&ines_pci_interface, THIS_MODULE); if (ret) { - pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pci; } ret = gpib_register_driver(&ines_pci_unaccel_interface, THIS_MODULE); if (ret) { - pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pci_unaccel; } ret = gpib_register_driver(&ines_pci_accel_interface, THIS_MODULE); if (ret) { - pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pci_accel; } ret = gpib_register_driver(&ines_isa_interface, THIS_MODULE); if (ret) { - pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_isa; } -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA ret = gpib_register_driver(&ines_pcmcia_interface, THIS_MODULE); if (ret) { - pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pcmcia; } ret = gpib_register_driver(&ines_pcmcia_unaccel_interface, THIS_MODULE); if (ret) { - pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pcmcia_unaccel; } ret = gpib_register_driver(&ines_pcmcia_accel_interface, THIS_MODULE); if (ret) { - pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pcmcia_accel; } ret = pcmcia_register_driver(&ines_gpib_cs_driver); if (ret) { - pr_err("ines_gpib: pcmcia_register_driver failed: error = %d\n", ret); + pr_err("pcmcia_register_driver failed: error = %d\n", ret); goto err_pcmcia_driver; } #endif return 0; -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA err_pcmcia_driver: gpib_unregister_driver(&ines_pcmcia_accel_interface); err_pcmcia_accel: @@ -1502,7 +1486,7 @@ static void __exit ines_exit_module(void) gpib_unregister_driver(&ines_pci_unaccel_interface); gpib_unregister_driver(&ines_pci_accel_interface); gpib_unregister_driver(&ines_isa_interface); -#ifdef GPIB__PCMCIA +#ifdef CONFIG_GPIB_PCMCIA gpib_unregister_driver(&ines_pcmcia_interface); gpib_unregister_driver(&ines_pcmcia_unaccel_interface); gpib_unregister_driver(&ines_pcmcia_accel_interface); diff --git a/drivers/staging/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c b/drivers/staging/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c index 85322af62c23..3cf5037c0cd2 100644 --- a/drivers/staging/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c +++ b/drivers/staging/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c @@ -8,6 +8,10 @@ * copyright : (C) 2011 Marcello Carla' * ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define NAME KBUILD_MODNAME + /* base module includes */ #include <linux/module.h> @@ -31,19 +35,17 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB driver for LPVO usb devices"); -#define NAME "lpvo_usb_gpib" - /* - * Table of devices that work with this driver. + * Table of devices that work with this driver. * - * Currently, only one device is known to be used in the - * lpvo_usb_gpib adapter (FTDI 0403:6001). - * If your adapter uses a different chip, insert a line - * in the following table with proper <Vendor-id>, <Product-id>. + * Currently, only one device is known to be used in the + * lpvo_usb_gpib adapter (FTDI 0403:6001). + * If your adapter uses a different chip, insert a line + * in the following table with proper <Vendor-id>, <Product-id>. * - * To have your chip automatically handled by the driver, - * update files "/usr/local/etc/modprobe.d/lpvo_usb_gpib.conf" - * and /usr/local/etc/udev/rules.d/99-lpvo_usb_gpib.rules. + * To have your chip automatically handled by the driver, + * update files "/usr/local/etc/modprobe.d/lpvo_usb_gpib.conf" + * and /usr/local/etc/udev/rules.d/99-lpvo_usb_gpib.rules. * */ @@ -54,27 +56,32 @@ static const struct usb_device_id skel_table[] = { MODULE_DEVICE_TABLE(usb, skel_table); /* - * *** Diagnostics and Debug *** - * - * The module parameter "debug" controls the sending of debug messages to - * syslog. By default it is set to 0 or 1 according to GPIB_CONFIG_KERNEL_DEBUG. - * debug = 0: only register/deregister messages are generated - * 1: every action is logged - * 2: extended logging; each single exchanged byte is documented - * (about twice the log volume of [1]) - * To switch debug level: - * At module loading: modprobe lpvo_usb_gpib debug={0,1,2} - * On the fly: echo {0,1,2} > /sys/modules/lpvo_usb_gpib/parameters/debug + * *** Diagnostics and Debug *** + * To enable the diagnostic and debug messages either compile with DEBUG set + * or control via the dynamic debug mechanisms. + * The module parameter "debug" controls the sending of debug messages to + * syslog. By default it is set to 0 + * debug = 0: only attach/detach messages are sent + * 1: every action is logged + * 2: extended logging; each single exchanged byte is documented + * (about twice the log volume of [1]) + * To switch debug level: + * At module loading: modprobe lpvo_usb_gpib debug={0,1,2} + * On the fly: echo {0,1,2} > /sys/modules/lpvo_usb_gpib/parameters/debug */ static int debug; module_param(debug, int, 0644); -#define DIA_LOG(level, format, ...) \ +#define DIA_LOG(level, format, ...) \ do { if (debug >= (level)) \ - pr_alert("%s:%s - " format, NAME, __func__, ## __VA_ARGS__); } \ + dev_dbg(board->gpib_dev, format, ## __VA_ARGS__); } \ while (0) +#define WQT wait_queue_entry_t +#define WQH head +#define WQE entry + /* standard and extended command sets of the usb-gpib adapter */ #define USB_GPIB_ON "\nIB\n" @@ -135,7 +142,7 @@ struct char_buf { /* used by one_char() routine */ }; struct usb_gpib_priv { /* private data to the device */ - u8 eos; /* eos character */ + u8 eos; /* eos character */ short eos_flags; /* eos mode */ int timeout; /* current value for timeout */ void *dev; /* the usb device private data structure */ @@ -143,48 +150,29 @@ struct usb_gpib_priv { /* private data to the device */ #define GPIB_DEV (((struct usb_gpib_priv *)board->private_data)->dev) -#define SHOW_STATUS(board) { \ - DIA_LOG(2, "# - board %p\n", board); \ - DIA_LOG(2, "# - buffer_length %d\n", board->buffer_length); \ - DIA_LOG(2, "# - status %lx\n", board->status); \ - DIA_LOG(2, "# - use_count %d\n", board->use_count); \ - DIA_LOG(2, "# - pad %x\n", board->pad); \ - DIA_LOG(2, "# - sad %x\n", board->sad); \ - DIA_LOG(2, "# - timeout %d\n", board->usec_timeout); \ - DIA_LOG(2, "# - ppc %d\n", board->parallel_poll_configuration); \ - DIA_LOG(2, "# - t1delay %d\n", board->t1_nano_sec); \ - DIA_LOG(2, "# - online %d\n", board->online); \ - DIA_LOG(2, "# - autopoll %d\n", board->autospollers); \ - DIA_LOG(2, "# - autopoll task %p\n", board->autospoll_task); \ - DIA_LOG(2, "# - minor %d\n", board->minor); \ - DIA_LOG(2, "# - master %d\n", board->master); \ - DIA_LOG(2, "# - list %d\n", board->ist); \ - } -/* - * n = 0; - * list_for_each (l, &board->device_list) n++; - * TTY_LOG ("%s:%s - devices in list %d\n", a, b, n); - */ - -/* - * TTY_LOG - write a message to the current work terminal (if any) - */ - -#define TTY_LOG(format, ...) { \ - char buf[128]; \ - struct tty_struct *tty = get_current_tty(); \ - if (tty) { \ - snprintf(buf, 128, format, __VA_ARGS__); \ - tty->driver->ops->write(tty, buf, strlen(buf)); \ - tty->driver->ops->write(tty, "\r", 1); \ - } \ - } +static void show_status(struct gpib_board *board) +{ + DIA_LOG(2, "# - buffer_length %d\n", board->buffer_length); + DIA_LOG(2, "# - status %lx\n", board->status); + DIA_LOG(2, "# - use_count %d\n", board->use_count); + DIA_LOG(2, "# - pad %x\n", board->pad); + DIA_LOG(2, "# - sad %x\n", board->sad); + DIA_LOG(2, "# - timeout %d\n", board->usec_timeout); + DIA_LOG(2, "# - ppc %d\n", board->parallel_poll_configuration); + DIA_LOG(2, "# - t1delay %d\n", board->t1_nano_sec); + DIA_LOG(2, "# - online %d\n", board->online); + DIA_LOG(2, "# - autopoll %d\n", board->autospollers); + DIA_LOG(2, "# - autopoll task %p\n", board->autospoll_task); + DIA_LOG(2, "# - minor %d\n", board->minor); + DIA_LOG(2, "# - master %d\n", board->master); + DIA_LOG(2, "# - list %d\n", board->ist); +} /* - * GLOBAL VARIABLES: required for - * pairing among gpib minor and usb minor. - * MAX_DEV is the max number of usb-gpib adapters; free - * to change as you like, but no more than 32 + * GLOBAL VARIABLES: required for + * pairing among gpib minor and usb minor. + * MAX_DEV is the max number of usb-gpib adapters; free + * to change as you like, but no more than 32 */ #define MAX_DEV 8 @@ -194,17 +182,17 @@ static int assigned_usb_minors; /* mask of filled slots */ static struct mutex minors_lock; /* operations on usb_minors are to be protected */ /* - * usb-skeleton prototypes + * usb-skeleton prototypes */ struct usb_skel; static ssize_t skel_do_write(struct usb_skel *, const char *, size_t); static ssize_t skel_do_read(struct usb_skel *, char *, size_t); -static int skel_do_open(gpib_board_t *, int); -static int skel_do_release(gpib_board_t *); +static int skel_do_open(struct gpib_board *, int); +static int skel_do_release(struct gpib_board *); /* - * usec_diff : take difference in MICROsec between two 'timespec' + * usec_diff : take difference in MICROsec between two 'timespec' * (unix time in sec and NANOsec) */ @@ -215,7 +203,7 @@ static inline int usec_diff(struct timespec64 *a, struct timespec64 *b) } /* - * *** these routines are specific to the usb-gpib adapter *** + * *** these routines are specific to the usb-gpib adapter *** */ /** @@ -229,27 +217,7 @@ static inline int usec_diff(struct timespec64 *a, struct timespec64 *b) static int write_loop(void *dev, char *msg, int leng) { -// int nchar = 0, val; - -// do { - return skel_do_write(dev, msg, leng); - -// if (val < 1) { -// printk (KERN_ALERT "%s:%s - write error: %d %d/%d\n", -// NAME, __func__, val, nchar, leng); -// return -EIO; -// } -// nchar +=val; -// } while (nchar < leng); -// return leng; -} - -static char printable(char x) -{ - if (x < 32 || x > 126) - return ' '; - return x; } /** @@ -257,15 +225,15 @@ static char printable(char x) * * @board: the gpib_board_struct data area for this gpib interface * @msg: the byte sequence. - * @leng the byte sequence length; can be given as zero and is + * @leng: the byte sequence length; can be given as zero and is * computed automatically, but if 'msg' contains a zero byte, * it has to be given explicitly. */ -static int send_command(gpib_board_t *board, char *msg, int leng) +static int send_command(struct gpib_board *board, char *msg, int leng) { char buffer[64]; - int nchar, j; + int nchar; int retval; struct timespec64 before, after; @@ -280,17 +248,10 @@ static int send_command(gpib_board_t *board, char *msg, int leng) nchar = skel_do_read(GPIB_DEV, buffer, 64); if (nchar < 0) { - DIA_LOG(0, " return from read: %d\n", nchar); + dev_err(board->gpib_dev, " return from read: %d\n", nchar); return nchar; } else if (nchar != 1) { - for (j = 0 ; j < leng ; j++) { - DIA_LOG(0, " Irregular reply to command: %d %x %c\n", - j, msg[j], printable(msg[j])); - } - for (j = 0 ; j < nchar ; j++) { - DIA_LOG(0, " Irregular command reply: %d %x %c\n", - j, buffer[j] & 0xff, printable(buffer[j])); - } + dev_err(board->gpib_dev, " Irregular reply to command: %s\n", msg); return -EIO; } ktime_get_real_ts64 (&after); @@ -301,16 +262,14 @@ static int send_command(gpib_board_t *board, char *msg, int leng) } /* - * * set_control_line() - Set the value of a single gpib control line * * @board: the gpib_board_struct data area for this gpib interface * @line: line mask * @value: line new value (0/1) - * */ -static int set_control_line(gpib_board_t *board, int line, int value) +static int set_control_line(struct gpib_board *board, int line, int value) { char msg[] = USB_GPIB_SET_LINES; int retval; @@ -337,11 +296,11 @@ static int set_control_line(gpib_board_t *board, int line, int value) /* * one_char() - read one single byte from input buffer * - * @board: the gpib_board_struct data area for this gpib interface - * @char_buf: the routine private data structure + * @board: the gpib_board_struct data area for this gpib interface + * @char_buf: the routine private data structure */ -static int one_char(gpib_board_t *board, struct char_buf *b) +static int one_char(struct gpib_board *board, struct char_buf *b) { struct timespec64 before, after; @@ -360,13 +319,7 @@ static int one_char(gpib_board_t *board, struct char_buf *b) if (b->nchar > 0) { DIA_LOG(2, "--> %x\n", b->inbuf[b->last - b->nchar]); return b->inbuf[b->last - b->nchar--]; - } else if (b->nchar == 0) { - dev_alert(board->gpib_dev, "%s:%s - read returned EOF\n", NAME, __func__); - return -EIO; } - dev_alert(board->gpib_dev, "%s:%s - read error %d\n", NAME, __func__, b->nchar); - TTY_LOG("\n *** %s *** Read Error - %s\n", NAME, - "Reset the adapter with 'gpib_config'\n"); return -EIO; } @@ -381,7 +334,7 @@ static int one_char(gpib_board_t *board, struct char_buf *b) * not supported. */ -static void set_timeout(gpib_board_t *board) +static void set_timeout(struct gpib_board *board) { int n, val; char command[sizeof(USB_GPIB_TTMO) + 6]; @@ -406,16 +359,14 @@ static void set_timeout(gpib_board_t *board) val = send_command(board, command, 0); } - if (val != ACK) { - dev_alert(board->gpib_dev, "%s:%s - error in timeout set: <%s>\n", - NAME, __func__, command); - } else { + if (val != ACK) + dev_err(board->gpib_dev, "error in timeout set: <%s>\n", command); + else data->timeout = board->usec_timeout; - } } /* - * now the standard interface functions - attach and detach + * now the standard interface functions - attach and detach */ /** @@ -431,7 +382,7 @@ static void set_timeout(gpib_board_t *board) * detach() will be called. Always. */ -static int usb_gpib_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int usb_gpib_attach(struct gpib_board *board, const struct gpib_board_config *config) { int retval, j; u32 base = config->ibbase; @@ -451,8 +402,6 @@ static int usb_gpib_attach(gpib_board_t *board, const gpib_board_config_t *confi if (config->device_path) { /* if config->device_path given, try that first */ - dev_alert(board->gpib_dev, "%s:%s - Looking for device_path: %s\n", - NAME, __func__, config->device_path); for (j = 0 ; j < MAX_DEV ; j++) { if ((assigned_usb_minors & 1 << j) == 0) continue; @@ -487,8 +436,7 @@ static int usb_gpib_attach(gpib_board_t *board, const gpib_board_config_t *confi mutex_unlock(&minors_lock); if (j == MAX_DEV) { - dev_alert(board->gpib_dev, "%s:%s - Requested device is not registered.\n", - NAME, __func__); + dev_err(board->gpib_dev, "Requested device is not registered.\n"); return -EIO; } @@ -501,20 +449,21 @@ static int usb_gpib_attach(gpib_board_t *board, const gpib_board_config_t *confi DIA_LOG(1, "Skel open: %d\n", retval); if (retval) { - TTY_LOG("%s:%s - skel open failed.\n", NAME, __func__); + dev_err(board->gpib_dev, "skel open failed.\n"); kfree(board->private_data); board->private_data = NULL; return -ENODEV; } - SHOW_STATUS(board); + show_status(board); retval = send_command(board, USB_GPIB_ON, 0); DIA_LOG(1, "USB_GPIB_ON returns %x\n", retval); if (retval != ACK) return -EIO; - /* We must setup debug mode because we need the extended instruction + /* + * We must setup debug mode because we need the extended instruction * set to cope with the Core (gpib_common) point of view */ @@ -523,7 +472,8 @@ static int usb_gpib_attach(gpib_board_t *board, const gpib_board_config_t *confi if (retval != ACK) return -EIO; - /* We must keep REN off after an IFC because so it is + /* + * We must keep REN off after an IFC because so it is * assumed by the Core */ @@ -541,8 +491,8 @@ static int usb_gpib_attach(gpib_board_t *board, const gpib_board_config_t *confi if (retval != ACK) return -EIO; - SHOW_STATUS(board); - TTY_LOG("Module '%s' has been sucesfully configured\n", NAME); + show_status(board); + DIA_LOG(0, "attached\n"); return 0; } @@ -553,13 +503,13 @@ static int usb_gpib_attach(gpib_board_t *board, const gpib_board_config_t *confi * */ -static void usb_gpib_detach(gpib_board_t *board) +static void usb_gpib_detach(struct gpib_board *board) { int retval; - SHOW_STATUS(board); + show_status(board); - DIA_LOG(0, "detaching %p\n", board); + DIA_LOG(0, "detaching\n"); if (board->private_data) { if (GPIB_DEV) { @@ -573,15 +523,14 @@ static void usb_gpib_detach(gpib_board_t *board) board->private_data = NULL; } - DIA_LOG(0, "done %p\n", board); - TTY_LOG("Module '%s' has been detached\n", NAME); + DIA_LOG(0, "detached\n"); } /* * Other functions follow in alphabetical order */ /* command */ -static int usb_gpib_command(gpib_board_t *board, +static int usb_gpib_command(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written) @@ -614,7 +563,7 @@ static int usb_gpib_command(gpib_board_t *board, * Cannot do nothing here, but remember for future use. */ -static void usb_gpib_disable_eos(gpib_board_t *board) +static void usb_gpib_disable_eos(struct gpib_board *board) { ((struct usb_gpib_priv *)board->private_data)->eos_flags &= ~REOS; DIA_LOG(1, "done: %x\n", @@ -630,7 +579,7 @@ static void usb_gpib_disable_eos(gpib_board_t *board) * */ -static int usb_gpib_enable_eos(gpib_board_t *board, +static int usb_gpib_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { @@ -650,7 +599,7 @@ static int usb_gpib_enable_eos(gpib_board_t *board, * @board: the gpib_board data area for this gpib interface */ -static int usb_gpib_go_to_standby(gpib_board_t *board) +static int usb_gpib_go_to_standby(struct gpib_board *board) { int retval = set_control_line(board, IB_BUS_ATN, 0); @@ -665,14 +614,14 @@ static int usb_gpib_go_to_standby(gpib_board_t *board) * usb_gpib_interface_clear() - Assert or de-assert IFC * * @board: the gpib_board data area for this gpib interface - * assert: 1: assert IFC; 0: de-assert IFC + * @assert: 1: assert IFC; 0: de-assert IFC * * Currently on the assert request we issue the lpvo IBZ * command that cycles IFC low for 100 usec, then we ignore * the de-assert request. */ -static void usb_gpib_interface_clear(gpib_board_t *board, int assert) +static void usb_gpib_interface_clear(struct gpib_board *board, int assert) { int retval = 0; @@ -688,21 +637,16 @@ static void usb_gpib_interface_clear(gpib_board_t *board, int assert) } /** - * line_status() - Read the status of the bus lines. + * usb_gpib_line_status() - Read the status of the bus lines. * * @board: the gpib_board data area for this gpib interface * * We can read all lines. */ - -#define WQT wait_queue_entry_t -#define WQH head -#define WQE entry - -static int usb_gpib_line_status(const gpib_board_t *board) +static int usb_gpib_line_status(const struct gpib_board *board) { int buffer; - int line_status = ValidALL; /* all lines will be read */ + int line_status = VALID_ALL; /* all lines will be read */ struct list_head *p, *q; WQT *item; unsigned long flags; @@ -710,7 +654,8 @@ static int usb_gpib_line_status(const gpib_board_t *board) DIA_LOG(1, "%s\n", "request"); - /* if we are on the wait queue (board->wait), do not hurry + /* + * if we are on the wait queue (board->wait), do not hurry * reading status line; instead, pause a little */ @@ -730,30 +675,29 @@ static int usb_gpib_line_status(const gpib_board_t *board) msleep(sleep); } - buffer = send_command((gpib_board_t *)board, USB_GPIB_STATUS, 0); + buffer = send_command((struct gpib_board *)board, USB_GPIB_STATUS, 0); if (buffer < 0) { - dev_alert(board->gpib_dev, "%s:%s - line status read failed with %d\n", - NAME, __func__, buffer); + dev_err(board->gpib_dev, "line status read failed with %d\n", buffer); return -1; } if ((buffer & 0x01) == 0) - line_status |= BusREN; + line_status |= BUS_REN; if ((buffer & 0x02) == 0) - line_status |= BusIFC; + line_status |= BUS_IFC; if ((buffer & 0x04) == 0) - line_status |= BusNDAC; + line_status |= BUS_NDAC; if ((buffer & 0x08) == 0) - line_status |= BusNRFD; + line_status |= BUS_NRFD; if ((buffer & 0x10) == 0) - line_status |= BusDAV; + line_status |= BUS_DAV; if ((buffer & 0x20) == 0) - line_status |= BusEOI; + line_status |= BUS_EOI; if ((buffer & 0x40) == 0) - line_status |= BusATN; + line_status |= BUS_ATN; if ((buffer & 0x80) == 0) - line_status |= BusSRQ; + line_status |= BUS_SRQ; DIA_LOG(1, "done with %x %x\n", buffer, line_status); @@ -762,9 +706,10 @@ static int usb_gpib_line_status(const gpib_board_t *board) /* parallel_poll */ -static int usb_gpib_parallel_poll(gpib_board_t *board, uint8_t *result) +static int usb_gpib_parallel_poll(struct gpib_board *board, u8 *result) { - /* request parallel poll asserting ATN | EOI; + /* + * request parallel poll asserting ATN | EOI; * we suppose ATN already asserted */ @@ -773,27 +718,23 @@ static int usb_gpib_parallel_poll(gpib_board_t *board, uint8_t *result) DIA_LOG(1, "enter %p\n", board); retval = set_control_line(board, IB_BUS_EOI, 1); - if (retval != ACK) { - dev_alert(board->gpib_dev, "%s:%s - assert EOI failed\n", NAME, __func__); + if (retval != ACK) return -EIO; - } *result = send_command(board, USB_GPIB_READ_DATA, 0); DIA_LOG(1, "done with %x\n", *result); retval = set_control_line(board, IB_BUS_EOI, 0); - if (retval != 0x06) { - dev_alert(board->gpib_dev, "%s:%s - unassert EOI failed\n", NAME, __func__); + if (retval != 0x06) return -EIO; - } return 0; } /* read */ -static int usb_gpib_read(gpib_board_t *board, +static int usb_gpib_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, @@ -866,8 +807,7 @@ static int usb_gpib_read(gpib_board_t *board, goto read_return; if (one_char(board, &b) != DLE || one_char(board, &b) != STX) { - dev_alert(board->gpib_dev, "%s:%s - wrong <DLE><STX> sequence\n", - NAME, __func__); + dev_err(board->gpib_dev, "wrong <DLE><STX> sequence\n"); retval = -EIO; goto read_return; } @@ -907,15 +847,12 @@ static int usb_gpib_read(gpib_board_t *board, retval = 0; goto read_return; } else { - dev_alert(board->gpib_dev, "%s:%s - %s %x\n", - NAME, __func__, - "Wrong end of message", c); + dev_err(board->gpib_dev, "wrong end of message %x", c); retval = -ETIME; goto read_return; } } else { - dev_alert(board->gpib_dev, "%s:%s - %s\n", NAME, __func__, - "lone <DLE> in stream"); + dev_err(board->gpib_dev, "lone <DLE> in stream"); retval = -EIO; goto read_return; } @@ -934,8 +871,7 @@ static int usb_gpib_read(gpib_board_t *board, c = one_char(board, &b); if (c == ACK) { if (MAX_READ_EXCESS - read_count > 1) - dev_alert(board->gpib_dev, "%s:%s - %s\n", NAME, __func__, - "small buffer - maybe some data lost"); + dev_dbg(board->gpib_dev, "small buffer - maybe some data lost"); retval = 0; goto read_return; } @@ -943,15 +879,13 @@ static int usb_gpib_read(gpib_board_t *board, } } - dev_alert(board->gpib_dev, "%s:%s - no input end - GPIB board in odd state\n", - NAME, __func__); + dev_err(board->gpib_dev, "no input end - board in odd state\n"); retval = -EIO; read_return: kfree(b.inbuf); - DIA_LOG(1, "done with byte/status: %d %x %d\n", - (int)*bytes_read, retval, *end); + DIA_LOG(1, "done with byte/status: %d %x %d\n", (int)*bytes_read, retval, *end); if (retval == 0 || retval == -ETIME) { if (send_command(board, USB_GPIB_UNTALK, sizeof(USB_GPIB_UNTALK)) == 0x06) @@ -964,35 +898,32 @@ read_return: /* remote_enable */ -static void usb_gpib_remote_enable(gpib_board_t *board, int enable) +static void usb_gpib_remote_enable(struct gpib_board *board, int enable) { int retval; retval = set_control_line(board, IB_BUS_REN, enable ? 1 : 0); if (retval != ACK) - dev_alert(board->gpib_dev, "%s:%s - could not set REN line: %x\n", - NAME, __func__, retval); + dev_err(board->gpib_dev, "could not set REN line: %x\n", retval); DIA_LOG(1, "done with %x\n", retval); } /* request_system_control */ -static void usb_gpib_request_system_control(gpib_board_t *board, - int request_control) +static int usb_gpib_request_system_control(struct gpib_board *board, int request_control) { - if (request_control) - set_bit(CIC_NUM, &board->status); - else - clear_bit(CIC_NUM, &board->status); + if (!request_control) + return -EINVAL; DIA_LOG(1, "done with %d -> %lx\n", request_control, board->status); + return 0; } /* take_control */ /* beware: the sync flag is ignored; what is its real meaning? */ -static int usb_gpib_take_control(gpib_board_t *board, int sync) +static int usb_gpib_take_control(struct gpib_board *board, int sync) { int retval; @@ -1007,7 +938,7 @@ static int usb_gpib_take_control(gpib_board_t *board, int sync) /* update_status */ -static unsigned int usb_gpib_update_status(gpib_board_t *board, +static unsigned int usb_gpib_update_status(struct gpib_board *board, unsigned int clear_mask) { /* There is nothing we can do here, I guess */ @@ -1022,7 +953,7 @@ static unsigned int usb_gpib_update_status(gpib_board_t *board, /* write */ /* beware: DLE characters are not escaped - can only send ASCII data */ -static int usb_gpib_write(gpib_board_t *board, +static int usb_gpib_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, @@ -1053,9 +984,8 @@ static int usb_gpib_write(gpib_board_t *board, *bytes_written = length; - if (send_command(board, USB_GPIB_UNLISTEN, sizeof(USB_GPIB_UNLISTEN)) - != 0x06) - return -EPIPE; + if (send_command(board, USB_GPIB_UNLISTEN, sizeof(USB_GPIB_UNLISTEN)) != 0x06) + return -EPIPE; return length; } @@ -1066,64 +996,56 @@ static int usb_gpib_write(gpib_board_t *board, /* parallel_poll configure */ -static void usb_gpib_parallel_poll_configure(gpib_board_t *board, - uint8_t configuration) +static void usb_gpib_parallel_poll_configure(struct gpib_board *board, + u8 configuration) { - dev_alert(board->gpib_dev, "%s:%s - currently a NOP\n", NAME, __func__); } /* parallel_poll_response */ -static void usb_gpib_parallel_poll_response(gpib_board_t *board, int ist) +static void usb_gpib_parallel_poll_response(struct gpib_board *board, int ist) { - dev_alert(board->gpib_dev, "%s:%s - currently a NOP\n", NAME, __func__); } /* primary_address */ -static int usb_gpib_primary_address(gpib_board_t *board, unsigned int address) +static int usb_gpib_primary_address(struct gpib_board *board, unsigned int address) { - dev_alert(board->gpib_dev, "%s:%s - currently a NOP\n", NAME, __func__); return 0; } /* return_to_local */ -static void usb_gpib_return_to_local(gpib_board_t *board) +static void usb_gpib_return_to_local(struct gpib_board *board) { - dev_alert(board->gpib_dev, "%s:%s - currently a NOP\n", NAME, __func__); } /* secondary_address */ -static int usb_gpib_secondary_address(gpib_board_t *board, +static int usb_gpib_secondary_address(struct gpib_board *board, unsigned int address, int enable) { - dev_alert(board->gpib_dev, "%s:%s - currently a NOP\n", NAME, __func__); return 0; } /* serial_poll_response */ -static void usb_gpib_serial_poll_response(gpib_board_t *board, uint8_t status) +static void usb_gpib_serial_poll_response(struct gpib_board *board, u8 status) { - dev_alert(board->gpib_dev, "%s:%s - currently a NOP\n", NAME, __func__); } /* serial_poll_status */ -static uint8_t usb_gpib_serial_poll_status(gpib_board_t *board) +static u8 usb_gpib_serial_poll_status(struct gpib_board *board) { - dev_alert(board->gpib_dev, "%s:%s - currently a NOP\n", NAME, __func__); return 0; } /* t1_delay */ -static unsigned int usb_gpib_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int usb_gpib_t1_delay(struct gpib_board *board, unsigned int nano_sec) { - dev_alert(board->gpib_dev, "%s:%s - currently a NOP\n", NAME, __func__); return 0; } @@ -1131,7 +1053,7 @@ static unsigned int usb_gpib_t1_delay(gpib_board_t *board, unsigned int nano_sec * *** module dispatch table and init/exit functions *** */ -static gpib_interface_t usb_gpib_interface = { +static struct gpib_interface usb_gpib_interface = { .name = NAME, .attach = usb_gpib_attach, .detach = usb_gpib_detach, @@ -1161,13 +1083,13 @@ static gpib_interface_t usb_gpib_interface = { }; /* - * usb_gpib_init_module(), usb_gpib_exit_module() + * usb_gpib_init_module(), usb_gpib_exit_module() * - * This functions are called every time a new device is detected - * and registered or is removed and unregistered. - * We must take note of created and destroyed usb minors to be used - * when usb_gpib_attach() and usb_gpib_detach() will be called on - * request by gpib_config. + * This functions are called every time a new device is detected + * and registered or is removed and unregistered. + * We must take note of created and destroyed usb minors to be used + * when usb_gpib_attach() and usb_gpib_detach() will be called on + * request by gpib_config. */ static int usb_gpib_init_module(struct usb_interface *interface) @@ -1181,18 +1103,19 @@ static int usb_gpib_init_module(struct usb_interface *interface) if (!assigned_usb_minors) { rv = gpib_register_driver(&usb_gpib_interface, THIS_MODULE); if (rv) { - pr_err("lpvo_usb_gpib: gpib_register_driver failed: error = %d\n", rv); + pr_err("gpib_register_driver failed: error = %d\n", rv); goto exit; } } else { - /* check if minor is already registered - maybe useless, but if - * it happens the code is inconsistent somewhere + /* + * check if minor is already registered - maybe useless, but if + * it happens the code is inconsistent somewhere */ for (j = 0 ; j < MAX_DEV ; j++) { if (usb_minors[j] == interface->minor && assigned_usb_minors & 1 << j) { - pr_alert("%s:%s - CODE BUG: USB minor %d registered at %d.\n", - NAME, __func__, interface->minor, j); + pr_err("CODE BUG: USB minor %d registered at %d.\n", + interface->minor, j); rv = -1; goto exit; } @@ -1207,13 +1130,11 @@ static int usb_gpib_init_module(struct usb_interface *interface) usb_minors[j] = interface->minor; lpvo_usb_interfaces[j] = interface; assigned_usb_minors |= mask; - DIA_LOG(0, "usb minor %d registered at %d\n", interface->minor, j); rv = 0; goto exit; } } - pr_alert("%s:%s - No slot available for interface %p minor %d\n", - NAME, __func__, interface, interface->minor); + pr_err("No slot available for interface %p minor %d\n", interface, interface->minor); rv = -1; exit: @@ -1235,19 +1156,18 @@ static void usb_gpib_exit_module(int minor) goto exit; } } - pr_alert("%s:%s - CODE BUG: USB minor %d not found.\n", NAME, __func__, minor); + pr_err("CODE BUG: USB minor %d not found.\n", minor); exit: mutex_unlock(&minors_lock); } /* - * Default latency time (16 msec) is too long. - * We must use 1 msec (best); anyhow, no more than 5 msec. - * - * Defines and function taken and modified from the kernel tree - * (see ftdi_sio.h and ftdi_sio.c). + * Default latency time (16 msec) is too long. + * We must use 1 msec (best); anyhow, no more than 5 msec. * + * Defines and function taken and modified from the kernel tree + * (see ftdi_sio.h and ftdi_sio.c). */ #define FTDI_SIO_SET_LATENCY_TIMER 9 /* Set the latency timer */ @@ -1267,7 +1187,7 @@ static int write_latency_timer(struct usb_device *udev) LATENCY_TIMER, LATENCY_CHANNEL, NULL, 0, WDR_TIMEOUT); if (rv < 0) - pr_alert("Unable to write latency timer: %i\n", rv); + dev_err(&udev->dev, "Unable to write latency timer: %i\n", rv); return rv; } @@ -1315,7 +1235,8 @@ static int write_latency_timer(struct usb_device *udev) /* private defines */ #define MAX_TRANSFER (PAGE_SIZE - 512) -/* MAX_TRANSFER is chosen so that the VM is not stressed by +/* + * MAX_TRANSFER is chosen so that the VM is not stressed by * allocations > PAGE_SIZE and the number of packets in a page * is an integer 512 is the largest possible packet on EHCI */ @@ -1360,21 +1281,18 @@ static void skel_delete(struct kref *kref) } /* - * skel_do_open() - to be called by usb_gpib_attach + * skel_do_open() - to be called by usb_gpib_attach */ -static int skel_do_open(gpib_board_t *board, int subminor) +static int skel_do_open(struct gpib_board *board, int subminor) { struct usb_skel *dev; struct usb_interface *interface; int retval = 0; - DIA_LOG(0, "Required minor: %d\n", subminor); - interface = usb_find_interface(&skel_driver, subminor); if (!interface) { - pr_err("%s - error, can't find device for minor %d\n", - __func__, subminor); + dev_err(board->gpib_dev, "can't find device for minor %d\n", subminor); retval = -ENODEV; goto exit; } @@ -1400,10 +1318,10 @@ exit: } /* - * skel_do_release() - to be called by usb_gpib_detach + * skel_do_release() - to be called by usb_gpib_detach */ -static int skel_do_release(gpib_board_t *board) +static int skel_do_release(struct gpib_board *board) { struct usb_skel *dev; @@ -1423,7 +1341,7 @@ static int skel_do_release(gpib_board_t *board) } /* - * read functions + * read functions */ static void skel_read_bulk_callback(struct urb *urb) @@ -1439,9 +1357,8 @@ static void skel_read_bulk_callback(struct urb *urb) if (!(urb->status == -ENOENT || urb->status == -ECONNRESET || urb->status == -ESHUTDOWN)) - dev_err(&dev->interface->dev, - "%s - nonzero read bulk status received: %d\n", - __func__, urb->status); + dev_err(&dev->interface->dev, "nonzero read bulk status received: %d\n", + urb->status); dev->errors = urb->status; } else { @@ -1478,9 +1395,7 @@ static int skel_do_read_io(struct usb_skel *dev, size_t count) /* do it */ rv = usb_submit_urb(dev->bulk_in_urb, GFP_KERNEL); if (rv < 0) { - dev_err(&dev->interface->dev, - "%s - failed submitting read urb, error %d\n", - __func__, rv); + dev_err(&dev->interface->dev, "failed submitting read urb, error %d\n", rv); rv = (rv == -ENOMEM) ? rv : -EIO; spin_lock_irq(&dev->err_lock); dev->ongoing_read = 0; @@ -1491,7 +1406,7 @@ static int skel_do_read_io(struct usb_skel *dev, size_t count) } /* - * skel_do_read() - read operations from lpvo_usb_gpib + * skel_do_read() - read operations from lpvo_usb_gpib */ static ssize_t skel_do_read(struct usb_skel *dev, char *buffer, size_t count) @@ -1504,14 +1419,10 @@ static ssize_t skel_do_read(struct usb_skel *dev, char *buffer, size_t count) if (!dev->bulk_in_urb || !count) return 0; - DIA_LOG(1, "enter for %zu.\n", count); - restart: /* added to comply with ftdi timeout technique */ /* no concurrent readers */ - DIA_LOG(2, "restart with %zd %zd.\n", dev->bulk_in_filled, dev->bulk_in_copied); - rv = mutex_lock_interruptible(&dev->io_mutex); if (rv < 0) return rv; @@ -1527,8 +1438,6 @@ retry: ongoing_io = dev->ongoing_read; spin_unlock_irq(&dev->err_lock); - DIA_LOG(2, "retry with %d.\n", ongoing_io); - if (ongoing_io) { // /* nonblocking IO shall not wait */ // /* no file, no O_NONBLOCK; maybe provide when from user space */ @@ -1569,14 +1478,13 @@ retry: // size_t chunk = min(available, count); /* compute chunk later */ size_t chunk; - DIA_LOG(2, "we have data: %zu %zu.\n", dev->bulk_in_filled, dev->bulk_in_copied); - if (!available) { /* * all data has been used * actual IO needs to be done */ - /* it seems that requests for less than dev->bulk_in_size + /* + * it seems that requests for less than dev->bulk_in_size * are not accepted */ rv = skel_do_read_io(dev, dev->bulk_in_size); @@ -1590,18 +1498,13 @@ retry: * data is available - chunk tells us how much shall be copied */ - /* Condition dev->bulk_in_copied > 0 maybe will never happen. In case, + /* + * Condition dev->bulk_in_copied > 0 maybe will never happen. In case, * signal the event and copy using the original procedure, i.e., copy * first two bytes also */ if (dev->bulk_in_copied) { - int j; - - for (j = 0 ; j < dev->bulk_in_filled ; j++) { - pr_alert("copy -> %x %zu %x\n", - j, dev->bulk_in_copied, dev->bulk_in_buffer[j]); - } chunk = min(available, count); memcpy(buffer, dev->bulk_in_buffer + dev->bulk_in_copied, chunk); rv = chunk; @@ -1613,7 +1516,7 @@ retry: /* account for two bytes to be discarded */ chunk = min(available, count + 2); if (chunk < 2) { - pr_alert("BAD READ - chunk: %zu\n", chunk); + dev_err(&dev->udev->dev, "BAD READ - chunk: %zu\n", chunk); rv = -EIO; goto exit; } @@ -1633,8 +1536,6 @@ retry: // if (available < count) // skel_do_read_io(dev, dev->bulk_in_size); } else { - DIA_LOG(1, "no data - start read - copied: %zd.\n", dev->bulk_in_copied); - /* no data in the buffer */ rv = skel_do_read_io(dev, dev->bulk_in_size); if (rv < 0) @@ -1645,15 +1546,15 @@ retry: exit: mutex_unlock(&dev->io_mutex); if (rv == 2) - goto restart; /* ftdi chip returns two status bytes after a latency anyhow */ - DIA_LOG(1, "exit with %d.\n", rv); + goto restart; /* ftdi chip returns two status bytes after a latency anyhow */ + if (rv > 0) - return rv - 2; /* account for 2 discarded bytes in a valid buffer */ + return rv - 2; /* account for 2 discarded bytes in a valid buffer */ return rv; } /* - * write functions + * write functions */ static void skel_write_bulk_callback(struct urb *urb) @@ -1669,8 +1570,7 @@ static void skel_write_bulk_callback(struct urb *urb) urb->status == -ECONNRESET || urb->status == -ESHUTDOWN)) dev_err(&dev->interface->dev, - "%s - nonzero write bulk status received: %d\n", - __func__, urb->status); + "nonzero write bulk status received: %d\n", urb->status); spin_lock_irqsave(&dev->err_lock, flags); dev->errors = urb->status; @@ -1684,7 +1584,7 @@ static void skel_write_bulk_callback(struct urb *urb) } /* - * skel_do_write() - write operations from lpvo_usb_gpib + * skel_do_write() - write operations from lpvo_usb_gpib */ static ssize_t skel_do_write(struct usb_skel *dev, const char *buffer, size_t count) @@ -1763,9 +1663,7 @@ static ssize_t skel_do_write(struct usb_skel *dev, const char *buffer, size_t co retval = usb_submit_urb(urb, GFP_KERNEL); mutex_unlock(&dev->io_mutex); if (retval) { - dev_err(&dev->interface->dev, - "%s - failed submitting write urb, error %d\n", - __func__, retval); + dev_err(&dev->interface->dev, "failed submitting write urb, error %d\n", retval); goto error_unanchor; } @@ -1791,7 +1689,7 @@ exit: } /* - * services for the user space devices + * services for the user space devices */ #if USER_DEVICE /* conditional compilation of user space device */ @@ -1831,8 +1729,7 @@ static int skel_open(struct inode *inode, struct file *file) interface = usb_find_interface(&skel_driver, subminor); if (!interface) { - pr_err("%s - error, can't find device for minor %d\n", - __func__, subminor); + pr_err("can't find device for minor %d\n", subminor); retval = -ENODEV; goto exit; } @@ -1877,7 +1774,7 @@ static int skel_release(struct inode *inode, struct file *file) } /* - * user space access to read function + * user space access to read function */ static ssize_t skel_read(struct file *file, char __user *buffer, size_t count, @@ -1895,8 +1792,6 @@ static ssize_t skel_read(struct file *file, char __user *buffer, size_t count, rv = skel_do_read(dev, buf, count); - pr_alert("%s - return with %zu\n", __func__, rv); - if (rv > 0) { if (copy_to_user(buffer, buf, rv)) { kfree(buf); @@ -1908,7 +1803,7 @@ static ssize_t skel_read(struct file *file, char __user *buffer, size_t count, } /* - * user space access to write function + * user space access to write function */ static ssize_t skel_write(struct file *file, const char __user *user_buffer, @@ -2015,8 +1910,8 @@ static int skel_probe(struct usb_interface *interface, /* let the world know */ device_path = kobject_get_path(&dev->udev->dev.kobj, GFP_KERNEL); - pr_alert("%s:%s - New lpvo_usb_device -> bus: %d dev: %d path: %s\n", NAME, __func__, - dev->udev->bus->busnum, dev->udev->devnum, device_path); + dev_dbg(&interface->dev, "New lpvo_usb_device -> bus: %d dev: %d path: %s\n", + dev->udev->bus->busnum, dev->udev->devnum, device_path); kfree(device_path); #if USER_DEVICE @@ -2029,14 +1924,9 @@ static int skel_probe(struct usb_interface *interface, usb_set_intfdata(interface, NULL); goto error; } - - /* let the user know what node this device is now attached to */ - dev_info(&interface->dev, - "lpvo_usb_gpib device now attached to lpvo_raw%d", - interface->minor); #endif - write_latency_timer(dev->udev); /* adjust the latency timer */ + write_latency_timer(dev->udev); /* adjust the latency timer */ usb_gpib_init_module(interface); /* last, init the lpvo for this minor */ @@ -2073,8 +1963,6 @@ static void skel_disconnect(struct usb_interface *interface) /* decrement our usage count */ kref_put(&dev->kref, skel_delete); - - dev_info(&interface->dev, "USB lpvo_raw #%d now disconnected", minor); } static void skel_draw_down(struct usb_skel *dev) diff --git a/drivers/staging/gpib/nec7210/nec7210.c b/drivers/staging/gpib/nec7210/nec7210.c index c9a837fad96e..34a1cae4f486 100644 --- a/drivers/staging/gpib/nec7210/nec7210.c +++ b/drivers/staging/gpib/nec7210/nec7210.c @@ -4,6 +4,8 @@ * copyright : (C) 2001, 2002 by Frank Mori Hess ***************************************************************************/ +#define dev_fmt(fmt) KBUILD_MODNAME ": " fmt + #include "board.h" #include <linux/ioport.h> #include <linux/sched.h> @@ -21,7 +23,7 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB library code for NEC uPD7210"); -int nec7210_enable_eos(gpib_board_t *board, struct nec7210_priv *priv, uint8_t eos_byte, +int nec7210_enable_eos(struct gpib_board *board, struct nec7210_priv *priv, u8 eos_byte, int compare_8_bits) { write_byte(priv, eos_byte, EOSR); @@ -35,14 +37,14 @@ int nec7210_enable_eos(gpib_board_t *board, struct nec7210_priv *priv, uint8_t e } EXPORT_SYMBOL(nec7210_enable_eos); -void nec7210_disable_eos(gpib_board_t *board, struct nec7210_priv *priv) +void nec7210_disable_eos(struct gpib_board *board, struct nec7210_priv *priv) { priv->auxa_bits &= ~HR_REOS; write_byte(priv, priv->auxa_bits, AUXMR); } EXPORT_SYMBOL(nec7210_disable_eos); -int nec7210_parallel_poll(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *result) +int nec7210_parallel_poll(struct gpib_board *board, struct nec7210_priv *priv, u8 *result) { int ret; @@ -62,14 +64,14 @@ int nec7210_parallel_poll(gpib_board_t *board, struct nec7210_priv *priv, uint8_ } EXPORT_SYMBOL(nec7210_parallel_poll); -void nec7210_parallel_poll_configure(gpib_board_t *board, +void nec7210_parallel_poll_configure(struct gpib_board *board, struct nec7210_priv *priv, unsigned int configuration) { write_byte(priv, PPR | configuration, AUXMR); } EXPORT_SYMBOL(nec7210_parallel_poll_configure); -void nec7210_parallel_poll_response(gpib_board_t *board, struct nec7210_priv *priv, int ist) +void nec7210_parallel_poll_response(struct gpib_board *board, struct nec7210_priv *priv, int ist) { if (ist) write_byte(priv, AUX_SPPF, AUXMR); @@ -77,13 +79,15 @@ void nec7210_parallel_poll_response(gpib_board_t *board, struct nec7210_priv *pr write_byte(priv, AUX_CPPF, AUXMR); } EXPORT_SYMBOL(nec7210_parallel_poll_response); -/* This is really only adequate for chips that do a 488.2 style reqt/reqf +/* + * This is really only adequate for chips that do a 488.2 style reqt/reqf * based on bit 6 of the SPMR (see chapter 11.3.3 of 488.2). For simpler chips that simply * set rsv directly based on bit 6, we either need to do more hardware setup to expose * the 488.2 capability (for example with NI chips), or we need to implement the * 488.2 set srv state machine in the driver (if that is even viable). */ -void nec7210_serial_poll_response(gpib_board_t *board, struct nec7210_priv *priv, uint8_t status) +void nec7210_serial_poll_response(struct gpib_board *board, + struct nec7210_priv *priv, u8 status) { unsigned long flags; @@ -100,13 +104,13 @@ void nec7210_serial_poll_response(gpib_board_t *board, struct nec7210_priv *priv } EXPORT_SYMBOL(nec7210_serial_poll_response); -uint8_t nec7210_serial_poll_status(gpib_board_t *board, struct nec7210_priv *priv) +u8 nec7210_serial_poll_status(struct gpib_board *board, struct nec7210_priv *priv) { return read_byte(priv, SPSR); } EXPORT_SYMBOL(nec7210_serial_poll_status); -int nec7210_primary_address(const gpib_board_t *board, struct nec7210_priv *priv, +int nec7210_primary_address(const struct gpib_board *board, struct nec7210_priv *priv, unsigned int address) { // put primary address in address0 @@ -115,7 +119,7 @@ int nec7210_primary_address(const gpib_board_t *board, struct nec7210_priv *priv } EXPORT_SYMBOL(nec7210_primary_address); -int nec7210_secondary_address(const gpib_board_t *board, struct nec7210_priv *priv, +int nec7210_secondary_address(const struct gpib_board *board, struct nec7210_priv *priv, unsigned int address, int enable) { if (enable) { @@ -164,7 +168,7 @@ static void update_listener_state(struct nec7210_priv *priv, unsigned int addres } } -unsigned int nec7210_update_status_nolock(gpib_board_t *board, struct nec7210_priv *priv) +unsigned int nec7210_update_status_nolock(struct gpib_board *board, struct nec7210_priv *priv) { int address_status_bits; u8 spoll_status; @@ -198,9 +202,9 @@ unsigned int nec7210_update_status_nolock(gpib_board_t *board, struct nec7210_pr priv->srq_pending = 0; set_bit(SPOLL_NUM, &board->status); } -// dev_dbg(board->gpib_dev, "status 0x%x, state 0x%x\n", board->status, priv->state); - /* we rely on the interrupt handler to set the + /* + * we rely on the interrupt handler to set the * rest of the status bits */ @@ -208,7 +212,7 @@ unsigned int nec7210_update_status_nolock(gpib_board_t *board, struct nec7210_pr } EXPORT_SYMBOL(nec7210_update_status_nolock); -unsigned int nec7210_update_status(gpib_board_t *board, struct nec7210_priv *priv, +unsigned int nec7210_update_status(struct gpib_board *board, struct nec7210_priv *priv, unsigned int clear_mask) { unsigned long flags; @@ -233,7 +237,7 @@ unsigned int nec7210_set_reg_bits(struct nec7210_priv *priv, unsigned int reg, } EXPORT_SYMBOL(nec7210_set_reg_bits); -void nec7210_set_handshake_mode(gpib_board_t *board, struct nec7210_priv *priv, int mode) +void nec7210_set_handshake_mode(struct gpib_board *board, struct nec7210_priv *priv, int mode) { unsigned long flags; @@ -249,7 +253,7 @@ void nec7210_set_handshake_mode(gpib_board_t *board, struct nec7210_priv *priv, } EXPORT_SYMBOL(nec7210_set_handshake_mode); -uint8_t nec7210_read_data_in(gpib_board_t *board, struct nec7210_priv *priv, int *end) +u8 nec7210_read_data_in(struct gpib_board *board, struct nec7210_priv *priv, int *end) { unsigned long flags; u8 data; @@ -267,7 +271,7 @@ uint8_t nec7210_read_data_in(gpib_board_t *board, struct nec7210_priv *priv, int } EXPORT_SYMBOL(nec7210_read_data_in); -int nec7210_take_control(gpib_board_t *board, struct nec7210_priv *priv, int syncronous) +int nec7210_take_control(struct gpib_board *board, struct nec7210_priv *priv, int syncronous) { int i; const int timeout = 100; @@ -294,7 +298,7 @@ int nec7210_take_control(gpib_board_t *board, struct nec7210_priv *priv, int syn } EXPORT_SYMBOL(nec7210_take_control); -int nec7210_go_to_standby(gpib_board_t *board, struct nec7210_priv *priv) +int nec7210_go_to_standby(struct gpib_board *board, struct nec7210_priv *priv) { int i; const int timeout = 1000; @@ -319,10 +323,8 @@ int nec7210_go_to_standby(gpib_board_t *board, struct nec7210_priv *priv) if (adsr_bits & HR_NATN) break; } - if (i == HZ) { - pr_err("nec7210: error waiting for NATN\n"); + if (i == HZ) return -ETIMEDOUT; - } } clear_bit(COMMAND_READY_BN, &priv->state); @@ -330,18 +332,19 @@ int nec7210_go_to_standby(gpib_board_t *board, struct nec7210_priv *priv) } EXPORT_SYMBOL(nec7210_go_to_standby); -void nec7210_request_system_control(gpib_board_t *board, struct nec7210_priv *priv, - int request_control) +int nec7210_request_system_control(struct gpib_board *board, struct nec7210_priv *priv, + int request_control) { if (request_control == 0) { write_byte(priv, AUX_CREN, AUXMR); write_byte(priv, AUX_CIFC, AUXMR); write_byte(priv, AUX_DSC, AUXMR); } + return 0; } EXPORT_SYMBOL(nec7210_request_system_control); -void nec7210_interface_clear(gpib_board_t *board, struct nec7210_priv *priv, int assert) +void nec7210_interface_clear(struct gpib_board *board, struct nec7210_priv *priv, int assert) { if (assert) write_byte(priv, AUX_SIFC, AUXMR); @@ -350,7 +353,7 @@ void nec7210_interface_clear(gpib_board_t *board, struct nec7210_priv *priv, int } EXPORT_SYMBOL(nec7210_interface_clear); -void nec7210_remote_enable(gpib_board_t *board, struct nec7210_priv *priv, int enable) +void nec7210_remote_enable(struct gpib_board *board, struct nec7210_priv *priv, int enable) { if (enable) write_byte(priv, AUX_SREN, AUXMR); @@ -359,7 +362,7 @@ void nec7210_remote_enable(gpib_board_t *board, struct nec7210_priv *priv, int e } EXPORT_SYMBOL(nec7210_remote_enable); -void nec7210_release_rfd_holdoff(gpib_board_t *board, struct nec7210_priv *priv) +void nec7210_release_rfd_holdoff(struct gpib_board *board, struct nec7210_priv *priv) { unsigned long flags; @@ -373,8 +376,8 @@ void nec7210_release_rfd_holdoff(gpib_board_t *board, struct nec7210_priv *priv) } EXPORT_SYMBOL(nec7210_release_rfd_holdoff); -unsigned int nec7210_t1_delay(gpib_board_t *board, struct nec7210_priv *priv, - unsigned int nano_sec) +int nec7210_t1_delay(struct gpib_board *board, struct nec7210_priv *priv, + unsigned int nano_sec) { unsigned int retval; @@ -391,13 +394,13 @@ unsigned int nec7210_t1_delay(gpib_board_t *board, struct nec7210_priv *priv, } EXPORT_SYMBOL(nec7210_t1_delay); -void nec7210_return_to_local(const gpib_board_t *board, struct nec7210_priv *priv) +void nec7210_return_to_local(const struct gpib_board *board, struct nec7210_priv *priv) { write_byte(priv, AUX_RTL, AUXMR); } EXPORT_SYMBOL(nec7210_return_to_local); -static inline short nec7210_atn_has_changed(gpib_board_t *board, struct nec7210_priv *priv) +static inline short nec7210_atn_has_changed(struct gpib_board *board, struct nec7210_priv *priv) { short address_status_bits = read_byte(priv, ADSR); @@ -415,7 +418,7 @@ static inline short nec7210_atn_has_changed(gpib_board_t *board, struct nec7210_ return -1; } -int nec7210_command(gpib_board_t *board, struct nec7210_priv *priv, uint8_t +int nec7210_command(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length, size_t *bytes_written) { int retval = 0; @@ -430,17 +433,14 @@ int nec7210_command(gpib_board_t *board, struct nec7210_priv *priv, uint8_t test_bit(COMMAND_READY_BN, &priv->state) || test_bit(BUS_ERROR_BN, &priv->state) || test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib command wait interrupted\n"); + dev_dbg(board->gpib_dev, "command wait interrupted\n"); retval = -ERESTARTSYS; break; } if (test_bit(TIMO_NUM, &board->status)) break; - if (test_and_clear_bit(BUS_ERROR_BN, &priv->state)) { - pr_err("nec7210: bus error on command byte\n"); + if (test_and_clear_bit(BUS_ERROR_BN, &priv->state)) break; - } - spin_lock_irqsave(&board->spinlock, flags); clear_bit(COMMAND_READY_BN, &priv->state); write_byte(priv, buffer[*bytes_written], CDOR); @@ -454,24 +454,20 @@ int nec7210_command(gpib_board_t *board, struct nec7210_priv *priv, uint8_t // wait for last byte to get sent if (wait_event_interruptible(board->wait, test_bit(COMMAND_READY_BN, &priv->state) || test_bit(BUS_ERROR_BN, &priv->state) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib command wait interrupted\n"); + test_bit(TIMO_NUM, &board->status))) retval = -ERESTARTSYS; - } - if (test_bit(TIMO_NUM, &board->status)) { - dev_dbg(board->gpib_dev, "gpib command timed out\n"); + + if (test_bit(TIMO_NUM, &board->status)) retval = -ETIMEDOUT; - } - if (test_and_clear_bit(BUS_ERROR_BN, &priv->state)) { - pr_err("nec7210: bus error on command byte\n"); + + if (test_and_clear_bit(BUS_ERROR_BN, &priv->state)) retval = -EIO; - } return retval; } EXPORT_SYMBOL(nec7210_command); -static int pio_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, +static int pio_read(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length, int *end, size_t *bytes_read) { ssize_t retval = 0; @@ -484,13 +480,13 @@ static int pio_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buf test_bit(READ_READY_BN, &priv->state) || test_bit(DEV_CLEAR_BN, &priv->state) || test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "nec7210: pio read wait interrupted\n"); retval = -ERESTARTSYS; break; } if (test_bit(READ_READY_BN, &priv->state)) { if (*bytes_read == 0) { - /* We set the handshake mode here because we know + /* + * We set the handshake mode here because we know * no new bytes will arrive (it has already arrived * and is awaiting being read out of the chip) while we are changing * modes. This ensures we can reliably keep track @@ -503,12 +499,10 @@ static int pio_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buf break; } if (test_bit(TIMO_NUM, &board->status)) { - dev_dbg(board->gpib_dev, "interrupted by timeout\n"); retval = -ETIMEDOUT; break; } if (test_bit(DEV_CLEAR_BN, &priv->state)) { - dev_dbg(board->gpib_dev, "interrupted by device clear\n"); retval = -EINTR; break; } @@ -523,7 +517,7 @@ static int pio_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buf } #ifdef NEC_DMA -static ssize_t __dma_read(gpib_board_t *board, struct nec7210_priv *priv, size_t length) +static ssize_t __dma_read(struct gpib_board *board, struct nec7210_priv *priv, size_t length) { ssize_t retval = 0; size_t count = 0; @@ -557,10 +551,9 @@ static ssize_t __dma_read(gpib_board_t *board, struct nec7210_priv *priv, size_t if (wait_event_interruptible(board->wait, test_bit(DMA_READ_IN_PROGRESS_BN, &priv->state) == 0 || test_bit(DEV_CLEAR_BN, &priv->state) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "nec7210: dma read wait interrupted\n"); + test_bit(TIMO_NUM, &board->status))) retval = -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) retval = -ETIMEDOUT; if (test_bit(DEV_CLEAR_BN, &priv->state)) @@ -579,7 +572,7 @@ static ssize_t __dma_read(gpib_board_t *board, struct nec7210_priv *priv, size_t return retval ? retval : count; } -static ssize_t dma_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, +static ssize_t dma_read(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length) { size_t remain = length; @@ -606,7 +599,7 @@ static ssize_t dma_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t } #endif -int nec7210_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, +int nec7210_read(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length, int *end, size_t *bytes_read) { ssize_t retval = 0; @@ -627,7 +620,7 @@ int nec7210_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer } EXPORT_SYMBOL(nec7210_read); -static int pio_write_wait(gpib_board_t *board, struct nec7210_priv *priv, +static int pio_write_wait(struct gpib_board *board, struct nec7210_priv *priv, short wake_on_lacs, short wake_on_atn, short wake_on_bus_error) { // wait until byte is ready to be sent @@ -638,26 +631,22 @@ static int pio_write_wait(gpib_board_t *board, struct nec7210_priv *priv, (wake_on_bus_error && test_bit(BUS_ERROR_BN, &priv->state)) || (wake_on_lacs && test_bit(LACS_NUM, &board->status)) || (wake_on_atn && test_bit(ATN_NUM, &board->status)) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib write interrupted\n"); + test_bit(TIMO_NUM, &board->status))) return -ERESTARTSYS; - } - if (test_bit(TIMO_NUM, &board->status)) { - dev_dbg(board->gpib_dev, "nec7210: write timed out\n"); + + if (test_bit(TIMO_NUM, &board->status)) return -ETIMEDOUT; - } - if (test_bit(DEV_CLEAR_BN, &priv->state)) { - dev_dbg(board->gpib_dev, "nec7210: write interrupted by clear\n"); + + if (test_bit(DEV_CLEAR_BN, &priv->state)) return -EINTR; - } - if (wake_on_bus_error && test_and_clear_bit(BUS_ERROR_BN, &priv->state)) { - dev_dbg(board->gpib_dev, "nec7210: bus error on write\n"); + + if (wake_on_bus_error && test_and_clear_bit(BUS_ERROR_BN, &priv->state)) return -EIO; - } + return 0; } -static int pio_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, +static int pio_write(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length, size_t *bytes_written) { size_t last_count = 0; @@ -677,8 +666,8 @@ static int pio_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *bu if (retval == -EIO) { /* resend last byte on bus error */ *bytes_written = last_count; - dev_dbg(board->gpib_dev, "resending %c\n", buffer[*bytes_written]); - /* we can get unrecoverable bus errors, + /* + * we can get unrecoverable bus errors, * so give up after a while */ bus_error_count++; @@ -701,7 +690,7 @@ static int pio_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *bu } #ifdef NEC_DMA -static ssize_t __dma_write(gpib_board_t *board, struct nec7210_priv *priv, dma_addr_t address, +static ssize_t __dma_write(struct gpib_board *board, struct nec7210_priv *priv, dma_addr_t address, size_t length) { unsigned long flags, dma_irq_flags; @@ -733,10 +722,9 @@ static ssize_t __dma_write(gpib_board_t *board, struct nec7210_priv *priv, dma_a test_bit(DMA_WRITE_IN_PROGRESS_BN, &priv->state) == 0 || test_bit(BUS_ERROR_BN, &priv->state) || test_bit(DEV_CLEAR_BN, &priv->state) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib write interrupted!\n"); + test_bit(TIMO_NUM, &board->status))) retval = -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) retval = -ETIMEDOUT; if (test_and_clear_bit(DEV_CLEAR_BN, &priv->state)) @@ -759,7 +747,7 @@ static ssize_t __dma_write(gpib_board_t *board, struct nec7210_priv *priv, dma_a return retval ? retval : length; } -static ssize_t dma_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, +static ssize_t dma_write(struct gpib_board *board, struct nec7210_priv *priv, u8 *buffer, size_t length) { size_t remain = length; @@ -783,8 +771,9 @@ static ssize_t dma_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t return length - remain; } #endif -int nec7210_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written) +int nec7210_write(struct gpib_board *board, struct nec7210_priv *priv, + u8 *buffer, size_t length, int send_eoi, + size_t *bytes_written) { int retval = 0; @@ -821,7 +810,8 @@ int nec7210_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffe if (send_eoi) { size_t num_bytes; - /* We need to wait to make sure we will immediately be able to write the data byte + /* + * We need to wait to make sure we will immediately be able to write the data byte * into the chip before sending the associated AUX_SEOI command. This is really * only needed for length==1 since otherwise the earlier calls to pio_write * will have dont the wait already. @@ -843,9 +833,9 @@ int nec7210_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffe EXPORT_SYMBOL(nec7210_write); /* - * interrupt service routine + * interrupt service routine */ -irqreturn_t nec7210_interrupt(gpib_board_t *board, struct nec7210_priv *priv) +irqreturn_t nec7210_interrupt(struct gpib_board *board, struct nec7210_priv *priv) { int status1, status2; @@ -857,7 +847,7 @@ irqreturn_t nec7210_interrupt(gpib_board_t *board, struct nec7210_priv *priv) } EXPORT_SYMBOL(nec7210_interrupt); -irqreturn_t nec7210_interrupt_have_status(gpib_board_t *board, +irqreturn_t nec7210_interrupt_have_status(struct gpib_board *board, struct nec7210_priv *priv, int status1, int status2) { #ifdef NEC_DMA @@ -937,13 +927,8 @@ irqreturn_t nec7210_interrupt_have_status(gpib_board_t *board, set_bit(COMMAND_READY_BN, &priv->state); // command pass through received - if (status1 & HR_CPT) { - unsigned int command; - - command = read_byte(priv, CPTR) & gpib_command_mask; + if (status1 & HR_CPT) write_byte(priv, AUX_NVAL, AUXMR); -// printk("gpib: command pass through 0x%x\n", command); - } if (status1 & HR_ERR) set_bit(BUS_ERROR_BN, &priv->state); @@ -953,13 +938,13 @@ irqreturn_t nec7210_interrupt_have_status(gpib_board_t *board, // ignore device clear events if we are controller in charge if ((address_status_bits & HR_CIC) == 0) { - push_gpib_event(board, EventDevClr); + push_gpib_event(board, EVENT_DEV_CLR); set_bit(DEV_CLEAR_BN, &priv->state); } } if (status1 & HR_DET) - push_gpib_event(board, EventDevTrg); + push_gpib_event(board, EVENT_DEV_TRG); // Addressing status has changed if (status2 & HR_ADSC) @@ -980,7 +965,7 @@ irqreturn_t nec7210_interrupt_have_status(gpib_board_t *board, } EXPORT_SYMBOL(nec7210_interrupt_have_status); -void nec7210_board_reset(struct nec7210_priv *priv, const gpib_board_t *board) +void nec7210_board_reset(struct nec7210_priv *priv, const struct gpib_board *board) { /* 7210 chip reset */ write_byte(priv, AUX_CR, AUXMR); @@ -1014,7 +999,7 @@ void nec7210_board_reset(struct nec7210_priv *priv, const gpib_board_t *board) } EXPORT_SYMBOL(nec7210_board_reset); -void nec7210_board_online(struct nec7210_priv *priv, const gpib_board_t *board) +void nec7210_board_online(struct nec7210_priv *priv, const struct gpib_board *board) { /* set GPIB address */ nec7210_primary_address(board, priv, board->pad); @@ -1033,16 +1018,17 @@ EXPORT_SYMBOL(nec7210_board_online); #ifdef CONFIG_HAS_IOPORT /* wrappers for io */ -uint8_t nec7210_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num) +u8 nec7210_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num) { return inb(priv->iobase + register_num * priv->offset); } EXPORT_SYMBOL(nec7210_ioport_read_byte); -void nec7210_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num) +void nec7210_ioport_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num) { if (register_num == AUXMR) - /* locking makes absolutely sure noone accesses the + /* + * locking makes absolutely sure noone accesses the * AUXMR register faster than once per microsecond */ nec7210_locking_ioport_write_byte(priv, data, register_num); @@ -1052,7 +1038,7 @@ void nec7210_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned EXPORT_SYMBOL(nec7210_ioport_write_byte); /* locking variants of io wrappers, for chips that page-in registers */ -uint8_t nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num) +u8 nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num) { u8 retval; unsigned long flags; @@ -1064,7 +1050,7 @@ uint8_t nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int } EXPORT_SYMBOL(nec7210_locking_ioport_read_byte); -void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, +void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num) { unsigned long flags; @@ -1078,16 +1064,17 @@ void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, EXPORT_SYMBOL(nec7210_locking_ioport_write_byte); #endif -uint8_t nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num) +u8 nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num) { return readb(priv->mmiobase + register_num * priv->offset); } EXPORT_SYMBOL(nec7210_iomem_read_byte); -void nec7210_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num) +void nec7210_iomem_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num) { if (register_num == AUXMR) - /* locking makes absolutely sure noone accesses the + /* + * locking makes absolutely sure noone accesses the * AUXMR register faster than once per microsecond */ nec7210_locking_iomem_write_byte(priv, data, register_num); @@ -1096,7 +1083,7 @@ void nec7210_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned } EXPORT_SYMBOL(nec7210_iomem_write_byte); -uint8_t nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num) +u8 nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num) { u8 retval; unsigned long flags; @@ -1108,7 +1095,7 @@ uint8_t nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int } EXPORT_SYMBOL(nec7210_locking_iomem_read_byte); -void nec7210_locking_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, +void nec7210_locking_iomem_write_byte(struct nec7210_priv *priv, u8 data, unsigned int register_num) { unsigned long flags; diff --git a/drivers/staging/gpib/ni_usb/ni_usb_gpib.c b/drivers/staging/gpib/ni_usb/ni_usb_gpib.c index d0656dc520f5..7cf25c95787f 100644 --- a/drivers/staging/gpib/ni_usb/ni_usb_gpib.c +++ b/drivers/staging/gpib/ni_usb/ni_usb_gpib.c @@ -5,6 +5,10 @@ * copyright : (C) 2004 by Frank Mori Hess ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> @@ -20,7 +24,7 @@ MODULE_DESCRIPTION("GPIB driver for National Instruments USB devices"); static struct usb_interface *ni_usb_driver_interfaces[MAX_NUM_NI_USB_INTERFACES]; static int ni_usb_parse_status_block(const u8 *buffer, struct ni_usb_status_block *status); -static int ni_usb_set_interrupt_monitor(gpib_board_t *board, unsigned int monitored_bits); +static int ni_usb_set_interrupt_monitor(struct gpib_board *board, unsigned int monitored_bits); static void ni_usb_stop(struct ni_usb_priv *ni_priv); static DEFINE_MUTEX(ni_usb_hotplug_lock); @@ -70,12 +74,13 @@ static unsigned short ni_usb_timeout_code(unsigned int usec) return 0xff; else if (usec <= 300000000) return 0x01; - /* NI driver actually uses 0xff for timeout T1000s, which is a bug in their code. + /* + * NI driver actually uses 0xff for timeout T1000s, which is a bug in their code. * I've verified on a usb-b that a code of 0x2 is correct for a 1000 sec timeout */ else if (usec <= 1000000000) return 0x02; - pr_err("%s: bug? usec is greater than 1e9\n", __func__); + pr_err("bug? usec is greater than 1e9\n"); return 0xf0; } @@ -83,14 +88,13 @@ static void ni_usb_bulk_complete(struct urb *urb) { struct ni_usb_urb_ctx *context = urb->context; -// printk("debug: %s: status=0x%x, error_count=%i, actual_length=%i\n", __func__, -// urb->status, urb->error_count, urb->actual_length); complete(&context->complete); } static void ni_usb_timeout_handler(struct timer_list *t) { - struct ni_usb_priv *ni_priv = from_timer(ni_priv, t, bulk_timer); + struct ni_usb_priv *ni_priv = timer_container_of(ni_priv, t, + bulk_timer); struct ni_usb_urb_ctx *context = &ni_priv->context; context->timed_out = 1; @@ -134,11 +138,11 @@ static int ni_usb_nonblocking_send_bulk_msg(struct ni_usb_priv *ni_priv, void *d retval = usb_submit_urb(ni_priv->bulk_urb, GFP_KERNEL); if (retval) { - del_timer_sync(&ni_priv->bulk_timer); + timer_delete_sync(&ni_priv->bulk_timer); usb_free_urb(ni_priv->bulk_urb); ni_priv->bulk_urb = NULL; - dev_err(&usb_dev->dev, "%s: failed to submit bulk out urb, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "failed to submit bulk out urb, retval=%i\n", + retval); mutex_unlock(&ni_priv->bulk_transfer_lock); return retval; } @@ -146,13 +150,13 @@ static int ni_usb_nonblocking_send_bulk_msg(struct ni_usb_priv *ni_priv, void *d wait_for_completion(&context->complete); // wait for ni_usb_bulk_complete if (context->timed_out) { usb_kill_urb(ni_priv->bulk_urb); - dev_err(&usb_dev->dev, "%s: killed urb due to timeout\n", __func__); + dev_err(&usb_dev->dev, "killed urb due to timeout\n"); retval = -ETIMEDOUT; } else { retval = ni_priv->bulk_urb->status; } - del_timer_sync(&ni_priv->bulk_timer); + timer_delete_sync(&ni_priv->bulk_timer); *actual_data_length = ni_priv->bulk_urb->actual_length; mutex_lock(&ni_priv->bulk_transfer_lock); usb_free_urb(ni_priv->bulk_urb); @@ -218,21 +222,20 @@ static int ni_usb_nonblocking_receive_bulk_msg(struct ni_usb_priv *ni_priv, if (timeout_msecs) mod_timer(&ni_priv->bulk_timer, jiffies + msecs_to_jiffies(timeout_msecs)); - //printk("%s: submitting urb\n", __func__); retval = usb_submit_urb(ni_priv->bulk_urb, GFP_KERNEL); if (retval) { - del_timer_sync(&ni_priv->bulk_timer); + timer_delete_sync(&ni_priv->bulk_timer); usb_free_urb(ni_priv->bulk_urb); ni_priv->bulk_urb = NULL; - dev_err(&usb_dev->dev, "%s: failed to submit bulk out urb, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "failed to submit bulk in urb, retval=%i\n", retval); mutex_unlock(&ni_priv->bulk_transfer_lock); return retval; } mutex_unlock(&ni_priv->bulk_transfer_lock); if (interruptible) { if (wait_for_completion_interruptible(&context->complete)) { - /* If we got interrupted by a signal while + /* + * If we got interrupted by a signal while * waiting for the usb gpib to respond, we * should send a stop command so it will * finish up with whatever it was doing and @@ -240,8 +243,9 @@ static int ni_usb_nonblocking_receive_bulk_msg(struct ni_usb_priv *ni_priv, */ ni_usb_stop(ni_priv); retval = -ERESTARTSYS; - /* now do an uninterruptible wait, it shouldn't take long - * for the board to respond now. + /* + * now do an uninterruptible wait, it shouldn't take long + * for the board to respond now. */ wait_for_completion(&context->complete); } @@ -250,13 +254,13 @@ static int ni_usb_nonblocking_receive_bulk_msg(struct ni_usb_priv *ni_priv, } if (context->timed_out) { usb_kill_urb(ni_priv->bulk_urb); - dev_err(&usb_dev->dev, "%s: killed urb due to timeout\n", __func__); + dev_err(&usb_dev->dev, "killed urb due to timeout\n"); retval = -ETIMEDOUT; } else { if (ni_priv->bulk_urb->status) retval = ni_priv->bulk_urb->status; } - del_timer_sync(&ni_priv->bulk_timer); + timer_delete_sync(&ni_priv->bulk_timer); *actual_data_length = ni_priv->bulk_urb->actual_length; mutex_lock(&ni_priv->bulk_transfer_lock); usb_free_urb(ni_priv->bulk_urb); @@ -310,7 +314,7 @@ static int ni_usb_receive_control_msg(struct ni_usb_priv *ni_priv, __u8 request, return retval; } -static void ni_usb_soft_update_status(gpib_board_t *board, unsigned int ni_usb_ibsta, +static void ni_usb_soft_update_status(struct gpib_board *board, unsigned int ni_usb_ibsta, unsigned int clear_mask) { static const unsigned int ni_usb_ibsta_mask = SRQI | ATN | CIC | REM | LACS | TACS | LOK; @@ -330,14 +334,14 @@ static void ni_usb_soft_update_status(gpib_board_t *board, unsigned int ni_usb_i ni_priv->monitored_ibsta_bits &= ~ni_usb_ibsta; need_monitoring_bits &= ~ni_priv->monitored_ibsta_bits; /* mm - monitored set */ spin_unlock_irqrestore(&board->spinlock, flags); - dev_dbg(&usb_dev->dev, "%s: need_monitoring_bits=0x%x\n", __func__, need_monitoring_bits); + dev_dbg(&usb_dev->dev, "need_monitoring_bits=0x%x\n", need_monitoring_bits); if (need_monitoring_bits & ~ni_usb_ibsta) ni_usb_set_interrupt_monitor(board, ni_usb_ibsta_monitor_mask); else if (need_monitoring_bits & ni_usb_ibsta) wake_up_interruptible(&board->wait); - dev_dbg(&usb_dev->dev, "%s: ni_usb_ibsta=0x%x\n", __func__, ni_usb_ibsta); + dev_dbg(&usb_dev->dev, "ibsta=0x%x\n", ni_usb_ibsta); } static int ni_usb_parse_status_block(const u8 *buffer, struct ni_usb_status_block *status) @@ -371,7 +375,7 @@ static int ni_usb_parse_register_read_block(const u8 *raw_data, unsigned int *re int k; if (raw_data[i++] != NIUSB_REGISTER_READ_DATA_START_ID) { - pr_err("%s: parse error: wrong start id\n", __func__); + pr_err("parse error: wrong start id\n"); unexpected = 1; } for (k = 0; k < results_per_chunk && j < num_results; ++k) @@ -380,18 +384,18 @@ static int ni_usb_parse_register_read_block(const u8 *raw_data, unsigned int *re while (i % 4) i++; if (raw_data[i++] != NIUSB_REGISTER_READ_DATA_END_ID) { - pr_err("%s: parse error: wrong end id\n", __func__); + pr_err("parse error: wrong end id\n"); unexpected = 1; } if (raw_data[i++] % results_per_chunk != num_results % results_per_chunk) { - pr_err("%s: parse error: wrong count=%i for NIUSB_REGISTER_READ_DATA_END\n", - __func__, (int)raw_data[i - 1]); + pr_err("parse error: wrong count=%i for NIUSB_REGISTER_READ_DATA_END\n", + (int)raw_data[i - 1]); unexpected = 1; } while (i % 4) { if (raw_data[i++] != 0) { - pr_err("%s: unexpected data: raw_data[%i]=0x%x, expected 0\n", - __func__, i - 1, (int)raw_data[i - 1]); + pr_err("unexpected data: raw_data[%i]=0x%x, expected 0\n", + i - 1, (int)raw_data[i - 1]); unexpected = 1; } } @@ -408,9 +412,8 @@ static int ni_usb_parse_termination_block(const u8 *buffer) buffer[i++] != 0x0 || buffer[i++] != 0x0 || buffer[i++] != 0x0) { - pr_err("%s: received unexpected termination block\n", __func__); - pr_err(" expected: 0x%x 0x%x 0x%x 0x%x\n", - NIUSB_TERM_ID, 0x0, 0x0, 0x0); + pr_err("received unexpected termination block\n"); + pr_err(" expected: 0x%x 0x%x 0x%x 0x%x\n", NIUSB_TERM_ID, 0x0, 0x0, 0x0); pr_err(" received: 0x%x 0x%x 0x%x 0x%x\n", buffer[i - 4], buffer[i - 3], buffer[i - 2], buffer[i - 1]); } @@ -427,7 +430,6 @@ static int parse_board_ibrd_readback(const u8 *raw_data, struct ni_usb_status_bl int i = 0; int j = 0; int k; - unsigned int adr1_bits; int num_data_blocks = 0; struct ni_usb_status_block register_write_status; int unexpected = 0; @@ -438,12 +440,12 @@ static int parse_board_ibrd_readback(const u8 *raw_data, struct ni_usb_status_bl } else if (raw_data[i] == NIUSB_IBRD_EXTENDED_DATA_ID) { data_block_length = ibrd_extended_data_block_length; if (raw_data[++i] != 0) { - pr_err("%s: unexpected data: raw_data[%i]=0x%x, expected 0\n", - __func__, i, (int)raw_data[i]); + pr_err("unexpected data: raw_data[%i]=0x%x, expected 0\n", + i, (int)raw_data[i]); unexpected = 1; } } else { - pr_err("%s: logic bug!\n", __func__); + pr_err("Unexpected NIUSB_IBRD ID\n"); return -EINVAL; } ++i; @@ -457,10 +459,10 @@ static int parse_board_ibrd_readback(const u8 *raw_data, struct ni_usb_status_bl } i += ni_usb_parse_status_block(&raw_data[i], status); if (status->id != NIUSB_IBRD_STATUS_ID) { - pr_err("%s: bug: status->id=%i, != ibrd_status_id\n", __func__, status->id); + pr_err("bug: status->id=%i, != ibrd_status_id\n", status->id); return -EIO; } - adr1_bits = raw_data[i++]; + i++; if (num_data_blocks) { *actual_bytes_read = (num_data_blocks - 1) * data_block_length + raw_data[i++]; } else { @@ -468,29 +470,28 @@ static int parse_board_ibrd_readback(const u8 *raw_data, struct ni_usb_status_bl *actual_bytes_read = 0; } if (*actual_bytes_read > j) - pr_err("%s: bug: discarded data. actual_bytes_read=%i, j=%i\n", - __func__, *actual_bytes_read, j); + pr_err("bug: discarded data. actual_bytes_read=%i, j=%i\n", *actual_bytes_read, j); for (k = 0; k < 2; k++) if (raw_data[i++] != 0) { - pr_err("%s: unexpected data: raw_data[%i]=0x%x, expected 0\n", - __func__, i - 1, (int)raw_data[i - 1]); + pr_err("unexpected data: raw_data[%i]=0x%x, expected 0\n", + i - 1, (int)raw_data[i - 1]); unexpected = 1; } i += ni_usb_parse_status_block(&raw_data[i], ®ister_write_status); if (register_write_status.id != NIUSB_REG_WRITE_ID) { - pr_err("%s: unexpected data: register write status id=0x%x, expected 0x%x\n", - __func__, register_write_status.id, NIUSB_REG_WRITE_ID); + pr_err("unexpected data: register write status id=0x%x, expected 0x%x\n", + register_write_status.id, NIUSB_REG_WRITE_ID); unexpected = 1; } if (raw_data[i++] != 2) { - pr_err("%s: unexpected data: register write count=%i, expected 2\n", - __func__, (int)raw_data[i - 1]); + pr_err("unexpected data: register write count=%i, expected 2\n", + (int)raw_data[i - 1]); unexpected = 1; } for (k = 0; k < 3; k++) if (raw_data[i++] != 0) { - pr_err("%s: unexpected data: raw_data[%i]=0x%x, expected 0\n", - __func__, i - 1, (int)raw_data[i - 1]); + pr_err("unexpected data: raw_data[%i]=0x%x, expected 0\n", + i - 1, (int)raw_data[i - 1]); unexpected = 1; } i += ni_usb_parse_termination_block(&raw_data[i]); @@ -530,18 +531,14 @@ static int ni_usb_write_registers(struct ni_usb_priv *ni_priv, out_data_length = num_writes * bytes_per_write + 0x10; out_data = kmalloc(out_data_length, GFP_KERNEL); - if (!out_data) { - dev_err(&usb_dev->dev, "%s: kmalloc failed\n", __func__); + if (!out_data) return -ENOMEM; - } i += ni_usb_bulk_register_write_header(&out_data[i], num_writes); for (j = 0; j < num_writes; j++) i += ni_usb_bulk_register_write(&out_data[i], writes[j]); while (i % 4) out_data[i++] = 0x00; i += ni_usb_bulk_termination(&out_data[i]); - if (i > out_data_length) - dev_err(&usb_dev->dev, "%s: bug! buffer overrun\n", __func__); mutex_lock(&ni_priv->addressed_transfer_lock); @@ -549,22 +546,21 @@ static int ni_usb_write_registers(struct ni_usb_priv *ni_priv, kfree(out_data); if (retval) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); return retval; } in_data = kmalloc(in_data_length, GFP_KERNEL); if (!in_data) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: kmalloc failed\n", __func__); return -ENOMEM; } retval = ni_usb_receive_bulk_msg(ni_priv, in_data, in_data_length, &bytes_read, 1000, 0); if (retval || bytes_read != 16) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); ni_usb_dump_raw_block(in_data, bytes_read); kfree(in_data); return retval; @@ -576,18 +572,16 @@ static int ni_usb_write_registers(struct ni_usb_priv *ni_priv, //FIXME parse extra 09 status bits and termination kfree(in_data); if (status.id != NIUSB_REG_WRITE_ID) { - dev_err(&usb_dev->dev, "%s: parse error, id=0x%x != NIUSB_REG_WRITE_ID\n", - __func__, status.id); + dev_err(&usb_dev->dev, "parse error, id=0x%x != NIUSB_REG_WRITE_ID\n", status.id); return -EIO; } if (status.error_code) { - dev_err(&usb_dev->dev, "%s: nonzero error code 0x%x\n", - __func__, status.error_code); + dev_err(&usb_dev->dev, "nonzero error code 0x%x\n", status.error_code); return -EIO; } if (reg_writes_completed != num_writes) { - dev_err(&usb_dev->dev, "%s: reg_writes_completed=%i, num_writes=%i\n", - __func__, reg_writes_completed, num_writes); + dev_err(&usb_dev->dev, "reg_writes_completed=%i, num_writes=%i\n", + reg_writes_completed, num_writes); return -EIO; } if (ibsta) @@ -596,12 +590,12 @@ static int ni_usb_write_registers(struct ni_usb_priv *ni_priv, } // interface functions -static int ni_usb_read(gpib_board_t *board, uint8_t *buffer, size_t length, +static int ni_usb_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { int retval, parse_retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; static const int out_data_length = 0x20; int in_data_length; @@ -614,10 +608,11 @@ static int ni_usb_read(gpib_board_t *board, uint8_t *buffer, size_t length, struct ni_usb_register reg; *bytes_read = 0; - if (length > max_read_length) { - length = max_read_length; - dev_err(&usb_dev->dev, "%s: read length too long\n", __func__); - } + if (!ni_priv->bus_interface) + return -ENODEV; + if (length > max_read_length) + return -EINVAL; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) return -ENOMEM; @@ -649,8 +644,8 @@ static int ni_usb_read(gpib_board_t *board, uint8_t *buffer, size_t length, if (retval || usb_bytes_written != i) { if (retval == 0) retval = -EIO; - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, usb_bytes_written=%i, i=%i\n", - __func__, retval, usb_bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, usb_bytes_written=%i, i=%i\n", + retval, usb_bytes_written, i); mutex_unlock(&ni_priv->addressed_transfer_lock); return retval; } @@ -668,8 +663,8 @@ static int ni_usb_read(gpib_board_t *board, uint8_t *buffer, size_t length, if (retval == -ERESTARTSYS) { } else if (retval) { - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, usb_bytes_read=%i\n", - __func__, retval, usb_bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, usb_bytes_read=%i\n", + retval, usb_bytes_read); kfree(in_data); return retval; } @@ -677,14 +672,14 @@ static int ni_usb_read(gpib_board_t *board, uint8_t *buffer, size_t length, if (parse_retval != usb_bytes_read) { if (parse_retval >= 0) parse_retval = -EIO; - dev_err(&usb_dev->dev, "%s: retval=%i usb_bytes_read=%i\n", - __func__, parse_retval, usb_bytes_read); + dev_err(&usb_dev->dev, "retval=%i usb_bytes_read=%i\n", + parse_retval, usb_bytes_read); kfree(in_data); return parse_retval; } if (actual_length != length - status.count) { - dev_err(&usb_dev->dev, "%s: actual_length=%i expected=%li\n", - __func__, actual_length, (long)(length - status.count)); + dev_err(&usb_dev->dev, "actual_length=%i expected=%li\n", + actual_length, (long)(length - status.count)); ni_usb_dump_raw_block(in_data, usb_bytes_read); } kfree(in_data); @@ -693,13 +688,14 @@ static int ni_usb_read(gpib_board_t *board, uint8_t *buffer, size_t length, retval = 0; break; case NIUSB_ABORTED_ERROR: - /* this is expected if ni_usb_receive_bulk_msg got + /* + * this is expected if ni_usb_receive_bulk_msg got * interrupted by a signal and returned -ERESTARTSYS */ break; case NIUSB_ATN_STATE_ERROR: retval = -EIO; - dev_err(&usb_dev->dev, "%s: read when ATN set\n", __func__); + dev_err(&usb_dev->dev, "read when ATN set\n"); break; case NIUSB_ADDRESSING_ERROR: retval = -EIO; @@ -708,12 +704,11 @@ static int ni_usb_read(gpib_board_t *board, uint8_t *buffer, size_t length, retval = -ETIMEDOUT; break; case NIUSB_EOSMODE_ERROR: - dev_err(&usb_dev->dev, "%s: driver bug, we should have been able to avoid NIUSB_EOSMODE_ERROR.\n", - __func__); + dev_err(&usb_dev->dev, "driver bug, we should have been able to avoid NIUSB_EOSMODE_ERROR.\n"); retval = -EINVAL; break; default: - dev_err(&usb_dev->dev, "%s: unknown error code=%i\n", __func__, status.error_code); + dev_err(&usb_dev->dev, "unknown error code=%i\n", status.error_code); retval = -EIO; break; } @@ -726,12 +721,12 @@ static int ni_usb_read(gpib_board_t *board, uint8_t *buffer, size_t length, return retval; } -static int ni_usb_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int ni_usb_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; int out_data_length; static const int in_data_length = 0x10; @@ -741,12 +736,11 @@ static int ni_usb_write(gpib_board_t *board, uint8_t *buffer, size_t length, struct ni_usb_status_block status; static const int max_write_length = 0xffff; - *bytes_written = 0; - if (length > max_write_length) { - length = max_write_length; - send_eoi = 0; - dev_err(&usb_dev->dev, "%s: write length too long\n", __func__); - } + if (!ni_priv->bus_interface) + return -ENODEV; + if (length > max_write_length) + return -EINVAL; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); out_data_length = length + 0x10; out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) @@ -777,8 +771,8 @@ static int ni_usb_write(gpib_board_t *board, uint8_t *buffer, size_t length, kfree(out_data); if (retval || usb_bytes_written != i) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, usb_bytes_written=%i, i=%i\n", - __func__, retval, usb_bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, usb_bytes_written=%i, i=%i\n", + retval, usb_bytes_written, i); return retval; } @@ -793,8 +787,8 @@ static int ni_usb_write(gpib_board_t *board, uint8_t *buffer, size_t length, mutex_unlock(&ni_priv->addressed_transfer_lock); if ((retval && retval != -ERESTARTSYS) || usb_bytes_read != 12) { - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, usb_bytes_read=%i\n", - __func__, retval, usb_bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, usb_bytes_read=%i\n", + retval, usb_bytes_read); kfree(in_data); return retval; } @@ -805,13 +799,14 @@ static int ni_usb_write(gpib_board_t *board, uint8_t *buffer, size_t length, retval = 0; break; case NIUSB_ABORTED_ERROR: - /* this is expected if ni_usb_receive_bulk_msg got + /* + * this is expected if ni_usb_receive_bulk_msg got * interrupted by a signal and returned -ERESTARTSYS */ break; case NIUSB_ADDRESSING_ERROR: - dev_err(&usb_dev->dev, "%s: Addressing error retval %d error code=%i\n", - __func__, retval, status.error_code); + dev_err(&usb_dev->dev, "Addressing error retval %d error code=%i\n", + retval, status.error_code); retval = -ENXIO; break; case NIUSB_NO_LISTENER_ERROR: @@ -821,8 +816,7 @@ static int ni_usb_write(gpib_board_t *board, uint8_t *buffer, size_t length, retval = -ETIMEDOUT; break; default: - dev_err(&usb_dev->dev, "%s: unknown error code=%i\n", - __func__, status.error_code); + dev_err(&usb_dev->dev, "unknown error code=%i\n", status.error_code); retval = -EPIPE; break; } @@ -831,12 +825,12 @@ static int ni_usb_write(gpib_board_t *board, uint8_t *buffer, size_t length, return retval; } -static int ni_usb_command_chunk(gpib_board_t *board, uint8_t *buffer, size_t length, +static int ni_usb_command_chunk(struct gpib_board *board, u8 *buffer, size_t length, size_t *command_bytes_written) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; int out_data_length; static const int in_data_length = 0x10; @@ -848,8 +842,11 @@ static int ni_usb_command_chunk(gpib_board_t *board, uint8_t *buffer, size_t len static const int max_command_length = 0x10; *command_bytes_written = 0; + if (!ni_priv->bus_interface) + return -ENODEV; if (length > max_command_length) length = max_command_length; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); out_data_length = length + 0x10; out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) @@ -873,8 +870,8 @@ static int ni_usb_command_chunk(gpib_board_t *board, uint8_t *buffer, size_t len kfree(out_data); if (retval || bytes_written != i) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); return retval; } @@ -890,8 +887,8 @@ static int ni_usb_command_chunk(gpib_board_t *board, uint8_t *buffer, size_t len mutex_unlock(&ni_priv->addressed_transfer_lock); if ((retval && retval != -ERESTARTSYS) || bytes_read != 12) { - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); kfree(in_data); return retval; } @@ -902,26 +899,27 @@ static int ni_usb_command_chunk(gpib_board_t *board, uint8_t *buffer, size_t len case NIUSB_NO_ERROR: break; case NIUSB_ABORTED_ERROR: - /* this is expected if ni_usb_receive_bulk_msg got + /* + * this is expected if ni_usb_receive_bulk_msg got * interrupted by a signal and returned -ERESTARTSYS */ break; case NIUSB_NO_BUS_ERROR: return -ENOTCONN; case NIUSB_EOSMODE_ERROR: - dev_err(&usb_dev->dev, "%s: got eosmode error. Driver bug?\n", __func__); + dev_err(&usb_dev->dev, "got eosmode error. Driver bug?\n"); return -EIO; case NIUSB_TIMEOUT_ERROR: return -ETIMEDOUT; default: - dev_err(&usb_dev->dev, "%s: unknown error code=%i\n", __func__, status.error_code); + dev_err(&usb_dev->dev, "unknown error code=%i\n", status.error_code); return -EIO; } ni_usb_soft_update_status(board, status.ibsta, 0); return 0; } -static int ni_usb_command(gpib_board_t *board, uint8_t *buffer, size_t length, +static int ni_usb_command(struct gpib_board *board, u8 *buffer, size_t length, size_t *bytes_written) { size_t count; @@ -938,11 +936,11 @@ static int ni_usb_command(gpib_board_t *board, uint8_t *buffer, size_t length, return 0; } -static int ni_usb_take_control(gpib_board_t *board, int synchronous) +static int ni_usb_take_control(struct gpib_board *board, int synchronous) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; static const int out_data_length = 0x10; static const int in_data_length = 0x10; @@ -950,6 +948,9 @@ static int ni_usb_take_control(gpib_board_t *board, int synchronous) int i = 0; struct ni_usb_status_block status; + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) return -ENOMEM; @@ -968,15 +969,14 @@ static int ni_usb_take_control(gpib_board_t *board, int synchronous) kfree(out_data); if (retval || bytes_written != i) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); return retval; } in_data = kmalloc(in_data_length, GFP_KERNEL); if (!in_data) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: kmalloc failed\n", __func__); return -ENOMEM; } retval = ni_usb_receive_bulk_msg(ni_priv, in_data, in_data_length, &bytes_read, 1000, 1); @@ -986,8 +986,8 @@ static int ni_usb_take_control(gpib_board_t *board, int synchronous) if ((retval && retval != -ERESTARTSYS) || bytes_read != 12) { if (retval == 0) retval = -EIO; - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); kfree(in_data); return retval; } @@ -997,11 +997,11 @@ static int ni_usb_take_control(gpib_board_t *board, int synchronous) return retval; } -static int ni_usb_go_to_standby(gpib_board_t *board) +static int ni_usb_go_to_standby(struct gpib_board *board) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; static const int out_data_length = 0x10; static const int in_data_length = 0x20; @@ -1009,6 +1009,9 @@ static int ni_usb_go_to_standby(gpib_board_t *board) int i = 0; struct ni_usb_status_block status; + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) return -ENOMEM; @@ -1025,15 +1028,14 @@ static int ni_usb_go_to_standby(gpib_board_t *board) kfree(out_data); if (retval || bytes_written != i) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); return retval; } in_data = kmalloc(in_data_length, GFP_KERNEL); if (!in_data) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: kmalloc failed\n", __func__); return -ENOMEM; } retval = ni_usb_receive_bulk_msg(ni_priv, in_data, in_data_length, &bytes_read, 1000, 0); @@ -1041,29 +1043,31 @@ static int ni_usb_go_to_standby(gpib_board_t *board) mutex_unlock(&ni_priv->addressed_transfer_lock); if (retval || bytes_read != 12) { - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); kfree(in_data); return retval; } ni_usb_parse_status_block(in_data, &status); kfree(in_data); if (status.id != NIUSB_IBGTS_ID) - dev_err(&usb_dev->dev, "%s: bug: status.id 0x%x != INUSB_IBGTS_ID\n", - __func__, status.id); + dev_err(&usb_dev->dev, "bug: status.id 0x%x != INUSB_IBGTS_ID\n", status.id); ni_usb_soft_update_status(board, status.ibsta, 0); return 0; } -static void ni_usb_request_system_control(gpib_board_t *board, int request_control) +static int ni_usb_request_system_control(struct gpib_board *board, int request_control) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; int i = 0; struct ni_usb_register writes[4]; unsigned int ibsta; + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); if (request_control) { writes[i].device = NIUSB_SUBDEV_TNT4882; writes[i].address = CMDR; @@ -1093,21 +1097,21 @@ static void ni_usb_request_system_control(gpib_board_t *board, int request_contr } retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); - return; // retval; + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); + return retval; } if (!request_control) ni_priv->ren_state = 0; ni_usb_soft_update_status(board, ibsta, 0); - return; // 0; + return 0; } //FIXME maybe the interface should have a "pulse interface clear" function that can return an error? -static void ni_usb_interface_clear(gpib_board_t *board, int assert) +static void ni_usb_interface_clear(struct gpib_board *board, int assert) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; static const int out_data_length = 0x10; static const int in_data_length = 0x10; @@ -1115,14 +1119,15 @@ static void ni_usb_interface_clear(gpib_board_t *board, int assert) int i = 0; struct ni_usb_status_block status; - // FIXME: we are going to pulse when assert is true, and ignore otherwise + if (!ni_priv->bus_interface) + return; // -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); +// FIXME: we are going to pulse when assert is true, and ignore otherwise if (assert == 0) return; out_data = kmalloc(out_data_length, GFP_KERNEL); - if (!out_data) { - dev_err(&usb_dev->dev, "%s: kmalloc failed\n", __func__); + if (!out_data) return; - } out_data[i++] = NIUSB_IBSIC_ID; out_data[i++] = 0x0; out_data[i++] = 0x0; @@ -1131,8 +1136,8 @@ static void ni_usb_interface_clear(gpib_board_t *board, int assert) retval = ni_usb_send_bulk_msg(ni_priv, out_data, i, &bytes_written, 1000); kfree(out_data); if (retval || bytes_written != i) { - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); return; } in_data = kmalloc(in_data_length, GFP_KERNEL); @@ -1141,8 +1146,8 @@ static void ni_usb_interface_clear(gpib_board_t *board, int assert) retval = ni_usb_receive_bulk_msg(ni_priv, in_data, in_data_length, &bytes_read, 1000, 0); if (retval || bytes_read != 12) { - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); kfree(in_data); return; } @@ -1151,14 +1156,17 @@ static void ni_usb_interface_clear(gpib_board_t *board, int assert) ni_usb_soft_update_status(board, status.ibsta, 0); } -static void ni_usb_remote_enable(gpib_board_t *board, int enable) +static void ni_usb_remote_enable(struct gpib_board *board, int enable) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; struct ni_usb_register reg; unsigned int ibsta; + if (!ni_priv->bus_interface) + return; // -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); reg.device = NIUSB_SUBDEV_TNT4882; reg.address = nec7210_to_tnt4882_offset(AUXMR); if (enable) @@ -1167,7 +1175,7 @@ static void ni_usb_remote_enable(gpib_board_t *board, int enable) reg.value = AUX_CREN; retval = ni_usb_write_registers(ni_priv, ®, 1, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return; //retval; } ni_priv->ren_state = enable; @@ -1175,7 +1183,7 @@ static void ni_usb_remote_enable(gpib_board_t *board, int enable) return;// 0; } -static int ni_usb_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int ni_usb_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct ni_usb_priv *ni_priv = board->private_data; @@ -1188,26 +1196,29 @@ static int ni_usb_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_ return 0; } -static void ni_usb_disable_eos(gpib_board_t *board) +static void ni_usb_disable_eos(struct gpib_board *board) { struct ni_usb_priv *ni_priv = board->private_data; - /* adapter gets unhappy if you don't zero all the bits - * for the eos mode and eos char (returns error 4 on reads). + /* + * adapter gets unhappy if you don't zero all the bits + * for the eos mode and eos char (returns error 4 on reads). */ ni_priv->eos_mode = 0; ni_priv->eos_char = 0; } -static unsigned int ni_usb_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int ni_usb_update_status(struct gpib_board *board, unsigned int clear_mask) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; static const int buffer_length = 8; u8 *buffer; struct ni_usb_status_block status; - //printk("%s: receive control pipe is %i\n", __func__, pipe); + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); buffer = kmalloc(buffer_length, GFP_KERNEL); if (!buffer) return board->status; @@ -1216,7 +1227,7 @@ static unsigned int ni_usb_update_status(gpib_board_t *board, unsigned int clear USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0x200, 0x0, buffer, buffer_length, 1000); if (retval != buffer_length) { - dev_err(&usb_dev->dev, "%s: usb_control_msg returned %i\n", __func__, retval); + dev_err(&usb_dev->dev, "usb_control_msg returned %i\n", retval); kfree(buffer); return board->status; } @@ -1235,7 +1246,6 @@ static void ni_usb_stop(struct ni_usb_priv *ni_priv) u8 *buffer; struct ni_usb_status_block status; - //printk("%s: receive control pipe is %i\n", __func__, pipe); buffer = kmalloc(buffer_length, GFP_KERNEL); if (!buffer) return; @@ -1244,7 +1254,7 @@ static void ni_usb_stop(struct ni_usb_priv *ni_priv) USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0x0, 0x0, buffer, buffer_length, 1000); if (retval != buffer_length) { - dev_err(&usb_dev->dev, "%s: usb_control_msg returned %i\n", __func__, retval); + dev_err(&usb_dev->dev, "usb_control_msg returned %i\n", retval); kfree(buffer); return; } @@ -1252,15 +1262,18 @@ static void ni_usb_stop(struct ni_usb_priv *ni_priv) kfree(buffer); } -static int ni_usb_primary_address(gpib_board_t *board, unsigned int address) +static int ni_usb_primary_address(struct gpib_board *board, unsigned int address) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; int i = 0; struct ni_usb_register writes[2]; unsigned int ibsta; + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); writes[i].device = NIUSB_SUBDEV_TNT4882; writes[i].address = nec7210_to_tnt4882_offset(ADR); writes[i].value = address; @@ -1271,7 +1284,7 @@ static int ni_usb_primary_address(gpib_board_t *board, unsigned int address) i++; retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return retval; } ni_usb_soft_update_status(board, ibsta, 0); @@ -1307,30 +1320,33 @@ static int ni_usb_write_sad(struct ni_usb_register *writes, int address, int ena return i; } -static int ni_usb_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int ni_usb_secondary_address(struct gpib_board *board, unsigned int address, int enable) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; int i = 0; struct ni_usb_register writes[3]; unsigned int ibsta; + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); i += ni_usb_write_sad(writes, address, enable); retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return retval; } ni_usb_soft_update_status(board, ibsta, 0); return 0; } -static int ni_usb_parallel_poll(gpib_board_t *board, uint8_t *result) +static int ni_usb_parallel_poll(struct gpib_board *board, u8 *result) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; static const int out_data_length = 0x10; static const int in_data_length = 0x20; @@ -1339,6 +1355,9 @@ static int ni_usb_parallel_poll(gpib_board_t *board, uint8_t *result) int j = 0; struct ni_usb_status_block status; + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) return -ENOMEM; @@ -1353,8 +1372,8 @@ static int ni_usb_parallel_poll(gpib_board_t *board, uint8_t *result) kfree(out_data); if (retval || bytes_written != i) { - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); return retval; } in_data = kmalloc(in_data_length, GFP_KERNEL); @@ -1366,8 +1385,8 @@ static int ni_usb_parallel_poll(gpib_board_t *board, uint8_t *result) &bytes_read, 1000, 1); if (retval && retval != -ERESTARTSYS) { - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); kfree(in_data); return retval; } @@ -1378,37 +1397,43 @@ static int ni_usb_parallel_poll(gpib_board_t *board, uint8_t *result) return retval; } -static void ni_usb_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void ni_usb_parallel_poll_configure(struct gpib_board *board, u8 config) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; int i = 0; struct ni_usb_register writes[1]; unsigned int ibsta; + if (!ni_priv->bus_interface) + return; // -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); writes[i].device = NIUSB_SUBDEV_TNT4882; writes[i].address = nec7210_to_tnt4882_offset(AUXMR); writes[i].value = PPR | config; i++; retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return;// retval; } ni_usb_soft_update_status(board, ibsta, 0); return;// 0; } -static void ni_usb_parallel_poll_response(gpib_board_t *board, int ist) +static void ni_usb_parallel_poll_response(struct gpib_board *board, int ist) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; int i = 0; struct ni_usb_register writes[1]; unsigned int ibsta; + if (!ni_priv->bus_interface) + return; // -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); writes[i].device = NIUSB_SUBDEV_TNT4882; writes[i].address = nec7210_to_tnt4882_offset(AUXMR); if (ist) @@ -1418,76 +1443,85 @@ static void ni_usb_parallel_poll_response(gpib_board_t *board, int ist) i++; retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return;// retval; } ni_usb_soft_update_status(board, ibsta, 0); return;// 0; } -static void ni_usb_serial_poll_response(gpib_board_t *board, u8 status) +static void ni_usb_serial_poll_response(struct gpib_board *board, u8 status) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; int i = 0; struct ni_usb_register writes[1]; unsigned int ibsta; + if (!ni_priv->bus_interface) + return; // -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); writes[i].device = NIUSB_SUBDEV_TNT4882; writes[i].address = nec7210_to_tnt4882_offset(SPMR); writes[i].value = status; i++; retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return;// retval; } ni_usb_soft_update_status(board, ibsta, 0); return;// 0; } -static uint8_t ni_usb_serial_poll_status(gpib_board_t *board) +static u8 ni_usb_serial_poll_status(struct gpib_board *board) { return 0; } -static void ni_usb_return_to_local(gpib_board_t *board) +static void ni_usb_return_to_local(struct gpib_board *board) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; int i = 0; struct ni_usb_register writes[1]; unsigned int ibsta; + if (!ni_priv->bus_interface) + return; // -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); writes[i].device = NIUSB_SUBDEV_TNT4882; writes[i].address = nec7210_to_tnt4882_offset(AUXMR); writes[i].value = AUX_RTL; i++; retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return;// retval; } ni_usb_soft_update_status(board, ibsta, 0); return;// 0; } -static int ni_usb_line_status(const gpib_board_t *board) +static int ni_usb_line_status(const struct gpib_board *board) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; u8 *out_data, *in_data; static const int out_data_length = 0x20; static const int in_data_length = 0x20; int bytes_written = 0, bytes_read = 0; int i = 0; unsigned int bsr_bits; - int line_status = ValidALL; + int line_status = VALID_ALL; // NI windows driver reads 0xd(HSSEL), 0xc (ARD0), 0x1f (BSR) + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); out_data = kmalloc(out_data_length, GFP_KERNEL); if (!out_data) return -ENOMEM; @@ -1509,15 +1543,14 @@ static int ni_usb_line_status(const gpib_board_t *board) if (retval || bytes_written != i) { mutex_unlock(&ni_priv->addressed_transfer_lock); if (retval != -EAGAIN) - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, bytes_written=%i, i=%i\n", - __func__, retval, bytes_written, i); + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%i\n", + retval, bytes_written, i); return retval; } in_data = kmalloc(in_data_length, GFP_KERNEL); if (!in_data) { mutex_unlock(&ni_priv->addressed_transfer_lock); - dev_err(&usb_dev->dev, "%s: kmalloc failed\n", __func__); return -ENOMEM; } retval = ni_usb_nonblocking_receive_bulk_msg(ni_priv, in_data, in_data_length, @@ -1527,8 +1560,8 @@ static int ni_usb_line_status(const gpib_board_t *board) if (retval) { if (retval != -EAGAIN) - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); kfree(in_data); return retval; } @@ -1536,21 +1569,21 @@ static int ni_usb_line_status(const gpib_board_t *board) ni_usb_parse_register_read_block(in_data, &bsr_bits, 1); kfree(in_data); if (bsr_bits & BCSR_REN_BIT) - line_status |= BusREN; + line_status |= BUS_REN; if (bsr_bits & BCSR_IFC_BIT) - line_status |= BusIFC; + line_status |= BUS_IFC; if (bsr_bits & BCSR_SRQ_BIT) - line_status |= BusSRQ; + line_status |= BUS_SRQ; if (bsr_bits & BCSR_EOI_BIT) - line_status |= BusEOI; + line_status |= BUS_EOI; if (bsr_bits & BCSR_NRFD_BIT) - line_status |= BusNRFD; + line_status |= BUS_NRFD; if (bsr_bits & BCSR_NDAC_BIT) - line_status |= BusNDAC; + line_status |= BUS_NDAC; if (bsr_bits & BCSR_DAV_BIT) - line_status |= BusDAV; + line_status |= BUS_DAV; if (bsr_bits & BCSR_ATN_BIT) - line_status |= BusATN; + line_status |= BUS_ATN; return line_status; } @@ -1591,28 +1624,31 @@ static int ni_usb_setup_t1_delay(struct ni_usb_register *reg, unsigned int nano_ return i; } -static unsigned int ni_usb_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int ni_usb_t1_delay(struct gpib_board *board, unsigned int nano_sec) { int retval; struct ni_usb_priv *ni_priv = board->private_data; - struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); + struct usb_device *usb_dev; struct ni_usb_register writes[3]; unsigned int ibsta; unsigned int actual_ns; int i; + if (!ni_priv->bus_interface) + return -ENODEV; + usb_dev = interface_to_usbdev(ni_priv->bus_interface); i = ni_usb_setup_t1_delay(writes, nano_sec, &actual_ns); retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); - return -1; //FIXME should change return type to int for error reporting + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); + return retval; } board->t1_nano_sec = actual_ns; ni_usb_soft_update_status(board, ibsta, 0); return actual_ns; } -static int ni_usb_allocate_private(gpib_board_t *board) +static int ni_usb_allocate_private(struct gpib_board *board) { struct ni_usb_priv *ni_priv; @@ -1635,7 +1671,7 @@ static void ni_usb_free_private(struct ni_usb_priv *ni_priv) } #define NUM_INIT_WRITES 26 -static int ni_usb_setup_init(gpib_board_t *board, struct ni_usb_register *writes) +static int ni_usb_setup_init(struct gpib_board *board, struct ni_usb_register *writes) { struct ni_usb_priv *ni_priv = board->private_data; struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); @@ -1736,13 +1772,13 @@ static int ni_usb_setup_init(gpib_board_t *board, struct ni_usb_register *writes writes[i].value = AUX_CPPF; i++; if (i > NUM_INIT_WRITES) { - dev_err(&usb_dev->dev, "%s: bug!, buffer overrun, i=%i\n", __func__, i); + dev_err(&usb_dev->dev, "bug!, buffer overrun, i=%i\n", i); return 0; } return i; } -static int ni_usb_init(gpib_board_t *board) +static int ni_usb_init(struct gpib_board *board) { int retval; struct ni_usb_priv *ni_priv = board->private_data; @@ -1762,7 +1798,7 @@ static int ni_usb_init(gpib_board_t *board) return -EFAULT; kfree(writes); if (retval) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return retval; } ni_usb_soft_update_status(board, ibsta, 0); @@ -1771,16 +1807,13 @@ static int ni_usb_init(gpib_board_t *board) static void ni_usb_interrupt_complete(struct urb *urb) { - gpib_board_t *board = urb->context; + struct gpib_board *board = urb->context; struct ni_usb_priv *ni_priv = board->private_data; struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); int retval; struct ni_usb_status_block status; unsigned long flags; -// printk("debug: %s: status=0x%x, error_count=%i, actual_length=%i\n", __func__, -// urb->status, urb->error_count, urb->actual_length); - switch (urb->status) { /* success */ case 0: @@ -1793,26 +1826,24 @@ static void ni_usb_interrupt_complete(struct urb *urb) default: /* other error, resubmit */ retval = usb_submit_urb(ni_priv->interrupt_urb, GFP_ATOMIC); if (retval) - dev_err(&usb_dev->dev, "%s: failed to resubmit interrupt urb\n", __func__); + dev_err(&usb_dev->dev, "failed to resubmit interrupt urb\n"); return; } ni_usb_parse_status_block(urb->transfer_buffer, &status); -// printk("debug: ibsta=0x%x\n", status.ibsta); spin_lock_irqsave(&board->spinlock, flags); ni_priv->monitored_ibsta_bits &= ~status.ibsta; -// printk("debug: monitored_ibsta_bits=0x%x\n", ni_priv->monitored_ibsta_bits); spin_unlock_irqrestore(&board->spinlock, flags); wake_up_interruptible(&board->wait); retval = usb_submit_urb(ni_priv->interrupt_urb, GFP_ATOMIC); if (retval) - dev_err(&usb_dev->dev, "%s: failed to resubmit interrupt urb\n", __func__); + dev_err(&usb_dev->dev, "failed to resubmit interrupt urb\n"); } -static int ni_usb_set_interrupt_monitor(gpib_board_t *board, unsigned int monitored_bits) +static int ni_usb_set_interrupt_monitor(struct gpib_board *board, unsigned int monitored_bits) { int retval; struct ni_usb_priv *ni_priv = board->private_data; @@ -1821,22 +1852,20 @@ static int ni_usb_set_interrupt_monitor(gpib_board_t *board, unsigned int monito u8 *buffer; struct ni_usb_status_block status; unsigned long flags; - //printk("%s: receive control pipe is %i\n", __func__, pipe); + buffer = kmalloc(buffer_length, GFP_KERNEL); if (!buffer) return -ENOMEM; spin_lock_irqsave(&board->spinlock, flags); ni_priv->monitored_ibsta_bits = ni_usb_ibsta_monitor_mask & monitored_bits; -// dev_err(&usb_dev->dev, "debug: %s: monitored_ibsta_bits=0x%x\n", -// __func__, ni_priv->monitored_ibsta_bits); spin_unlock_irqrestore(&board->spinlock, flags); retval = ni_usb_receive_control_msg(ni_priv, NI_USB_WAIT_REQUEST, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0x300, ni_usb_ibsta_monitor_mask & monitored_bits, buffer, buffer_length, 1000); if (retval != buffer_length) { - dev_err(&usb_dev->dev, "%s: usb_control_msg returned %i\n", __func__, retval); + dev_err(&usb_dev->dev, "usb_control_msg returned %i\n", retval); kfree(buffer); return -1; } @@ -1845,7 +1874,7 @@ static int ni_usb_set_interrupt_monitor(gpib_board_t *board, unsigned int monito return 0; } -static int ni_usb_setup_urbs(gpib_board_t *board) +static int ni_usb_setup_urbs(struct gpib_board *board) { struct ni_usb_priv *ni_priv = board->private_data; struct usb_device *usb_dev; @@ -1872,8 +1901,7 @@ static int ni_usb_setup_urbs(gpib_board_t *board) retval = usb_submit_urb(ni_priv->interrupt_urb, GFP_KERNEL); mutex_unlock(&ni_priv->interrupt_transfer_lock); if (retval) { - dev_err(&usb_dev->dev, "%s: failed to submit first interrupt urb, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "failed to submit first interrupt urb, retval=%i\n", retval); return retval; } return 0; @@ -1904,7 +1932,6 @@ static int ni_usb_b_read_serial_number(struct ni_usb_priv *ni_priv) int j; unsigned int serial_number; -// printk("%s: %s\n", __func__); in_data = kmalloc(in_data_length, GFP_KERNEL); if (!in_data) return -ENOMEM; @@ -1924,20 +1951,19 @@ static int ni_usb_b_read_serial_number(struct ni_usb_priv *ni_priv) i += ni_usb_bulk_termination(&out_data[i]); retval = ni_usb_send_bulk_msg(ni_priv, out_data, out_data_length, &bytes_written, 1000); if (retval) { - dev_err(&usb_dev->dev, "%s: ni_usb_send_bulk_msg returned %i, bytes_written=%i, i=%li\n", - __func__, + dev_err(&usb_dev->dev, "send_bulk_msg returned %i, bytes_written=%i, i=%li\n", retval, bytes_written, (long)out_data_length); goto serial_out; } retval = ni_usb_receive_bulk_msg(ni_priv, in_data, in_data_length, &bytes_read, 1000, 0); if (retval) { - dev_err(&usb_dev->dev, "%s: ni_usb_receive_bulk_msg returned %i, bytes_read=%i\n", - __func__, retval, bytes_read); + dev_err(&usb_dev->dev, "receive_bulk_msg returned %i, bytes_read=%i\n", + retval, bytes_read); ni_usb_dump_raw_block(in_data, bytes_read); goto serial_out; } if (ARRAY_SIZE(results) < num_reads) { - dev_err(&usb_dev->dev, "Setup bug\n"); + dev_err(&usb_dev->dev, "serial number eetup bug\n"); retval = -EINVAL; goto serial_out; } @@ -1945,7 +1971,7 @@ static int ni_usb_b_read_serial_number(struct ni_usb_priv *ni_priv) serial_number = 0; for (j = 0; j < num_reads; ++j) serial_number |= (results[j] & 0xff) << (8 * j); - dev_info(&usb_dev->dev, "%s: board serial number is 0x%x\n", __func__, serial_number); + dev_dbg(&usb_dev->dev, "board serial number is 0x%x\n", serial_number); retval = 0; serial_out: kfree(in_data); @@ -1973,22 +1999,22 @@ static int ni_usb_hs_wait_for_ready(struct ni_usb_priv *ni_priv) USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0x0, 0x0, buffer, buffer_size, 1000); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: usb_control_msg request 0x%x returned %i\n", - __func__, NI_USB_SERIAL_NUMBER_REQUEST, retval); + dev_err(&usb_dev->dev, "usb_control_msg request 0x%x returned %i\n", + NI_USB_SERIAL_NUMBER_REQUEST, retval); goto ready_out; } j = 0; if (buffer[j] != NI_USB_SERIAL_NUMBER_REQUEST) { - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x%x\n", - __func__, j, (int)buffer[j], NI_USB_SERIAL_NUMBER_REQUEST); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x%x\n", + j, (int)buffer[j], NI_USB_SERIAL_NUMBER_REQUEST); unexpected = 1; } if (unexpected) ni_usb_dump_raw_block(buffer, retval); // NI-USB-HS+ pads the serial with 0x0 to make 16 bytes if (retval != 5 && retval != 16) { - dev_err(&usb_dev->dev, "%s: received unexpected number of bytes = %i, expected 5 or 16\n", - __func__, retval); + dev_err(&usb_dev->dev, "received unexpected number of bytes = %i, expected 5 or 16\n", + retval); ni_usb_dump_raw_block(buffer, retval); } serial_number = 0; @@ -1996,7 +2022,7 @@ static int ni_usb_hs_wait_for_ready(struct ni_usb_priv *ni_priv) serial_number |= (buffer[++j] << 8); serial_number |= (buffer[++j] << 16); serial_number |= (buffer[++j] << 24); - dev_info(&usb_dev->dev, "%s: board serial number is 0x%x\n", __func__, serial_number); + dev_dbg(&usb_dev->dev, "board serial number is 0x%x\n", serial_number); for (i = 0; i < timeout; ++i) { int ready = 0; @@ -2004,49 +2030,51 @@ static int ni_usb_hs_wait_for_ready(struct ni_usb_priv *ni_priv) USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0x0, 0x0, buffer, buffer_size, 100); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: usb_control_msg request 0x%x returned %i\n", - __func__, NI_USB_POLL_READY_REQUEST, retval); + dev_err(&usb_dev->dev, "usb_control_msg request 0x%x returned %i\n", + NI_USB_POLL_READY_REQUEST, retval); goto ready_out; } j = 0; unexpected = 0; if (buffer[j] != NI_USB_POLL_READY_REQUEST) { // [0] - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x%x\n", - __func__, j, (int)buffer[j], NI_USB_POLL_READY_REQUEST); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x%x\n", + j, (int)buffer[j], NI_USB_POLL_READY_REQUEST); unexpected = 1; } ++j; if (buffer[j] != 0x1 && buffer[j] != 0x0) { // [1] HS+ sends 0x0 - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x1 or 0x0\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x1 or 0x0\n", + j, (int)buffer[j]); unexpected = 1; } if (buffer[++j] != 0x0) { // [2] - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x%x\n", - __func__, j, (int)buffer[j], 0x0); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x%x\n", + j, (int)buffer[j], 0x0); unexpected = 1; } ++j; - // MC usb-488 (and sometimes NI-USB-HS?) sends 0x8 here; MC usb-488A sends 0x7 here - // NI-USB-HS+ sends 0x0 + /* + * MC usb-488 (and sometimes NI-USB-HS?) sends 0x8 here; MC usb-488A sends 0x7 here + * NI-USB-HS+ sends 0x0 + */ if (buffer[j] != 0x1 && buffer[j] != 0x8 && buffer[j] != 0x7 && buffer[j] != 0x0) { // [3] - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x0, 0x1, 0x7 or 0x8\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x0, 0x1, 0x7 or 0x8\n", + j, (int)buffer[j]); unexpected = 1; } ++j; // NI-USB-HS+ sends 0 here if (buffer[j] != 0x30 && buffer[j] != 0x0) { // [4] - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x0 or 0x30\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x0 or 0x30\n", + j, (int)buffer[j]); unexpected = 1; } ++j; // MC usb-488 (and sometimes NI-USB-HS?) and NI-USB-HS+ sends 0x0 here if (buffer[j] != 0x1 && buffer[j] != 0x0) { // [5] - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x1 or 0x0\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x1 or 0x0\n", + j, (int)buffer[j]); unexpected = 1; } if (buffer[++j] != 0x0) { // [6] @@ -2054,8 +2082,8 @@ static int ni_usb_hs_wait_for_ready(struct ni_usb_priv *ni_priv) // NI-USB-HS+ sends 0xf here if (buffer[j] != 0x2 && buffer[j] != 0xe && buffer[j] != 0xf && buffer[j] != 0x16) { - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x2, 0xe, 0xf or 0x16\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x2, 0xe, 0xf or 0x16\n", + j, (int)buffer[j]); unexpected = 1; } } @@ -2064,30 +2092,30 @@ static int ni_usb_hs_wait_for_ready(struct ni_usb_priv *ni_priv) // MC usb-488 sends 0x5 here; MC usb-488A sends 0x6 here if (buffer[j] != 0x3 && buffer[j] != 0x5 && buffer[j] != 0x6 && buffer[j] != 0x8) { - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x3 or 0x5, 0x6 or 0x08\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x3 or 0x5, 0x6 or 0x08\n", + j, (int)buffer[j]); unexpected = 1; } } ++j; if (buffer[j] != 0x0 && buffer[j] != 0x2) { // [8] MC usb-488 sends 0x2 here - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x0 or 0x2\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, " unexpected data: buffer[%i]=0x%x, expected 0x0 or 0x2\n", + j, (int)buffer[j]); unexpected = 1; } ++j; // MC usb-488A and NI-USB-HS sends 0x3 here; NI-USB-HS+ sends 0x30 here if (buffer[j] != 0x0 && buffer[j] != 0x3 && buffer[j] != 0x30) { // [9] - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x0, 0x3 or 0x30\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x0, 0x3 or 0x30\n", + j, (int)buffer[j]); unexpected = 1; } if (buffer[++j] != 0x0) { ready = 1; if (buffer[j] != 0x96 && buffer[j] != 0x7 && buffer[j] != 0x6e) { // [10] MC usb-488 sends 0x7 here - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[%i]=0x%x, expected 0x96, 0x07 or 0x6e\n", - __func__, j, (int)buffer[j]); + dev_err(&usb_dev->dev, "unexpected data: buffer[%i]=0x%x, expected 0x96, 0x07 or 0x6e\n", + j, (int)buffer[j]); unexpected = 1; } } @@ -2097,7 +2125,6 @@ static int ni_usb_hs_wait_for_ready(struct ni_usb_priv *ni_priv) break; retval = msleep_interruptible(msec_sleep_duration); if (retval) { - dev_err(&usb_dev->dev, "ni_usb_gpib: msleep interrupted\n"); retval = -ERESTARTSYS; goto ready_out; } @@ -2106,11 +2133,12 @@ static int ni_usb_hs_wait_for_ready(struct ni_usb_priv *ni_priv) ready_out: kfree(buffer); - dev_dbg(&usb_dev->dev, "%s: exit retval=%d\n", __func__, retval); + dev_dbg(&usb_dev->dev, "exit retval=%d\n", retval); return retval; } -/* This does some extra init for HS+ models, as observed on Windows. One of the +/* + * This does some extra init for HS+ models, as observed on Windows. One of the * control requests causes the LED to stop blinking. * I'm not sure what the other 2 requests do. None of these requests are actually required * for the adapter to work, maybe they do some init for the analyzer interface @@ -2134,14 +2162,14 @@ static int ni_usb_hs_plus_extra_init(struct ni_usb_priv *ni_priv) USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0x0, 0x0, buffer, transfer_size, 1000); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: usb_control_msg request 0x%x returned %i\n", - __func__, NI_USB_HS_PLUS_0x48_REQUEST, retval); + dev_err(&usb_dev->dev, "usb_control_msg request 0x%x returned %i\n", + NI_USB_HS_PLUS_0x48_REQUEST, retval); break; } // expected response data: 48 f3 30 00 00 00 00 00 00 00 00 00 00 00 00 00 if (buffer[0] != NI_USB_HS_PLUS_0x48_REQUEST) - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[0]=0x%x, expected 0x%x\n", - __func__, (int)buffer[0], NI_USB_HS_PLUS_0x48_REQUEST); + dev_err(&usb_dev->dev, "unexpected data: buffer[0]=0x%x, expected 0x%x\n", + (int)buffer[0], NI_USB_HS_PLUS_0x48_REQUEST); transfer_size = 2; @@ -2149,14 +2177,14 @@ static int ni_usb_hs_plus_extra_init(struct ni_usb_priv *ni_priv) USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0x1, 0x0, buffer, transfer_size, 1000); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: usb_control_msg request 0x%x returned %i\n", - __func__, NI_USB_HS_PLUS_LED_REQUEST, retval); + dev_err(&usb_dev->dev, "usb_control_msg request 0x%x returned %i\n", + NI_USB_HS_PLUS_LED_REQUEST, retval); break; } // expected response data: 4b 00 if (buffer[0] != NI_USB_HS_PLUS_LED_REQUEST) - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[0]=0x%x, expected 0x%x\n", - __func__, (int)buffer[0], NI_USB_HS_PLUS_LED_REQUEST); + dev_err(&usb_dev->dev, "unexpected data: buffer[0]=0x%x, expected 0x%x\n", + (int)buffer[0], NI_USB_HS_PLUS_LED_REQUEST); transfer_size = 9; @@ -2165,15 +2193,14 @@ static int ni_usb_hs_plus_extra_init(struct ni_usb_priv *ni_priv) USB_RECIP_INTERFACE, 0x0, 0x1, buffer, transfer_size, 1000); if (retval < 0) { - dev_err(&usb_dev->dev, "%s: usb_control_msg request 0x%x returned %i\n", - __func__, NI_USB_HS_PLUS_0xf8_REQUEST, retval); + dev_err(&usb_dev->dev, "usb_control_msg request 0x%x returned %i\n", + NI_USB_HS_PLUS_0xf8_REQUEST, retval); break; } // expected response data: f8 01 00 00 00 01 00 00 00 if (buffer[0] != NI_USB_HS_PLUS_0xf8_REQUEST) - dev_err(&usb_dev->dev, "%s: unexpected data: buffer[0]=0x%x, expected 0x%x\n", - __func__, (int)buffer[0], NI_USB_HS_PLUS_0xf8_REQUEST); - + dev_err(&usb_dev->dev, "unexpected data: buffer[0]=0x%x, expected 0x%x\n", + (int)buffer[0], NI_USB_HS_PLUS_0xf8_REQUEST); } while (0); // cleanup @@ -2182,17 +2209,17 @@ static int ni_usb_hs_plus_extra_init(struct ni_usb_priv *ni_priv) } static inline int ni_usb_device_match(struct usb_interface *interface, - const gpib_board_config_t *config) + const struct gpib_board_config *config) { if (gpib_match_device_path(&interface->dev, config->device_path) == 0) return 0; return 1; } -static int ni_usb_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ni_usb_attach(struct gpib_board *board, const struct gpib_board_config *config) { int retval; - int i; + int i, index; struct ni_usb_priv *ni_priv; int product_id; struct usb_device *usb_dev; @@ -2211,19 +2238,17 @@ static int ni_usb_attach(gpib_board_t *board, const gpib_board_config_t *config) ni_priv->bus_interface = ni_usb_driver_interfaces[i]; usb_set_intfdata(ni_usb_driver_interfaces[i], board); usb_dev = interface_to_usbdev(ni_priv->bus_interface); - dev_info(&usb_dev->dev, - "bus %d dev num %d attached to gpib minor %d, NI usb interface %i\n", - usb_dev->bus->busnum, usb_dev->devnum, board->minor, i); + index = i; break; } } if (i == MAX_NUM_NI_USB_INTERFACES) { mutex_unlock(&ni_usb_hotplug_lock); - pr_err("No supported NI usb gpib adapters found, have you loaded its firmware?\n"); + dev_err(board->gpib_dev, "No supported adapters found, have you loaded its firmware?\n"); return -ENODEV; } if (usb_reset_configuration(interface_to_usbdev(ni_priv->bus_interface))) - dev_err(&usb_dev->dev, "ni_usb_gpib: usb_reset_configuration() failed.\n"); + dev_err(&usb_dev->dev, "usb_reset_configuration() failed.\n"); product_id = le16_to_cpu(usb_dev->descriptor.idProduct); ni_priv->product_id = product_id; @@ -2296,7 +2321,9 @@ static int ni_usb_attach(gpib_board_t *board, const gpib_board_config_t *config) } mutex_unlock(&ni_usb_hotplug_lock); - dev_info(&usb_dev->dev, "%s: attached\n", __func__); + dev_info(&usb_dev->dev, + "bus %d dev num %d attached to gpib%d, intf %i\n", + usb_dev->bus->busnum, usb_dev->devnum, board->minor, index); return retval; } @@ -2304,39 +2331,33 @@ static int ni_usb_shutdown_hardware(struct ni_usb_priv *ni_priv) { struct usb_device *usb_dev = interface_to_usbdev(ni_priv->bus_interface); int retval; - int i = 0; struct ni_usb_register writes[2]; static const int writes_length = ARRAY_SIZE(writes); unsigned int ibsta; -// printk("%s: %s\n", __func__); - writes[i].device = NIUSB_SUBDEV_TNT4882; - writes[i].address = nec7210_to_tnt4882_offset(AUXMR); - writes[i].value = AUX_CR; - i++; - writes[i].device = NIUSB_SUBDEV_UNKNOWN3; - writes[i].address = 0x10; - writes[i].value = 0x0; - i++; - if (i > writes_length) { - dev_err(&usb_dev->dev, "%s: bug!, buffer overrun, i=%i\n", __func__, i); - return -EINVAL; - } - retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta); + writes[0].device = NIUSB_SUBDEV_TNT4882; + writes[0].address = nec7210_to_tnt4882_offset(AUXMR); + writes[0].value = AUX_CR; + writes[1].device = NIUSB_SUBDEV_UNKNOWN3; + writes[1].address = 0x10; + writes[1].value = 0x0; + retval = ni_usb_write_registers(ni_priv, writes, writes_length, &ibsta); if (retval) { - dev_err(&usb_dev->dev, "%s: register write failed, retval=%i\n", __func__, retval); + dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval); return retval; } return 0; } -static void ni_usb_detach(gpib_board_t *board) +static void ni_usb_detach(struct gpib_board *board) { struct ni_usb_priv *ni_priv; mutex_lock(&ni_usb_hotplug_lock); -// under windows, software unplug does chip_reset nec7210 aux command, -// then writes 0x0 to address 0x10 of device 3 + /* + * under windows, software unplug does chip_reset nec7210 aux command, + * then writes 0x0 to address 0x10 of device 3 + */ ni_priv = board->private_data; if (ni_priv) { if (ni_priv->bus_interface) { @@ -2353,7 +2374,7 @@ static void ni_usb_detach(gpib_board_t *board) mutex_unlock(&ni_usb_hotplug_lock); } -static gpib_interface_t ni_usb_gpib_interface = { +static struct gpib_interface ni_usb_gpib_interface = { .name = "ni_usb_b", .attach = ni_usb_attach, .detach = ni_usb_detach, @@ -2413,7 +2434,7 @@ static int ni_usb_driver_probe(struct usb_interface *interface, const struct usb if (i == MAX_NUM_NI_USB_INTERFACES) { usb_put_dev(usb_dev); mutex_unlock(&ni_usb_hotplug_lock); - dev_err(&usb_dev->dev, "%s: ni_usb_driver_interfaces[] full\n", __func__); + dev_err(&usb_dev->dev, "ni_usb_driver_interfaces[] full\n"); return -1; } path = kmalloc(path_length, GFP_KERNEL); @@ -2423,7 +2444,7 @@ static int ni_usb_driver_probe(struct usb_interface *interface, const struct usb return -ENOMEM; } usb_make_path(usb_dev, path, path_length); - dev_info(&usb_dev->dev, "ni_usb_gpib: probe succeeded for path: %s\n", path); + dev_info(&usb_dev->dev, "probe succeeded for path: %s\n", path); kfree(path); mutex_unlock(&ni_usb_hotplug_lock); return 0; @@ -2437,7 +2458,7 @@ static void ni_usb_driver_disconnect(struct usb_interface *interface) mutex_lock(&ni_usb_hotplug_lock); for (i = 0; i < MAX_NUM_NI_USB_INTERFACES; i++) { if (ni_usb_driver_interfaces[i] == interface) { - gpib_board_t *board = usb_get_intfdata(interface); + struct gpib_board *board = usb_get_intfdata(interface); if (board) { struct ni_usb_priv *ni_priv = board->private_data; @@ -2458,8 +2479,7 @@ static void ni_usb_driver_disconnect(struct usb_interface *interface) } } if (i == MAX_NUM_NI_USB_INTERFACES) - dev_err(&usb_dev->dev, "%s: unable to find interface in ni_usb_driver_interfaces[]? bug?\n", - __func__); + dev_err(&usb_dev->dev, "unable to find interface bug?\n"); usb_put_dev(usb_dev); mutex_unlock(&ni_usb_hotplug_lock); } @@ -2467,7 +2487,7 @@ static void ni_usb_driver_disconnect(struct usb_interface *interface) static int ni_usb_driver_suspend(struct usb_interface *interface, pm_message_t message) { struct usb_device *usb_dev = interface_to_usbdev(interface); - gpib_board_t *board; + struct gpib_board *board; int i, retval; mutex_lock(&ni_usb_hotplug_lock); @@ -2498,9 +2518,9 @@ static int ni_usb_driver_suspend(struct usb_interface *interface, pm_message_t m ni_usb_cleanup_urbs(ni_priv); mutex_unlock(&ni_priv->interrupt_transfer_lock); } - dev_info(&usb_dev->dev, - "bus %d dev num %d gpib minor %d, ni usb interface %i suspended\n", - usb_dev->bus->busnum, usb_dev->devnum, board->minor, i); + dev_dbg(&usb_dev->dev, + "bus %d dev num %d gpib%d, interface %i suspended\n", + usb_dev->bus->busnum, usb_dev->devnum, board->minor, i); } mutex_unlock(&ni_usb_hotplug_lock); @@ -2511,7 +2531,7 @@ static int ni_usb_driver_resume(struct usb_interface *interface) { struct usb_device *usb_dev = interface_to_usbdev(interface); - gpib_board_t *board; + struct gpib_board *board; int i, retval; mutex_lock(&ni_usb_hotplug_lock); @@ -2535,15 +2555,15 @@ static int ni_usb_driver_resume(struct usb_interface *interface) mutex_lock(&ni_priv->interrupt_transfer_lock); retval = usb_submit_urb(ni_priv->interrupt_urb, GFP_KERNEL); if (retval) { - dev_err(&usb_dev->dev, "%s: failed to resubmit interrupt urb, retval=%i\n", - __func__, retval); + dev_err(&usb_dev->dev, "resume failed to resubmit interrupt urb, retval=%i\n", + retval); mutex_unlock(&ni_priv->interrupt_transfer_lock); mutex_unlock(&ni_usb_hotplug_lock); return retval; } mutex_unlock(&ni_priv->interrupt_transfer_lock); } else { - dev_err(&usb_dev->dev, "%s: bug! int urb not set up\n", __func__); + dev_err(&usb_dev->dev, "bug! resume int urb not set up\n"); mutex_unlock(&ni_usb_hotplug_lock); return -EINVAL; } @@ -2600,9 +2620,9 @@ static int ni_usb_driver_resume(struct usb_interface *interface) if (ni_priv->ren_state) ni_usb_remote_enable(board, 1); - dev_info(&usb_dev->dev, - "bus %d dev num %d gpib minor %d, ni usb interface %i resumed\n", - usb_dev->bus->busnum, usb_dev->devnum, board->minor, i); + dev_dbg(&usb_dev->dev, + "bus %d dev num %d gpib%d, interface %i resumed\n", + usb_dev->bus->busnum, usb_dev->devnum, board->minor, i); } mutex_unlock(&ni_usb_hotplug_lock); @@ -2610,7 +2630,7 @@ static int ni_usb_driver_resume(struct usb_interface *interface) } static struct usb_driver ni_usb_bus_driver = { - .name = "ni_usb_gpib", + .name = DRV_NAME, .probe = ni_usb_driver_probe, .disconnect = ni_usb_driver_disconnect, .suspend = ni_usb_driver_suspend, @@ -2623,19 +2643,18 @@ static int __init ni_usb_init_module(void) int i; int ret; - pr_info("ni_usb_gpib driver loading\n"); for (i = 0; i < MAX_NUM_NI_USB_INTERFACES; i++) ni_usb_driver_interfaces[i] = NULL; ret = usb_register(&ni_usb_bus_driver); if (ret) { - pr_err("ni_usb_gpib: usb_register failed: error = %d\n", ret); + pr_err("usb_register failed: error = %d\n", ret); return ret; } ret = gpib_register_driver(&ni_usb_gpib_interface, THIS_MODULE); if (ret) { - pr_err("ni_usb_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); return ret; } @@ -2644,7 +2663,6 @@ static int __init ni_usb_init_module(void) static void __exit ni_usb_exit_module(void) { - pr_info("ni_usb_gpib driver unloading\n"); gpib_unregister_driver(&ni_usb_gpib_interface); usb_deregister(&ni_usb_bus_driver); } diff --git a/drivers/staging/gpib/ni_usb/ni_usb_gpib.h b/drivers/staging/gpib/ni_usb/ni_usb_gpib.h index 4b297db09a9b..b011e131201c 100644 --- a/drivers/staging/gpib/ni_usb/ni_usb_gpib.h +++ b/drivers/staging/gpib/ni_usb/ni_usb_gpib.h @@ -113,27 +113,37 @@ enum ni_usb_bulk_ids { enum ni_usb_error_codes { NIUSB_NO_ERROR = 0, - /* NIUSB_ABORTED_ERROR occurs when I/O is interrupted early by - * doing a NI_USB_STOP_REQUEST on the control endpoint. + /* + * NIUSB_ABORTED_ERROR occurs when I/O is interrupted early by + * doing a NI_USB_STOP_REQUEST on the control endpoint. */ NIUSB_ABORTED_ERROR = 1, - // NIUSB_READ_ATN_ERROR occurs when you do a board read while - // ATN is set + /* + * NIUSB_READ_ATN_ERROR occurs when you do a board read while + * ATN is set + */ NIUSB_ATN_STATE_ERROR = 2, - // NIUSB_ADDRESSING_ERROR occurs when you do a board - // read/write as CIC but are not in LACS/TACS + /* + * NIUSB_ADDRESSING_ERROR occurs when you do a board + * read/write as CIC but are not in LACS/TACS + */ NIUSB_ADDRESSING_ERROR = 3, - /* NIUSB_EOSMODE_ERROR occurs on reads if any eos mode or char + /* + * NIUSB_EOSMODE_ERROR occurs on reads if any eos mode or char * bits are set when REOS is not set. * Have also seen error 4 if you try to send more than 16 * command bytes at once on a usb-b. */ NIUSB_EOSMODE_ERROR = 4, - // NIUSB_NO_BUS_ERROR occurs when you try to write a command - // byte but there are no devices connected to the gpib bus + /* + * NIUSB_NO_BUS_ERROR occurs when you try to write a command + * byte but there are no devices connected to the gpib bus + */ NIUSB_NO_BUS_ERROR = 5, - // NIUSB_NO_LISTENER_ERROR occurs when you do a board write as - // CIC with no listener + /* + * NIUSB_NO_LISTENER_ERROR occurs when you do a board write as + * CIC with no listener + */ NIUSB_NO_LISTENER_ERROR = 8, // get NIUSB_TIMEOUT_ERROR on board read/write timeout NIUSB_TIMEOUT_ERROR = 10, diff --git a/drivers/staging/gpib/pc2/pc2_gpib.c b/drivers/staging/gpib/pc2/pc2_gpib.c index c0b07cb63d9a..2282492025b7 100644 --- a/drivers/staging/gpib/pc2/pc2_gpib.c +++ b/drivers/staging/gpib/pc2/pc2_gpib.c @@ -4,6 +4,9 @@ * copyright : (C) 2001, 2002 by Frank Mori Hess ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt + #include <linux/ioport.h> #include <linux/sched.h> #include <linux/module.h> @@ -49,22 +52,13 @@ static inline unsigned int CLEAR_INTR_REG(unsigned int irq) MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB driver for PC2/PC2a and compatible devices"); -static int pc2_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int pc2a_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int pc2a_cb7210_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int pc2_2a_attach(gpib_board_t *board, const gpib_board_config_t *config); - -static void pc2_detach(gpib_board_t *board); -static void pc2a_detach(gpib_board_t *board); -static void pc2_2a_detach(gpib_board_t *board); - /* * GPIB interrupt service routines */ irqreturn_t pc2_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct pc2_priv *priv = board->private_data; unsigned long flags; irqreturn_t retval; @@ -77,7 +71,7 @@ irqreturn_t pc2_interrupt(int irq, void *arg) irqreturn_t pc2a_interrupt(int irq, void *arg) { - gpib_board_t *board = arg; + struct gpib_board *board = arg; struct pc2_priv *priv = board->private_data; int status1, status2; unsigned long flags; @@ -96,7 +90,7 @@ irqreturn_t pc2a_interrupt(int irq, void *arg) } // wrappers for interface functions -static int pc2_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, +static int pc2_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, size_t *bytes_read) { struct pc2_priv *priv = board->private_data; @@ -104,7 +98,7 @@ static int pc2_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *en return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read); } -static int pc2_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, +static int pc2_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { struct pc2_priv *priv = board->private_data; @@ -112,245 +106,134 @@ static int pc2_write(gpib_board_t *board, uint8_t *buffer, size_t length, int se return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written); } -static int pc2_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int pc2_command(struct gpib_board *board, u8 *buffer, + size_t length, size_t *bytes_written) { struct pc2_priv *priv = board->private_data; return nec7210_command(board, &priv->nec7210_priv, buffer, length, bytes_written); } -static int pc2_take_control(gpib_board_t *board, int synchronous) +static int pc2_take_control(struct gpib_board *board, int synchronous) { struct pc2_priv *priv = board->private_data; return nec7210_take_control(board, &priv->nec7210_priv, synchronous); } -static int pc2_go_to_standby(gpib_board_t *board) +static int pc2_go_to_standby(struct gpib_board *board) { struct pc2_priv *priv = board->private_data; return nec7210_go_to_standby(board, &priv->nec7210_priv); } -static void pc2_request_system_control(gpib_board_t *board, int request_control) +static int pc2_request_system_control(struct gpib_board *board, int request_control) { struct pc2_priv *priv = board->private_data; - nec7210_request_system_control(board, &priv->nec7210_priv, request_control); + return nec7210_request_system_control(board, &priv->nec7210_priv, request_control); } -static void pc2_interface_clear(gpib_board_t *board, int assert) +static void pc2_interface_clear(struct gpib_board *board, int assert) { struct pc2_priv *priv = board->private_data; nec7210_interface_clear(board, &priv->nec7210_priv, assert); } -static void pc2_remote_enable(gpib_board_t *board, int enable) +static void pc2_remote_enable(struct gpib_board *board, int enable) { struct pc2_priv *priv = board->private_data; nec7210_remote_enable(board, &priv->nec7210_priv, enable); } -static int pc2_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int pc2_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct pc2_priv *priv = board->private_data; return nec7210_enable_eos(board, &priv->nec7210_priv, eos_byte, compare_8_bits); } -static void pc2_disable_eos(gpib_board_t *board) +static void pc2_disable_eos(struct gpib_board *board) { struct pc2_priv *priv = board->private_data; nec7210_disable_eos(board, &priv->nec7210_priv); } -static unsigned int pc2_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int pc2_update_status(struct gpib_board *board, unsigned int clear_mask) { struct pc2_priv *priv = board->private_data; return nec7210_update_status(board, &priv->nec7210_priv, clear_mask); } -static int pc2_primary_address(gpib_board_t *board, unsigned int address) +static int pc2_primary_address(struct gpib_board *board, unsigned int address) { struct pc2_priv *priv = board->private_data; return nec7210_primary_address(board, &priv->nec7210_priv, address); } -static int pc2_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int pc2_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct pc2_priv *priv = board->private_data; return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable); } -static int pc2_parallel_poll(gpib_board_t *board, uint8_t *result) +static int pc2_parallel_poll(struct gpib_board *board, u8 *result) { struct pc2_priv *priv = board->private_data; return nec7210_parallel_poll(board, &priv->nec7210_priv, result); } -static void pc2_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void pc2_parallel_poll_configure(struct gpib_board *board, u8 config) { struct pc2_priv *priv = board->private_data; nec7210_parallel_poll_configure(board, &priv->nec7210_priv, config); } -static void pc2_parallel_poll_response(gpib_board_t *board, int ist) +static void pc2_parallel_poll_response(struct gpib_board *board, int ist) { struct pc2_priv *priv = board->private_data; nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist); } -static void pc2_serial_poll_response(gpib_board_t *board, uint8_t status) +static void pc2_serial_poll_response(struct gpib_board *board, u8 status) { struct pc2_priv *priv = board->private_data; nec7210_serial_poll_response(board, &priv->nec7210_priv, status); } -static uint8_t pc2_serial_poll_status(gpib_board_t *board) +static u8 pc2_serial_poll_status(struct gpib_board *board) { struct pc2_priv *priv = board->private_data; return nec7210_serial_poll_status(board, &priv->nec7210_priv); } -static unsigned int pc2_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int pc2_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct pc2_priv *priv = board->private_data; return nec7210_t1_delay(board, &priv->nec7210_priv, nano_sec); } -static void pc2_return_to_local(gpib_board_t *board) +static void pc2_return_to_local(struct gpib_board *board) { struct pc2_priv *priv = board->private_data; nec7210_return_to_local(board, &priv->nec7210_priv); } -static gpib_interface_t pc2_interface = { - .name = "pcII", - .attach = pc2_attach, - .detach = pc2_detach, - .read = pc2_read, - .write = pc2_write, - .command = pc2_command, - .take_control = pc2_take_control, - .go_to_standby = pc2_go_to_standby, - .request_system_control = pc2_request_system_control, - .interface_clear = pc2_interface_clear, - .remote_enable = pc2_remote_enable, - .enable_eos = pc2_enable_eos, - .disable_eos = pc2_disable_eos, - .parallel_poll = pc2_parallel_poll, - .parallel_poll_configure = pc2_parallel_poll_configure, - .parallel_poll_response = pc2_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = NULL, - .update_status = pc2_update_status, - .primary_address = pc2_primary_address, - .secondary_address = pc2_secondary_address, - .serial_poll_response = pc2_serial_poll_response, - .serial_poll_status = pc2_serial_poll_status, - .t1_delay = pc2_t1_delay, - .return_to_local = pc2_return_to_local, -}; - -static gpib_interface_t pc2a_interface = { - .name = "pcIIa", - .attach = pc2a_attach, - .detach = pc2a_detach, - .read = pc2_read, - .write = pc2_write, - .command = pc2_command, - .take_control = pc2_take_control, - .go_to_standby = pc2_go_to_standby, - .request_system_control = pc2_request_system_control, - .interface_clear = pc2_interface_clear, - .remote_enable = pc2_remote_enable, - .enable_eos = pc2_enable_eos, - .disable_eos = pc2_disable_eos, - .parallel_poll = pc2_parallel_poll, - .parallel_poll_configure = pc2_parallel_poll_configure, - .parallel_poll_response = pc2_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = NULL, - .update_status = pc2_update_status, - .primary_address = pc2_primary_address, - .secondary_address = pc2_secondary_address, - .serial_poll_response = pc2_serial_poll_response, - .serial_poll_status = pc2_serial_poll_status, - .t1_delay = pc2_t1_delay, - .return_to_local = pc2_return_to_local, -}; - -static gpib_interface_t pc2a_cb7210_interface = { - .name = "pcIIa_cb7210", - .attach = pc2a_cb7210_attach, - .detach = pc2a_detach, - .read = pc2_read, - .write = pc2_write, - .command = pc2_command, - .take_control = pc2_take_control, - .go_to_standby = pc2_go_to_standby, - .request_system_control = pc2_request_system_control, - .interface_clear = pc2_interface_clear, - .remote_enable = pc2_remote_enable, - .enable_eos = pc2_enable_eos, - .disable_eos = pc2_disable_eos, - .parallel_poll = pc2_parallel_poll, - .parallel_poll_configure = pc2_parallel_poll_configure, - .parallel_poll_response = pc2_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = NULL, //XXX - .update_status = pc2_update_status, - .primary_address = pc2_primary_address, - .secondary_address = pc2_secondary_address, - .serial_poll_response = pc2_serial_poll_response, - .serial_poll_status = pc2_serial_poll_status, - .t1_delay = pc2_t1_delay, - .return_to_local = pc2_return_to_local, -}; - -static gpib_interface_t pc2_2a_interface = { - .name = "pcII_IIa", - .attach = pc2_2a_attach, - .detach = pc2_2a_detach, - .read = pc2_read, - .write = pc2_write, - .command = pc2_command, - .take_control = pc2_take_control, - .go_to_standby = pc2_go_to_standby, - .request_system_control = pc2_request_system_control, - .interface_clear = pc2_interface_clear, - .remote_enable = pc2_remote_enable, - .enable_eos = pc2_enable_eos, - .disable_eos = pc2_disable_eos, - .parallel_poll = pc2_parallel_poll, - .parallel_poll_configure = pc2_parallel_poll_configure, - .parallel_poll_response = pc2_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = NULL, - .update_status = pc2_update_status, - .primary_address = pc2_primary_address, - .secondary_address = pc2_secondary_address, - .serial_poll_response = pc2_serial_poll_response, - .serial_poll_status = pc2_serial_poll_status, - .t1_delay = pc2_t1_delay, - .return_to_local = pc2_return_to_local, -}; - -static int allocate_private(gpib_board_t *board) +static int allocate_private(struct gpib_board *board) { struct pc2_priv *priv; @@ -363,13 +246,13 @@ static int allocate_private(gpib_board_t *board) return 0; } -static void free_private(gpib_board_t *board) +static void free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; } -static int pc2_generic_attach(gpib_board_t *board, const gpib_board_config_t *config, +static int pc2_generic_attach(struct gpib_board *board, const struct gpib_board_config *config, enum nec7210_chipset chipset) { struct pc2_priv *pc2_priv; @@ -385,11 +268,13 @@ static int pc2_generic_attach(gpib_board_t *board, const gpib_board_config_t *co nec_priv->type = chipset; #ifndef PC2_DMA - /* board->dev hasn't been initialized, so forget about DMA until this driver - * is adapted to use isa_register_driver. + /* + * board->dev hasn't been initialized, so forget about DMA until this driver + * is adapted to use isa_register_driver. */ if (config->ibdma) - pr_err("DMA disabled for pc2 gpib, driver needs to be adapted to use isa_register_driver to get a struct device*"); + // driver needs to be adapted to use isa_register_driver to get a struct device* + dev_err(board->gpib_dev, "DMA disabled for pc2 gpib"); #else if (config->ibdma) { nec_priv->dma_buffer_length = 0x1000; @@ -401,7 +286,7 @@ static int pc2_generic_attach(gpib_board_t *board, const gpib_board_config_t *co // request isa dma channel if (request_dma(config->ibdma, "pc2")) { - pr_err("gpib: can't request DMA %d\n", config->ibdma); + dev_err(board->gpib_dev, "can't request DMA %d\n", config->ibdma); return -1; } nec_priv->dma_channel = config->ibdma; @@ -411,7 +296,7 @@ static int pc2_generic_attach(gpib_board_t *board, const gpib_board_config_t *co return 0; } -int pc2_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int pc2_attach(struct gpib_board *board, const struct gpib_board_config *config) { int isr_flags = 0; struct pc2_priv *pc2_priv; @@ -427,8 +312,8 @@ int pc2_attach(gpib_board_t *board, const gpib_board_config_t *config) nec_priv->offset = pc2_reg_offset; if (!request_region(config->ibbase, pc2_iosize, "pc2")) { - pr_err("gpib: ioports are already in use\n"); - return -1; + dev_err(board->gpib_dev, "ioports are already in use\n"); + return -EBUSY; } nec_priv->iobase = config->ibbase; @@ -437,14 +322,14 @@ int pc2_attach(gpib_board_t *board, const gpib_board_config_t *config) // install interrupt handler if (config->ibirq) { if (request_irq(config->ibirq, pc2_interrupt, isr_flags, "pc2", board)) { - pr_err("gpib: can't request IRQ %d\n", config->ibirq); - return -1; + dev_err(board->gpib_dev, "can't request IRQ %d\n", config->ibirq); + return -EBUSY; } } pc2_priv->irq = config->ibirq; /* poll so we can detect assertion of ATN */ if (gpib_request_pseudo_irq(board, pc2_interrupt)) { - pr_err("pc2_gpib: failed to allocate pseudo_irq\n"); + dev_err(board->gpib_dev, "failed to allocate pseudo_irq\n"); return -1; } /* set internal counter register for 8 MHz input clock */ @@ -455,7 +340,7 @@ int pc2_attach(gpib_board_t *board, const gpib_board_config_t *config) return 0; } -void pc2_detach(gpib_board_t *board) +static void pc2_detach(struct gpib_board *board) { struct pc2_priv *pc2_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -482,7 +367,7 @@ void pc2_detach(gpib_board_t *board) free_private(board); } -static int pc2a_common_attach(gpib_board_t *board, const gpib_board_config_t *config, +static int pc2a_common_attach(struct gpib_board *board, const struct gpib_board_config *config, unsigned int num_registers, enum nec7210_chipset chipset) { unsigned int i, j; @@ -505,18 +390,19 @@ static int pc2a_common_attach(gpib_board_t *board, const gpib_board_config_t *co case 0x62e1: break; default: - pr_err("PCIIa base range invalid, must be one of 0x[0246]2e1, but is 0x%d\n", - config->ibbase); + dev_err(board->gpib_dev, "PCIIa base range invalid, must be one of 0x[0246]2e1, but is 0x%x\n", + config->ibbase); return -1; } if (config->ibirq) { if (config->ibirq < 2 || config->ibirq > 7) { - pr_err("pc2_gpib: illegal interrupt level %i\n", config->ibirq); + dev_err(board->gpib_dev, "illegal interrupt level %i\n", + config->ibirq); return -1; } } else { - pr_err("pc2_gpib: interrupt disabled, using polling mode (slow)\n"); + dev_err(board->gpib_dev, "interrupt disabled, using polling mode (slow)\n"); } #ifdef CHECK_IOPORTS unsigned int err = 0; @@ -528,36 +414,36 @@ static int pc2a_common_attach(gpib_board_t *board, const gpib_board_config_t *co if (config->ibirq && check_region(pc2a_clear_intr_iobase + config->ibirq, 1)) err++; if (err) { - pr_err("gpib: ioports are already in use"); - return -1; + dev_err(board->gpib_dev, "ioports are already in use"); + return -EBUSY; } #endif for (i = 0; i < num_registers; i++) { if (!request_region(config->ibbase + i * pc2a_reg_offset, 1, "pc2a")) { - pr_err("gpib: ioports are already in use"); + dev_err(board->gpib_dev, "ioports are already in use"); for (j = 0; j < i; j++) release_region(config->ibbase + j * pc2a_reg_offset, 1); - return -1; + return -EBUSY; } } nec_priv->iobase = config->ibbase; if (config->ibirq) { if (!request_region(pc2a_clear_intr_iobase + config->ibirq, 1, "pc2a")) { - pr_err("gpib: ioports are already in use"); + dev_err(board->gpib_dev, "ioports are already in use"); return -1; } pc2_priv->clear_intr_addr = pc2a_clear_intr_iobase + config->ibirq; if (request_irq(config->ibirq, pc2a_interrupt, 0, "pc2a", board)) { - pr_err("gpib: can't request IRQ %d\n", config->ibirq); - return -1; + dev_err(board->gpib_dev, "can't request IRQ %d\n", config->ibirq); + return -EBUSY; } } pc2_priv->irq = config->ibirq; /* poll so we can detect assertion of ATN */ if (gpib_request_pseudo_irq(board, pc2_interrupt)) { - pr_err("pc2_gpib: failed to allocate pseudo_irq\n"); + dev_err(board->gpib_dev, "failed to allocate pseudo_irq\n"); return -1; } @@ -575,22 +461,22 @@ static int pc2a_common_attach(gpib_board_t *board, const gpib_board_config_t *co return 0; } -int pc2a_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int pc2a_attach(struct gpib_board *board, const struct gpib_board_config *config) { return pc2a_common_attach(board, config, pc2a_iosize, NEC7210); } -int pc2a_cb7210_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int pc2a_cb7210_attach(struct gpib_board *board, const struct gpib_board_config *config) { return pc2a_common_attach(board, config, pc2a_iosize, CB7210); } -int pc2_2a_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int pc2_2a_attach(struct gpib_board *board, const struct gpib_board_config *config) { return pc2a_common_attach(board, config, pc2_2a_iosize, NAT4882); } -static void pc2a_common_detach(gpib_board_t *board, unsigned int num_registers) +static void pc2a_common_detach(struct gpib_board *board, unsigned int num_registers) { int i; struct pc2_priv *pc2_priv = board->private_data; @@ -623,41 +509,153 @@ static void pc2a_common_detach(gpib_board_t *board, unsigned int num_registers) free_private(board); } -void pc2a_detach(gpib_board_t *board) +static void pc2a_detach(struct gpib_board *board) { pc2a_common_detach(board, pc2a_iosize); } -void pc2_2a_detach(gpib_board_t *board) +static void pc2_2a_detach(struct gpib_board *board) { pc2a_common_detach(board, pc2_2a_iosize); } +static struct gpib_interface pc2_interface = { + .name = "pcII", + .attach = pc2_attach, + .detach = pc2_detach, + .read = pc2_read, + .write = pc2_write, + .command = pc2_command, + .take_control = pc2_take_control, + .go_to_standby = pc2_go_to_standby, + .request_system_control = pc2_request_system_control, + .interface_clear = pc2_interface_clear, + .remote_enable = pc2_remote_enable, + .enable_eos = pc2_enable_eos, + .disable_eos = pc2_disable_eos, + .parallel_poll = pc2_parallel_poll, + .parallel_poll_configure = pc2_parallel_poll_configure, + .parallel_poll_response = pc2_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = NULL, + .update_status = pc2_update_status, + .primary_address = pc2_primary_address, + .secondary_address = pc2_secondary_address, + .serial_poll_response = pc2_serial_poll_response, + .serial_poll_status = pc2_serial_poll_status, + .t1_delay = pc2_t1_delay, + .return_to_local = pc2_return_to_local, +}; + +static struct gpib_interface pc2a_interface = { + .name = "pcIIa", + .attach = pc2a_attach, + .detach = pc2a_detach, + .read = pc2_read, + .write = pc2_write, + .command = pc2_command, + .take_control = pc2_take_control, + .go_to_standby = pc2_go_to_standby, + .request_system_control = pc2_request_system_control, + .interface_clear = pc2_interface_clear, + .remote_enable = pc2_remote_enable, + .enable_eos = pc2_enable_eos, + .disable_eos = pc2_disable_eos, + .parallel_poll = pc2_parallel_poll, + .parallel_poll_configure = pc2_parallel_poll_configure, + .parallel_poll_response = pc2_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = NULL, + .update_status = pc2_update_status, + .primary_address = pc2_primary_address, + .secondary_address = pc2_secondary_address, + .serial_poll_response = pc2_serial_poll_response, + .serial_poll_status = pc2_serial_poll_status, + .t1_delay = pc2_t1_delay, + .return_to_local = pc2_return_to_local, +}; + +static struct gpib_interface pc2a_cb7210_interface = { + .name = "pcIIa_cb7210", + .attach = pc2a_cb7210_attach, + .detach = pc2a_detach, + .read = pc2_read, + .write = pc2_write, + .command = pc2_command, + .take_control = pc2_take_control, + .go_to_standby = pc2_go_to_standby, + .request_system_control = pc2_request_system_control, + .interface_clear = pc2_interface_clear, + .remote_enable = pc2_remote_enable, + .enable_eos = pc2_enable_eos, + .disable_eos = pc2_disable_eos, + .parallel_poll = pc2_parallel_poll, + .parallel_poll_configure = pc2_parallel_poll_configure, + .parallel_poll_response = pc2_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = NULL, //XXX + .update_status = pc2_update_status, + .primary_address = pc2_primary_address, + .secondary_address = pc2_secondary_address, + .serial_poll_response = pc2_serial_poll_response, + .serial_poll_status = pc2_serial_poll_status, + .t1_delay = pc2_t1_delay, + .return_to_local = pc2_return_to_local, +}; + +static struct gpib_interface pc2_2a_interface = { + .name = "pcII_IIa", + .attach = pc2_2a_attach, + .detach = pc2_2a_detach, + .read = pc2_read, + .write = pc2_write, + .command = pc2_command, + .take_control = pc2_take_control, + .go_to_standby = pc2_go_to_standby, + .request_system_control = pc2_request_system_control, + .interface_clear = pc2_interface_clear, + .remote_enable = pc2_remote_enable, + .enable_eos = pc2_enable_eos, + .disable_eos = pc2_disable_eos, + .parallel_poll = pc2_parallel_poll, + .parallel_poll_configure = pc2_parallel_poll_configure, + .parallel_poll_response = pc2_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = NULL, + .update_status = pc2_update_status, + .primary_address = pc2_primary_address, + .secondary_address = pc2_secondary_address, + .serial_poll_response = pc2_serial_poll_response, + .serial_poll_status = pc2_serial_poll_status, + .t1_delay = pc2_t1_delay, + .return_to_local = pc2_return_to_local, +}; + static int __init pc2_init_module(void) { int ret; ret = gpib_register_driver(&pc2_interface, THIS_MODULE); if (ret) { - pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); return ret; } ret = gpib_register_driver(&pc2a_interface, THIS_MODULE); if (ret) { - pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pc2a; } ret = gpib_register_driver(&pc2a_cb7210_interface, THIS_MODULE); if (ret) { - pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_cb7210; } ret = gpib_register_driver(&pc2_2a_interface, THIS_MODULE); if (ret) { - pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret); + pr_err("gpib_register_driver failed: error = %d\n", ret); goto err_pc2_2a; } diff --git a/drivers/staging/gpib/tms9914/tms9914.c b/drivers/staging/gpib/tms9914/tms9914.c index ec8e1d4d762f..04d57108efc7 100644 --- a/drivers/staging/gpib/tms9914/tms9914.c +++ b/drivers/staging/gpib/tms9914/tms9914.c @@ -4,6 +4,9 @@ * copyright : (C) 2001, 2002 by Frank Mori Hess ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt + #include <linux/ioport.h> #include <linux/sched.h> #include <linux/module.h> @@ -24,9 +27,9 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB library for tms9914"); -static unsigned int update_status_nolock(gpib_board_t *board, struct tms9914_priv *priv); +static unsigned int update_status_nolock(struct gpib_board *board, struct tms9914_priv *priv); -int tms9914_take_control(gpib_board_t *board, struct tms9914_priv *priv, int synchronous) +int tms9914_take_control(struct gpib_board *board, struct tms9914_priv *priv, int synchronous) { int i; const int timeout = 100; @@ -50,7 +53,8 @@ int tms9914_take_control(gpib_board_t *board, struct tms9914_priv *priv, int syn } EXPORT_SYMBOL_GPL(tms9914_take_control); -/* The agilent 82350B has a buggy implementation of tcs which interferes with the +/* + * The agilent 82350B has a buggy implementation of tcs which interferes with the * operation of tca. It appears to be based on the controller state machine * described in the TI 9900 TMS9914A data manual published in 1982. This * manual describes tcs as putting the controller into a CWAS @@ -63,7 +67,8 @@ EXPORT_SYMBOL_GPL(tms9914_take_control); * The rest of the tms9914 based drivers still use tms9914_take_control * directly (which does issue tcs). */ -int tms9914_take_control_workaround(gpib_board_t *board, struct tms9914_priv *priv, int synchronous) +int tms9914_take_control_workaround(struct gpib_board *board, + struct tms9914_priv *priv, int synchronous) { if (synchronous) return -ETIMEDOUT; @@ -71,7 +76,7 @@ int tms9914_take_control_workaround(gpib_board_t *board, struct tms9914_priv *pr } EXPORT_SYMBOL_GPL(tms9914_take_control_workaround); -int tms9914_go_to_standby(gpib_board_t *board, struct tms9914_priv *priv) +int tms9914_go_to_standby(struct gpib_board *board, struct tms9914_priv *priv) { int i; const int timeout = 1000; @@ -83,10 +88,8 @@ int tms9914_go_to_standby(gpib_board_t *board, struct tms9914_priv *priv) break; udelay(1); } - if (i == timeout) { - pr_err("error waiting for NATN\n"); + if (i == timeout) return -ETIMEDOUT; - } clear_bit(COMMAND_READY_BN, &priv->state); @@ -94,7 +97,7 @@ int tms9914_go_to_standby(gpib_board_t *board, struct tms9914_priv *priv) } EXPORT_SYMBOL_GPL(tms9914_go_to_standby); -void tms9914_interface_clear(gpib_board_t *board, struct tms9914_priv *priv, int assert) +void tms9914_interface_clear(struct gpib_board *board, struct tms9914_priv *priv, int assert) { if (assert) { write_byte(priv, AUX_SIC | AUX_CS, AUXCR); @@ -106,7 +109,7 @@ void tms9914_interface_clear(gpib_board_t *board, struct tms9914_priv *priv, int } EXPORT_SYMBOL_GPL(tms9914_interface_clear); -void tms9914_remote_enable(gpib_board_t *board, struct tms9914_priv *priv, int enable) +void tms9914_remote_enable(struct gpib_board *board, struct tms9914_priv *priv, int enable) { if (enable) write_byte(priv, AUX_SRE | AUX_CS, AUXCR); @@ -115,8 +118,8 @@ void tms9914_remote_enable(gpib_board_t *board, struct tms9914_priv *priv, int e } EXPORT_SYMBOL_GPL(tms9914_remote_enable); -void tms9914_request_system_control(gpib_board_t *board, struct tms9914_priv *priv, - int request_control) +int tms9914_request_system_control(struct gpib_board *board, struct tms9914_priv *priv, + int request_control) { if (request_control) { write_byte(priv, AUX_RQC, AUXCR); @@ -124,10 +127,11 @@ void tms9914_request_system_control(gpib_board_t *board, struct tms9914_priv *pr clear_bit(CIC_NUM, &board->status); write_byte(priv, AUX_RLC, AUXCR); } + return 0; } EXPORT_SYMBOL_GPL(tms9914_request_system_control); -unsigned int tms9914_t1_delay(gpib_board_t *board, struct tms9914_priv *priv, +unsigned int tms9914_t1_delay(struct gpib_board *board, struct tms9914_priv *priv, unsigned int nano_sec) { static const int clock_period = 200; // assuming 5Mhz input clock @@ -153,7 +157,7 @@ unsigned int tms9914_t1_delay(gpib_board_t *board, struct tms9914_priv *priv, } EXPORT_SYMBOL_GPL(tms9914_t1_delay); -void tms9914_return_to_local(const gpib_board_t *board, struct tms9914_priv *priv) +void tms9914_return_to_local(const struct gpib_board *board, struct tms9914_priv *priv) { write_byte(priv, AUX_RTL, AUXCR); } @@ -175,7 +179,7 @@ void tms9914_set_holdoff_mode(struct tms9914_priv *priv, enum tms9914_holdoff_mo write_byte(priv, AUX_HLDA | AUX_CS, AUXCR); break; default: - pr_err("%s: bug! bad holdoff mode %i\n", __func__, mode); + pr_err("bug! bad holdoff mode %i\n", mode); break; } priv->holdoff_mode = mode; @@ -191,7 +195,7 @@ void tms9914_release_holdoff(struct tms9914_priv *priv) } EXPORT_SYMBOL_GPL(tms9914_release_holdoff); -int tms9914_enable_eos(gpib_board_t *board, struct tms9914_priv *priv, uint8_t eos_byte, +int tms9914_enable_eos(struct gpib_board *board, struct tms9914_priv *priv, u8 eos_byte, int compare_8_bits) { priv->eos = eos_byte; @@ -202,13 +206,13 @@ int tms9914_enable_eos(gpib_board_t *board, struct tms9914_priv *priv, uint8_t e } EXPORT_SYMBOL(tms9914_enable_eos); -void tms9914_disable_eos(gpib_board_t *board, struct tms9914_priv *priv) +void tms9914_disable_eos(struct gpib_board *board, struct tms9914_priv *priv) { priv->eos_flags &= ~REOS; } EXPORT_SYMBOL(tms9914_disable_eos); -int tms9914_parallel_poll(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *result) +int tms9914_parallel_poll(struct gpib_board *board, struct tms9914_priv *priv, u8 *result) { // execute parallel poll write_byte(priv, AUX_CS | AUX_RPP, AUXCR); @@ -233,8 +237,8 @@ static void set_ppoll_reg(struct tms9914_priv *priv, int enable, } } -void tms9914_parallel_poll_configure(gpib_board_t *board, - struct tms9914_priv *priv, uint8_t config) +void tms9914_parallel_poll_configure(struct gpib_board *board, + struct tms9914_priv *priv, u8 config) { priv->ppoll_enable = (config & PPC_DISABLE) == 0; priv->ppoll_line = (config & PPC_DIO_MASK) + 1; @@ -243,14 +247,15 @@ void tms9914_parallel_poll_configure(gpib_board_t *board, } EXPORT_SYMBOL(tms9914_parallel_poll_configure); -void tms9914_parallel_poll_response(gpib_board_t *board, +void tms9914_parallel_poll_response(struct gpib_board *board, struct tms9914_priv *priv, int ist) { set_ppoll_reg(priv, priv->ppoll_enable, priv->ppoll_line, priv->ppoll_sense, ist); } EXPORT_SYMBOL(tms9914_parallel_poll_response); -void tms9914_serial_poll_response(gpib_board_t *board, struct tms9914_priv *priv, uint8_t status) +void tms9914_serial_poll_response(struct gpib_board *board, + struct tms9914_priv *priv, u8 status) { unsigned long flags; @@ -265,7 +270,7 @@ void tms9914_serial_poll_response(gpib_board_t *board, struct tms9914_priv *priv } EXPORT_SYMBOL(tms9914_serial_poll_response); -uint8_t tms9914_serial_poll_status(gpib_board_t *board, struct tms9914_priv *priv) +u8 tms9914_serial_poll_status(struct gpib_board *board, struct tms9914_priv *priv) { u8 status; unsigned long flags; @@ -278,7 +283,8 @@ uint8_t tms9914_serial_poll_status(gpib_board_t *board, struct tms9914_priv *pri } EXPORT_SYMBOL(tms9914_serial_poll_status); -int tms9914_primary_address(gpib_board_t *board, struct tms9914_priv *priv, unsigned int address) +int tms9914_primary_address(struct gpib_board *board, + struct tms9914_priv *priv, unsigned int address) { // put primary address in address0 write_byte(priv, address & ADDRESS_MASK, ADR); @@ -286,7 +292,7 @@ int tms9914_primary_address(gpib_board_t *board, struct tms9914_priv *priv, unsi } EXPORT_SYMBOL(tms9914_primary_address); -int tms9914_secondary_address(gpib_board_t *board, struct tms9914_priv *priv, +int tms9914_secondary_address(struct gpib_board *board, struct tms9914_priv *priv, unsigned int address, int enable) { if (enable) @@ -299,7 +305,7 @@ int tms9914_secondary_address(gpib_board_t *board, struct tms9914_priv *priv, } EXPORT_SYMBOL(tms9914_secondary_address); -unsigned int tms9914_update_status(gpib_board_t *board, struct tms9914_priv *priv, +unsigned int tms9914_update_status(struct gpib_board *board, struct tms9914_priv *priv, unsigned int clear_mask) { unsigned long flags; @@ -320,7 +326,8 @@ static void update_talker_state(struct tms9914_priv *priv, unsigned int address_ if (address_status_bits & HR_ATN) priv->talker_state = talker_addressed; else - /* this could also be serial_poll_active, but the tms9914 provides no + /* + * this could also be serial_poll_active, but the tms9914 provides no * way to distinguish, so we'll assume talker_active */ priv->talker_state = talker_active; @@ -341,7 +348,7 @@ static void update_listener_state(struct tms9914_priv *priv, unsigned int addres } } -static unsigned int update_status_nolock(gpib_board_t *board, struct tms9914_priv *priv) +static unsigned int update_status_nolock(struct gpib_board *board, struct tms9914_priv *priv) { int address_status; int bsr_bits; @@ -387,35 +394,35 @@ static unsigned int update_status_nolock(gpib_board_t *board, struct tms9914_pri return board->status; } -int tms9914_line_status(const gpib_board_t *board, struct tms9914_priv *priv) +int tms9914_line_status(const struct gpib_board *board, struct tms9914_priv *priv) { int bsr_bits; - int status = ValidALL; + int status = VALID_ALL; bsr_bits = read_byte(priv, BSR); if (bsr_bits & BSR_REN_BIT) - status |= BusREN; + status |= BUS_REN; if (bsr_bits & BSR_IFC_BIT) - status |= BusIFC; + status |= BUS_IFC; if (bsr_bits & BSR_SRQ_BIT) - status |= BusSRQ; + status |= BUS_SRQ; if (bsr_bits & BSR_EOI_BIT) - status |= BusEOI; + status |= BUS_EOI; if (bsr_bits & BSR_NRFD_BIT) - status |= BusNRFD; + status |= BUS_NRFD; if (bsr_bits & BSR_NDAC_BIT) - status |= BusNDAC; + status |= BUS_NDAC; if (bsr_bits & BSR_DAV_BIT) - status |= BusDAV; + status |= BUS_DAV; if (bsr_bits & BSR_ATN_BIT) - status |= BusATN; + status |= BUS_ATN; return status; } EXPORT_SYMBOL(tms9914_line_status); -static int check_for_eos(struct tms9914_priv *priv, uint8_t byte) +static int check_for_eos(struct tms9914_priv *priv, u8 byte) { static const u8 seven_bit_compare_mask = 0x7f; @@ -432,15 +439,14 @@ static int check_for_eos(struct tms9914_priv *priv, uint8_t byte) return 0; } -static int wait_for_read_byte(gpib_board_t *board, struct tms9914_priv *priv) +static int wait_for_read_byte(struct gpib_board *board, struct tms9914_priv *priv) { if (wait_event_interruptible(board->wait, test_bit(READ_READY_BN, &priv->state) || test_bit(DEV_CLEAR_BN, &priv->state) || - test_bit(TIMO_NUM, &board->status))) { - pr_debug("gpib: pio read wait interrupted\n"); + test_bit(TIMO_NUM, &board->status))) return -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) return -ETIMEDOUT; @@ -449,7 +455,8 @@ static int wait_for_read_byte(gpib_board_t *board, struct tms9914_priv *priv) return 0; } -static inline uint8_t tms9914_read_data_in(gpib_board_t *board, struct tms9914_priv *priv, int *end) +static inline u8 tms9914_read_data_in(struct gpib_board *board, + struct tms9914_priv *priv, int *end) { unsigned long flags; u8 data; @@ -472,7 +479,7 @@ static inline uint8_t tms9914_read_data_in(gpib_board_t *board, struct tms9914_p case TMS9914_HOLDOFF_NONE: break; default: - pr_err("%s: bug! bad holdoff mode %i\n", __func__, priv->holdoff_mode); + dev_err(board->gpib_dev, "bug! bad holdoff mode %i\n", priv->holdoff_mode); break; } spin_unlock_irqrestore(&board->spinlock, flags); @@ -480,7 +487,7 @@ static inline uint8_t tms9914_read_data_in(gpib_board_t *board, struct tms9914_p return data; } -static int pio_read(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer, +static int pio_read(struct gpib_board *board, struct tms9914_priv *priv, u8 *buffer, size_t length, int *end, size_t *bytes_read) { ssize_t retval = 0; @@ -501,7 +508,7 @@ static int pio_read(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buf return retval; } -int tms9914_read(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer, +int tms9914_read(struct gpib_board *board, struct tms9914_priv *priv, u8 *buffer, size_t length, int *end, size_t *bytes_read) { ssize_t retval = 0; @@ -541,17 +548,16 @@ int tms9914_read(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer } EXPORT_SYMBOL(tms9914_read); -static int pio_write_wait(gpib_board_t *board, struct tms9914_priv *priv) +static int pio_write_wait(struct gpib_board *board, struct tms9914_priv *priv) { // wait until next byte is ready to be sent if (wait_event_interruptible(board->wait, test_bit(WRITE_READY_BN, &priv->state) || test_bit(BUS_ERROR_BN, &priv->state) || test_bit(DEV_CLEAR_BN, &priv->state) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib write interrupted!\n"); + test_bit(TIMO_NUM, &board->status))) return -ERESTARTSYS; - } + if (test_bit(TIMO_NUM, &board->status)) return -ETIMEDOUT; if (test_bit(BUS_ERROR_BN, &priv->state)) @@ -562,7 +568,7 @@ static int pio_write_wait(gpib_board_t *board, struct tms9914_priv *priv) return 0; } -static int pio_write(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer, +static int pio_write(struct gpib_board *board, struct tms9914_priv *priv, u8 *buffer, size_t length, size_t *bytes_written) { ssize_t retval = 0; @@ -586,8 +592,8 @@ static int pio_write(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *bu return length; } -int tms9914_write(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written) +int tms9914_write(struct gpib_board *board, struct tms9914_priv *priv, + u8 *buffer, size_t length, int send_eoi, size_t *bytes_written) { ssize_t retval = 0; @@ -621,7 +627,8 @@ int tms9914_write(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffe } EXPORT_SYMBOL(tms9914_write); -static void check_my_address_state(gpib_board_t *board, struct tms9914_priv *priv, int cmd_byte) +static void check_my_address_state(struct gpib_board *board, + struct tms9914_priv *priv, int cmd_byte) { if (cmd_byte == MLA(board->pad)) { priv->primary_listen_addressed = 1; @@ -656,7 +663,7 @@ static void check_my_address_state(gpib_board_t *board, struct tms9914_priv *pri } } -int tms9914_command(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *buffer, +int tms9914_command(struct gpib_board *board, struct tms9914_priv *priv, u8 *buffer, size_t length, size_t *bytes_written) { int retval = 0; @@ -667,10 +674,8 @@ int tms9914_command(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *bu if (wait_event_interruptible(board->wait, test_bit(COMMAND_READY_BN, &priv->state) || - test_bit(TIMO_NUM, &board->status))) { - pr_debug("gpib command wait interrupted\n"); + test_bit(TIMO_NUM, &board->status))) break; - } if (test_bit(TIMO_NUM, &board->status)) break; @@ -695,7 +700,7 @@ int tms9914_command(gpib_board_t *board, struct tms9914_priv *priv, uint8_t *bu } EXPORT_SYMBOL(tms9914_command); -irqreturn_t tms9914_interrupt(gpib_board_t *board, struct tms9914_priv *priv) +irqreturn_t tms9914_interrupt(struct gpib_board *board, struct tms9914_priv *priv) { int status0, status1; @@ -706,7 +711,7 @@ irqreturn_t tms9914_interrupt(gpib_board_t *board, struct tms9914_priv *priv) } EXPORT_SYMBOL(tms9914_interrupt); -irqreturn_t tms9914_interrupt_have_status(gpib_board_t *board, struct tms9914_priv *priv, +irqreturn_t tms9914_interrupt_have_status(struct gpib_board *board, struct tms9914_priv *priv, int status0, int status1) { // record reception of END @@ -739,9 +744,10 @@ irqreturn_t tms9914_interrupt_have_status(gpib_board_t *board, struct tms9914_pr unsigned short command_byte = read_byte(priv, CPTR) & gpib_command_mask; switch (command_byte) { - case PPConfig: + case PP_CONFIG: priv->ppoll_configure_state = 1; - /* AUX_PTS generates another UNC interrupt on the next command byte + /* + * AUX_PTS generates another UNC interrupt on the next command byte * if it is in the secondary address group (such as PPE and PPD). */ write_byte(priv, AUX_PTS, AUXCR); @@ -761,15 +767,13 @@ irqreturn_t tms9914_interrupt_have_status(gpib_board_t *board, struct tms9914_pr write_byte(priv, AUX_INVAL, AUXCR); } } else { - // printk("tms9914: unrecognized gpib command pass thru 0x%x\n", - // command_byte); // clear dac holdoff write_byte(priv, AUX_INVAL, AUXCR); } break; } - if (in_primary_command_group(command_byte) && command_byte != PPConfig) + if (in_primary_command_group(command_byte) && command_byte != PP_CONFIG) priv->ppoll_configure_state = 0; } @@ -779,18 +783,18 @@ irqreturn_t tms9914_interrupt_have_status(gpib_board_t *board, struct tms9914_pr } if (status1 & HR_IFC) { - push_gpib_event(board, EventIFC); + push_gpib_event(board, EVENT_IFC); clear_bit(CIC_NUM, &board->status); } if (status1 & HR_GET) { - push_gpib_event(board, EventDevTrg); + push_gpib_event(board, EVENT_DEV_TRG); // clear dac holdoff write_byte(priv, AUX_VAL, AUXCR); } if (status1 & HR_DCAS) { - push_gpib_event(board, EventDevClr); + push_gpib_event(board, EVENT_DEV_CLR); // clear dac holdoff write_byte(priv, AUX_VAL, AUXCR); set_bit(DEV_CLEAR_BN, &priv->state); @@ -799,7 +803,7 @@ irqreturn_t tms9914_interrupt_have_status(gpib_board_t *board, struct tms9914_pr // check for being addressed with secondary addressing if (status1 & HR_APT) { if (board->sad < 0) - pr_err("tms9914: bug, APT interrupt without secondary addressing?\n"); + dev_err(board->gpib_dev, "bug, APT interrupt without secondary addressing?\n"); if ((read_byte(priv, CPTR) & gpib_command_mask) == MSA(board->sad)) write_byte(priv, AUX_VAL, AUXCR); else @@ -807,8 +811,8 @@ irqreturn_t tms9914_interrupt_have_status(gpib_board_t *board, struct tms9914_pr } if ((status0 & priv->imr0_bits) || (status1 & priv->imr1_bits)) { -// dev_dbg(board->gpib_dev, "isr0 0x%x, imr0 0x%x, isr1 0x%x, imr1 0x%x\n", -// status0, priv->imr0_bits, status1, priv->imr1_bits); + dev_dbg(board->gpib_dev, "isr0 0x%x, imr0 0x%x, isr1 0x%x, imr1 0x%x\n", + status0, priv->imr0_bits, status1, priv->imr1_bits); update_status_nolock(board, priv); wake_up_interruptible(&board->wait); } @@ -842,7 +846,7 @@ void tms9914_board_reset(struct tms9914_priv *priv) } EXPORT_SYMBOL_GPL(tms9914_board_reset); -void tms9914_online(gpib_board_t *board, struct tms9914_priv *priv) +void tms9914_online(struct gpib_board *board, struct tms9914_priv *priv) { /* set GPIB address */ tms9914_primary_address(board, priv, board->pad); @@ -864,14 +868,14 @@ EXPORT_SYMBOL_GPL(tms9914_online); #ifdef CONFIG_HAS_IOPORT // wrapper for inb -uint8_t tms9914_ioport_read_byte(struct tms9914_priv *priv, unsigned int register_num) +u8 tms9914_ioport_read_byte(struct tms9914_priv *priv, unsigned int register_num) { return inb(priv->iobase + register_num * priv->offset); } EXPORT_SYMBOL_GPL(tms9914_ioport_read_byte); // wrapper for outb -void tms9914_ioport_write_byte(struct tms9914_priv *priv, uint8_t data, unsigned int register_num) +void tms9914_ioport_write_byte(struct tms9914_priv *priv, u8 data, unsigned int register_num) { outb(data, priv->iobase + register_num * priv->offset); if (register_num == AUXCR) @@ -881,14 +885,14 @@ EXPORT_SYMBOL_GPL(tms9914_ioport_write_byte); #endif // wrapper for readb -uint8_t tms9914_iomem_read_byte(struct tms9914_priv *priv, unsigned int register_num) +u8 tms9914_iomem_read_byte(struct tms9914_priv *priv, unsigned int register_num) { return readb(priv->mmiobase + register_num * priv->offset); } EXPORT_SYMBOL_GPL(tms9914_iomem_read_byte); // wrapper for writeb -void tms9914_iomem_write_byte(struct tms9914_priv *priv, uint8_t data, unsigned int register_num) +void tms9914_iomem_write_byte(struct tms9914_priv *priv, u8 data, unsigned int register_num) { writeb(data, priv->mmiobase + register_num * priv->offset); if (register_num == AUXCR) diff --git a/drivers/staging/gpib/tnt4882/Makefile b/drivers/staging/gpib/tnt4882/Makefile index a3c3fb96d5ed..fa1687ad0d1b 100644 --- a/drivers/staging/gpib/tnt4882/Makefile +++ b/drivers/staging/gpib/tnt4882/Makefile @@ -1,4 +1,3 @@ -ccflags-$(CONFIG_GPIB_PCMCIA) := -DGPIB_PCMCIA obj-$(CONFIG_GPIB_NI_PCI_ISA) += tnt4882.o tnt4882-objs := tnt4882_gpib.o mite.o diff --git a/drivers/staging/gpib/tnt4882/mite.c b/drivers/staging/gpib/tnt4882/mite.c index ea64dde46bcb..847b96f411bd 100644 --- a/drivers/staging/gpib/tnt4882/mite.c +++ b/drivers/staging/gpib/tnt4882/mite.c @@ -88,7 +88,6 @@ int mite_setup(struct mite_struct *mite) pr_err("mite: failed to remap mite io memory address.\n"); return -ENOMEM; } - pr_info("mite: 0x%08lx mapped to %p\n", mite->mite_phys_addr, mite->mite_io_addr); addr = pci_resource_start(mite->pcidev, 1); mite->daq_phys_addr = addr; mite->daq_io_addr = ioremap(mite->daq_phys_addr, pci_resource_len(mite->pcidev, 1)); @@ -96,7 +95,6 @@ int mite_setup(struct mite_struct *mite) pr_err("mite: failed to remap daq io memory address.\n"); return -ENOMEM; } - pr_info("mite: daq: 0x%08lx mapped to %p\n", mite->daq_phys_addr, mite->daq_io_addr); writel(mite->daq_phys_addr | WENAB, mite->mite_io_addr + MITE_IODWBSR); mite->used = 1; return 0; @@ -133,18 +131,3 @@ void mite_unsetup(struct mite_struct *mite) } mite->used = 0; } - -void mite_list_devices(void) -{ - struct mite_struct *mite, *next; - - pr_info("Available NI PCI device IDs:"); - if (mite_devices) - for (mite = mite_devices; mite; mite = next) { - next = mite->next; - pr_info(" 0x%04x", mite_device_id(mite)); - if (mite->used) - pr_info("(used)"); - } - pr_info("\n"); -} diff --git a/drivers/staging/gpib/tnt4882/tnt4882_gpib.c b/drivers/staging/gpib/tnt4882/tnt4882_gpib.c index b39ab2abe495..a17b69e34986 100644 --- a/drivers/staging/gpib/tnt4882/tnt4882_gpib.c +++ b/drivers/staging/gpib/tnt4882/tnt4882_gpib.c @@ -5,6 +5,10 @@ * copyright : (C) 2001, 2002 by Frank Mori Hess ***************************************************************************/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#define dev_fmt pr_fmt +#define DRV_NAME KBUILD_MODNAME + #include <linux/ioport.h> #include <linux/sched.h> #include <linux/module.h> @@ -47,49 +51,7 @@ struct tnt4882_priv { unsigned short auxg_bits; // bits written to auxiliary register G }; -// interface functions -static int tnt4882_read(gpib_board_t *board, uint8_t *buffer, size_t length, - int *end, size_t *bytes_read); -static int tnt4882_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, - int *end, size_t *bytes_read); -static int tnt4882_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written); -static int tnt4882_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, - int send_eoi, size_t *bytes_written); -static int tnt4882_command(gpib_board_t *board, uint8_t *buffer, size_t length, - size_t *bytes_written); -static int tnt4882_command_unaccel(gpib_board_t *board, uint8_t *buffer, - size_t length, size_t *bytes_written); -static int tnt4882_take_control(gpib_board_t *board, int synchronous); -static int tnt4882_go_to_standby(gpib_board_t *board); -static void tnt4882_request_system_control(gpib_board_t *board, int request_control); -static void tnt4882_interface_clear(gpib_board_t *board, int assert); -static void tnt4882_remote_enable(gpib_board_t *board, int enable); -static int tnt4882_enable_eos(gpib_board_t *board, uint8_t eos_byte, int - compare_8_bits); -static void tnt4882_disable_eos(gpib_board_t *board); -static unsigned int tnt4882_update_status(gpib_board_t *board, unsigned int clear_mask); -static int tnt4882_primary_address(gpib_board_t *board, unsigned int address); -static int tnt4882_secondary_address(gpib_board_t *board, unsigned int address, - int enable); -static int tnt4882_parallel_poll(gpib_board_t *board, uint8_t *result); -static void tnt4882_parallel_poll_configure(gpib_board_t *board, uint8_t config); -static void tnt4882_parallel_poll_response(gpib_board_t *board, int ist); -static void tnt4882_serial_poll_response(gpib_board_t *board, uint8_t status); -static uint8_t tnt4882_serial_poll_status(gpib_board_t *board); -static int tnt4882_line_status(const gpib_board_t *board); -static unsigned int tnt4882_t1_delay(gpib_board_t *board, unsigned int nano_sec); -static void tnt4882_return_to_local(gpib_board_t *board); - -// interrupt service routines -static irqreturn_t tnt4882_internal_interrupt(gpib_board_t *board); -static irqreturn_t tnt4882_interrupt(int irq, void *arg); - -// utility functions -static int tnt4882_allocate_private(gpib_board_t *board); -static void tnt4882_free_private(gpib_board_t *board); -static void tnt4882_init(struct tnt4882_priv *tnt_priv, const gpib_board_t *board); -static void tnt4882_board_reset(struct tnt4882_priv *tnt_priv, gpib_board_t *board); +static irqreturn_t tnt4882_internal_interrupt(struct gpib_board *board); // register offset for nec7210 compatible registers static const int atgpib_reg_offset = 2; @@ -139,7 +101,6 @@ static inline unsigned short tnt_readb(struct tnt4882_priv *priv, unsigned long retval = 0; break; default: - pr_err("tnt4882: bug! unsupported ni_chipset\n"); retval = 0; break; } @@ -174,7 +135,6 @@ static inline void tnt_writeb(struct tnt4882_priv *priv, unsigned short value, u case NEC7210: break; default: - pr_err("tnt4882: bug! unsupported ni_chipset\n"); break; } break; @@ -188,9 +148,9 @@ static inline void tnt_writeb(struct tnt4882_priv *priv, unsigned short value, u MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("GPIB driver for National Instruments boards using tnt4882 or compatible chips"); -int tnt4882_line_status(const gpib_board_t *board) +static int tnt4882_line_status(const struct gpib_board *board) { - int status = ValidALL; + int status = VALID_ALL; int bcsr_bits; struct tnt4882_priv *tnt_priv; @@ -199,26 +159,26 @@ int tnt4882_line_status(const gpib_board_t *board) bcsr_bits = tnt_readb(tnt_priv, BSR); if (bcsr_bits & BCSR_REN_BIT) - status |= BusREN; + status |= BUS_REN; if (bcsr_bits & BCSR_IFC_BIT) - status |= BusIFC; + status |= BUS_IFC; if (bcsr_bits & BCSR_SRQ_BIT) - status |= BusSRQ; + status |= BUS_SRQ; if (bcsr_bits & BCSR_EOI_BIT) - status |= BusEOI; + status |= BUS_EOI; if (bcsr_bits & BCSR_NRFD_BIT) - status |= BusNRFD; + status |= BUS_NRFD; if (bcsr_bits & BCSR_NDAC_BIT) - status |= BusNDAC; + status |= BUS_NDAC; if (bcsr_bits & BCSR_DAV_BIT) - status |= BusDAV; + status |= BUS_DAV; if (bcsr_bits & BCSR_ATN_BIT) - status |= BusATN; + status |= BUS_ATN; return status; } -unsigned int tnt4882_t1_delay(gpib_board_t *board, unsigned int nano_sec) +static int tnt4882_t1_delay(struct gpib_board *board, unsigned int nano_sec) { struct tnt4882_priv *tnt_priv = board->private_data; struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; @@ -276,7 +236,7 @@ static int fifo_xfer_done(struct tnt4882_priv *tnt_priv) return retval; } -static int drain_fifo_words(struct tnt4882_priv *tnt_priv, uint8_t *buffer, int num_bytes) +static int drain_fifo_words(struct tnt4882_priv *tnt_priv, u8 *buffer, int num_bytes) { int count = 0; struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; @@ -291,14 +251,15 @@ static int drain_fifo_words(struct tnt4882_priv *tnt_priv, uint8_t *buffer, int return count; } -static void tnt4882_release_holdoff(gpib_board_t *board, struct tnt4882_priv *tnt_priv) +static void tnt4882_release_holdoff(struct gpib_board *board, struct tnt4882_priv *tnt_priv) { struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; unsigned short sasr_bits; sasr_bits = tnt_readb(tnt_priv, SASR); - /*tnt4882 not in one-chip mode won't always release holdoff unless we + /* + * tnt4882 not in one-chip mode won't always release holdoff unless we * are in the right mode when release handshake command is given */ if (sasr_bits & AEHS_BIT) /* holding off due to holdoff on end mode*/ { @@ -314,8 +275,8 @@ static void tnt4882_release_holdoff(gpib_board_t *board, struct tnt4882_priv *tn } } -int tnt4882_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, - size_t *bytes_read) +static int tnt4882_accel_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, + size_t *bytes_read) { size_t count = 0; ssize_t retval = 0; @@ -368,22 +329,18 @@ int tnt4882_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(ADR_CHANGE_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - pr_err("tnt4882: read interrupted\n"); retval = -ERESTARTSYS; break; } if (test_bit(TIMO_NUM, &board->status)) { - //pr_info("tnt4882: minor %i read timed out\n", board->minor); retval = -ETIMEDOUT; break; } if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) { - pr_err("tnt4882: device clear interrupted read\n"); retval = -EINTR; break; } if (test_bit(ADR_CHANGE_BN, &nec_priv->state)) { - pr_err("tnt4882: address change interrupted read\n"); retval = -EINTR; break; } @@ -410,20 +367,14 @@ int tnt4882_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int test_bit(DEV_CLEAR_BN, &nec_priv->state) || test_bit(ADR_CHANGE_BN, &nec_priv->state) || test_bit(TIMO_NUM, &board->status))) { - pr_err("tnt4882: read interrupted\n"); retval = -ERESTARTSYS; } if (test_bit(TIMO_NUM, &board->status)) - //pr_info("tnt4882: read timed out\n"); retval = -ETIMEDOUT; - if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) { - pr_err("tnt4882: device clear interrupted read\n"); + if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) retval = -EINTR; - } - if (test_bit(ADR_CHANGE_BN, &nec_priv->state)) { - pr_err("tnt4882: address change interrupted read\n"); + if (test_bit(ADR_CHANGE_BN, &nec_priv->state)) retval = -EINTR; - } count += drain_fifo_words(tnt_priv, &buffer[count], length - count); if (fifo_byte_available(tnt_priv) && count < length) buffer[count++] = tnt_readb(tnt_priv, FIFOB); @@ -434,7 +385,8 @@ int tnt4882_accel_read(gpib_board_t *board, uint8_t *buffer, size_t length, int nec7210_set_reg_bits(nec_priv, IMR1, HR_ENDIE, 0); nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAI, 0); - /* force handling of any pending interrupts (seems to be needed + /* + * force handling of any pending interrupts (seems to be needed * to keep interrupts from getting hosed, plus for syncing * with RECEIVED_END below) */ @@ -476,7 +428,7 @@ static unsigned int tnt_transfer_count(struct tnt4882_priv *tnt_priv) return -count; }; -static int write_wait(gpib_board_t *board, struct tnt4882_priv *tnt_priv, +static int write_wait(struct gpib_board *board, struct tnt4882_priv *tnt_priv, int wait_for_done, int send_commands) { struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; @@ -486,26 +438,19 @@ static int write_wait(gpib_board_t *board, struct tnt4882_priv *tnt_priv, fifo_xfer_done(tnt_priv) || test_bit(BUS_ERROR_BN, &nec_priv->state) || test_bit(DEV_CLEAR_BN, &nec_priv->state) || - test_bit(TIMO_NUM, &board->status))) { - dev_dbg(board->gpib_dev, "gpib write interrupted\n"); + test_bit(TIMO_NUM, &board->status))) return -ERESTARTSYS; - } - if (test_bit(TIMO_NUM, &board->status)) { - pr_info("tnt4882: write timed out\n"); + + if (test_bit(TIMO_NUM, &board->status)) return -ETIMEDOUT; - } - if (test_and_clear_bit(BUS_ERROR_BN, &nec_priv->state)) { - pr_err("tnt4882: write bus error\n"); + if (test_and_clear_bit(BUS_ERROR_BN, &nec_priv->state)) return (send_commands) ? -ENOTCONN : -ECOMM; - } - if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) { - pr_err("tnt4882: device clear interrupted write\n"); + if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) return -EINTR; - } return 0; } -static int generic_write(gpib_board_t *board, uint8_t *buffer, size_t length, +static int generic_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, int send_commands, size_t *bytes_written) { size_t count = 0; @@ -588,7 +533,8 @@ static int generic_write(gpib_board_t *board, uint8_t *buffer, size_t length, nec7210_set_reg_bits(nec_priv, IMR1, HR_ERR, 0x0); nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAO, 0x0); - /* force handling of any interrupts that happened + /* + * force handling of any interrupts that happened * while they were masked (this appears to be needed) */ tnt4882_internal_interrupt(board); @@ -596,18 +542,19 @@ static int generic_write(gpib_board_t *board, uint8_t *buffer, size_t length, return retval; } -int tnt4882_accel_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) +static int tnt4882_accel_write(struct gpib_board *board, u8 *buffer, + size_t length, int send_eoi, size_t *bytes_written) { return generic_write(board, buffer, length, send_eoi, 0, bytes_written); } -int tnt4882_command(gpib_board_t *board, uint8_t *buffer, size_t length, size_t *bytes_written) +static int tnt4882_command(struct gpib_board *board, u8 *buffer, size_t length, + size_t *bytes_written) { return generic_write(board, buffer, length, 0, 1, bytes_written); } -irqreturn_t tnt4882_internal_interrupt(gpib_board_t *board) +static irqreturn_t tnt4882_internal_interrupt(struct gpib_board *board) { struct tnt4882_priv *priv = board->private_data; int isr0_bits, isr3_bits, imr3_bits; @@ -622,7 +569,7 @@ irqreturn_t tnt4882_internal_interrupt(gpib_board_t *board) imr3_bits = priv->imr3_bits; if (isr0_bits & TNT_IFCI_BIT) - push_gpib_event(board, EventIFC); + push_gpib_event(board, EVENT_IFC); //XXX don't need this wakeup, one below should do? // wake_up_interruptible(&board->wait); @@ -633,7 +580,7 @@ irqreturn_t tnt4882_internal_interrupt(gpib_board_t *board) if (isr3_bits & HR_DONE) priv->imr3_bits &= ~HR_DONE; if (isr3_bits & (HR_INTR | HR_TLCI)) { - dev_dbg(board->gpib_dev, "tnt4882: minor %i isr0 0x%x imr0 0x%x isr3 0x%x imr3 0x%x\n", + dev_dbg(board->gpib_dev, "minor %i isr0 0x%x imr0 0x%x isr3 0x%x imr3 0x%x\n", board->minor, isr0_bits, priv->imr0_bits, isr3_bits, imr3_bits); tnt_writeb(priv, priv->imr3_bits, IMR3); wake_up_interruptible(&board->wait); @@ -642,28 +589,14 @@ irqreturn_t tnt4882_internal_interrupt(gpib_board_t *board) return IRQ_HANDLED; } -irqreturn_t tnt4882_interrupt(int irq, void *arg) +static irqreturn_t tnt4882_interrupt(int irq, void *arg) { return tnt4882_internal_interrupt(arg); } -static int ni_tnt_isa_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int ni_nat4882_isa_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int ni_nec_isa_attach(gpib_board_t *board, const gpib_board_config_t *config); -static int ni_pci_attach(gpib_board_t *board, const gpib_board_config_t *config); - -static void ni_isa_detach(gpib_board_t *board); -static void ni_pci_detach(gpib_board_t *board); - -#ifdef GPIB_PCMCIA -static int ni_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config); -static void ni_pcmcia_detach(gpib_board_t *board); -static int init_ni_gpib_cs(void); -static void __exit exit_ni_gpib_cs(void); -#endif - // wrappers for interface functions -int tnt4882_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read) +static int tnt4882_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, + size_t *bytes_read) { struct tnt4882_priv *priv = board->private_data; struct nec7210_priv *nec_priv = &priv->nec7210_priv; @@ -682,89 +615,90 @@ int tnt4882_read(gpib_board_t *board, uint8_t *buffer, size_t length, int *end, return retval; } -int tnt4882_write(gpib_board_t *board, uint8_t *buffer, size_t length, int send_eoi, - size_t *bytes_written) +static int tnt4882_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, + size_t *bytes_written) { struct tnt4882_priv *priv = board->private_data; return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written); } -int tnt4882_command_unaccel(gpib_board_t *board, uint8_t *buffer, - size_t length, size_t *bytes_written) +static int tnt4882_command_unaccel(struct gpib_board *board, u8 *buffer, + size_t length, size_t *bytes_written) { struct tnt4882_priv *priv = board->private_data; return nec7210_command(board, &priv->nec7210_priv, buffer, length, bytes_written); } -int tnt4882_take_control(gpib_board_t *board, int synchronous) +static int tnt4882_take_control(struct gpib_board *board, int synchronous) { struct tnt4882_priv *priv = board->private_data; return nec7210_take_control(board, &priv->nec7210_priv, synchronous); } -int tnt4882_go_to_standby(gpib_board_t *board) +static int tnt4882_go_to_standby(struct gpib_board *board) { struct tnt4882_priv *priv = board->private_data; return nec7210_go_to_standby(board, &priv->nec7210_priv); } -void tnt4882_request_system_control(gpib_board_t *board, int request_control) +static int tnt4882_request_system_control(struct gpib_board *board, int request_control) { struct tnt4882_priv *priv = board->private_data; + int retval; if (request_control) { tnt_writeb(priv, SETSC, CMDR); udelay(1); } - nec7210_request_system_control(board, &priv->nec7210_priv, request_control); + retval = nec7210_request_system_control(board, &priv->nec7210_priv, request_control); if (!request_control) { tnt_writeb(priv, CLRSC, CMDR); udelay(1); } + return retval; } -void tnt4882_interface_clear(gpib_board_t *board, int assert) +static void tnt4882_interface_clear(struct gpib_board *board, int assert) { struct tnt4882_priv *priv = board->private_data; nec7210_interface_clear(board, &priv->nec7210_priv, assert); } -void tnt4882_remote_enable(gpib_board_t *board, int enable) +static void tnt4882_remote_enable(struct gpib_board *board, int enable) { struct tnt4882_priv *priv = board->private_data; nec7210_remote_enable(board, &priv->nec7210_priv, enable); } -int tnt4882_enable_eos(gpib_board_t *board, uint8_t eos_byte, int compare_8_bits) +static int tnt4882_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) { struct tnt4882_priv *priv = board->private_data; return nec7210_enable_eos(board, &priv->nec7210_priv, eos_byte, compare_8_bits); } -void tnt4882_disable_eos(gpib_board_t *board) +static void tnt4882_disable_eos(struct gpib_board *board) { struct tnt4882_priv *priv = board->private_data; nec7210_disable_eos(board, &priv->nec7210_priv); } -unsigned int tnt4882_update_status(gpib_board_t *board, unsigned int clear_mask) +static unsigned int tnt4882_update_status(struct gpib_board *board, unsigned int clear_mask) { unsigned long flags; u8 line_status; - unsigned int retval; struct tnt4882_priv *priv = board->private_data; spin_lock_irqsave(&board->spinlock, flags); board->status &= ~clear_mask; - retval = nec7210_update_status_nolock(board, &priv->nec7210_priv); + nec7210_update_status_nolock(board, &priv->nec7210_priv); /* set / clear SRQ state since it is not cleared by interrupt */ line_status = tnt_readb(priv, BSR); if (line_status & BCSR_SRQ_BIT) @@ -775,22 +709,21 @@ unsigned int tnt4882_update_status(gpib_board_t *board, unsigned int clear_mask) return board->status; } -int tnt4882_primary_address(gpib_board_t *board, unsigned int address) +static int tnt4882_primary_address(struct gpib_board *board, unsigned int address) { struct tnt4882_priv *priv = board->private_data; return nec7210_primary_address(board, &priv->nec7210_priv, address); } -int tnt4882_secondary_address(gpib_board_t *board, unsigned int address, int enable) +static int tnt4882_secondary_address(struct gpib_board *board, unsigned int address, int enable) { struct tnt4882_priv *priv = board->private_data; return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable); } -int tnt4882_parallel_poll(gpib_board_t *board, uint8_t *result) - +static int tnt4882_parallel_poll(struct gpib_board *board, u8 *result) { struct tnt4882_priv *tnt_priv = board->private_data; @@ -807,7 +740,7 @@ int tnt4882_parallel_poll(gpib_board_t *board, uint8_t *result) } } -void tnt4882_parallel_poll_configure(gpib_board_t *board, uint8_t config) +static void tnt4882_parallel_poll_configure(struct gpib_board *board, u8 config) { struct tnt4882_priv *priv = board->private_data; @@ -825,24 +758,25 @@ void tnt4882_parallel_poll_configure(gpib_board_t *board, uint8_t config) } } -void tnt4882_parallel_poll_response(gpib_board_t *board, int ist) +static void tnt4882_parallel_poll_response(struct gpib_board *board, int ist) { struct tnt4882_priv *priv = board->private_data; nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist); } -/* this is just used by the old nec7210 isa interfaces, the newer +/* + * this is just used by the old nec7210 isa interfaces, the newer * boards use tnt4882_serial_poll_response2 */ -void tnt4882_serial_poll_response(gpib_board_t *board, uint8_t status) +static void tnt4882_serial_poll_response(struct gpib_board *board, u8 status) { struct tnt4882_priv *priv = board->private_data; nec7210_serial_poll_response(board, &priv->nec7210_priv, status); } -static void tnt4882_serial_poll_response2(gpib_board_t *board, uint8_t status, +static void tnt4882_serial_poll_response2(struct gpib_board *board, u8 status, int new_reason_for_service) { struct tnt4882_priv *priv = board->private_data; @@ -860,7 +794,8 @@ static void tnt4882_serial_poll_response2(gpib_board_t *board, uint8_t status, priv->nec7210_priv.srq_pending = 0; } if (reqt) - /* It may seem like a race to issue reqt before updating + /* + * It may seem like a race to issue reqt before updating * the status byte, but it is not. The chip does not * issue the reqt until the SPMR is written to at * a later time. @@ -868,7 +803,8 @@ static void tnt4882_serial_poll_response2(gpib_board_t *board, uint8_t status, write_byte(&priv->nec7210_priv, AUX_REQT, AUXMR); else if (reqf) write_byte(&priv->nec7210_priv, AUX_REQF, AUXMR); - /* We need to always zero bit 6 of the status byte before writing it to + /* + * We need to always zero bit 6 of the status byte before writing it to * the SPMR to insure we are using * serial poll mode SP1, and not accidentally triggering mode SP3. */ @@ -876,303 +812,21 @@ static void tnt4882_serial_poll_response2(gpib_board_t *board, uint8_t status, spin_unlock_irqrestore(&board->spinlock, flags); } -uint8_t tnt4882_serial_poll_status(gpib_board_t *board) +static u8 tnt4882_serial_poll_status(struct gpib_board *board) { struct tnt4882_priv *priv = board->private_data; return nec7210_serial_poll_status(board, &priv->nec7210_priv); } -void tnt4882_return_to_local(gpib_board_t *board) +static void tnt4882_return_to_local(struct gpib_board *board) { struct tnt4882_priv *priv = board->private_data; nec7210_return_to_local(board, &priv->nec7210_priv); } -static gpib_interface_t ni_pci_interface = { - .name = "ni_pci", - .attach = ni_pci_attach, - .detach = ni_pci_detach, - .read = tnt4882_accel_read, - .write = tnt4882_accel_write, - .command = tnt4882_command, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = tnt4882_line_status, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response2 = tnt4882_serial_poll_response2, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -static gpib_interface_t ni_pci_accel_interface = { - .name = "ni_pci_accel", - .attach = ni_pci_attach, - .detach = ni_pci_detach, - .read = tnt4882_accel_read, - .write = tnt4882_accel_write, - .command = tnt4882_command, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = tnt4882_line_status, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response2 = tnt4882_serial_poll_response2, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -static gpib_interface_t ni_isa_interface = { - .name = "ni_isa", - .attach = ni_tnt_isa_attach, - .detach = ni_isa_detach, - .read = tnt4882_accel_read, - .write = tnt4882_accel_write, - .command = tnt4882_command, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = tnt4882_line_status, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response2 = tnt4882_serial_poll_response2, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -static gpib_interface_t ni_nat4882_isa_interface = { - .name = "ni_nat4882_isa", - .attach = ni_nat4882_isa_attach, - .detach = ni_isa_detach, - .read = tnt4882_read, - .write = tnt4882_write, - .command = tnt4882_command_unaccel, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = tnt4882_line_status, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response2 = tnt4882_serial_poll_response2, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -static gpib_interface_t ni_nec_isa_interface = { - .name = "ni_nec_isa", - .attach = ni_nec_isa_attach, - .detach = ni_isa_detach, - .read = tnt4882_read, - .write = tnt4882_write, - .command = tnt4882_command_unaccel, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = NULL, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response = tnt4882_serial_poll_response, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -static gpib_interface_t ni_isa_accel_interface = { - .name = "ni_isa_accel", - .attach = ni_tnt_isa_attach, - .detach = ni_isa_detach, - .read = tnt4882_accel_read, - .write = tnt4882_accel_write, - .command = tnt4882_command, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = tnt4882_line_status, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response2 = tnt4882_serial_poll_response2, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -static gpib_interface_t ni_nat4882_isa_accel_interface = { - .name = "ni_nat4882_isa_accel", - .attach = ni_nat4882_isa_attach, - .detach = ni_isa_detach, - .read = tnt4882_accel_read, - .write = tnt4882_accel_write, - .command = tnt4882_command_unaccel, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = tnt4882_line_status, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response2 = tnt4882_serial_poll_response2, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -static gpib_interface_t ni_nec_isa_accel_interface = { - .name = "ni_nec_isa_accel", - .attach = ni_nec_isa_attach, - .detach = ni_isa_detach, - .read = tnt4882_accel_read, - .write = tnt4882_accel_write, - .command = tnt4882_command_unaccel, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = NULL, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response = tnt4882_serial_poll_response, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -#ifdef GPIB_PCMCIA -static gpib_interface_t ni_pcmcia_interface = { - .name = "ni_pcmcia", - .attach = ni_pcmcia_attach, - .detach = ni_pcmcia_detach, - .read = tnt4882_accel_read, - .write = tnt4882_accel_write, - .command = tnt4882_command, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = tnt4882_line_status, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response = tnt4882_serial_poll_response, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; - -static gpib_interface_t ni_pcmcia_accel_interface = { - .name = "ni_pcmcia_accel", - .attach = ni_pcmcia_attach, - .detach = ni_pcmcia_detach, - .read = tnt4882_accel_read, - .write = tnt4882_accel_write, - .command = tnt4882_command, - .take_control = tnt4882_take_control, - .go_to_standby = tnt4882_go_to_standby, - .request_system_control = tnt4882_request_system_control, - .interface_clear = tnt4882_interface_clear, - .remote_enable = tnt4882_remote_enable, - .enable_eos = tnt4882_enable_eos, - .disable_eos = tnt4882_disable_eos, - .parallel_poll = tnt4882_parallel_poll, - .parallel_poll_configure = tnt4882_parallel_poll_configure, - .parallel_poll_response = tnt4882_parallel_poll_response, - .local_parallel_poll_mode = NULL, // XXX - .line_status = tnt4882_line_status, - .update_status = tnt4882_update_status, - .primary_address = tnt4882_primary_address, - .secondary_address = tnt4882_secondary_address, - .serial_poll_response = tnt4882_serial_poll_response, - .serial_poll_status = tnt4882_serial_poll_status, - .t1_delay = tnt4882_t1_delay, - .return_to_local = tnt4882_return_to_local, -}; -#endif - -void tnt4882_board_reset(struct tnt4882_priv *tnt_priv, gpib_board_t *board) +static void tnt4882_board_reset(struct tnt4882_priv *tnt_priv, struct gpib_board *board) { struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; @@ -1185,7 +839,7 @@ void tnt4882_board_reset(struct tnt4882_priv *tnt_priv, gpib_board_t *board) nec7210_board_reset(nec_priv, board); } -int tnt4882_allocate_private(gpib_board_t *board) +static int tnt4882_allocate_private(struct gpib_board *board) { struct tnt4882_priv *tnt_priv; @@ -1198,13 +852,13 @@ int tnt4882_allocate_private(gpib_board_t *board) return 0; } -void tnt4882_free_private(gpib_board_t *board) +static void tnt4882_free_private(struct gpib_board *board) { kfree(board->private_data); board->private_data = NULL; } -void tnt4882_init(struct tnt4882_priv *tnt_priv, const gpib_board_t *board) +static void tnt4882_init(struct tnt4882_priv *tnt_priv, const struct gpib_board *board) { struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; @@ -1252,7 +906,7 @@ void tnt4882_init(struct tnt4882_priv *tnt_priv, const gpib_board_t *board) tnt_writeb(tnt_priv, tnt_priv->imr0_bits, IMR0); } -int ni_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ni_pci_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct tnt4882_priv *tnt_priv; struct nec7210_priv *nec_priv; @@ -1271,10 +925,8 @@ int ni_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) nec_priv->write_byte = nec7210_locking_iomem_write_byte; nec_priv->offset = atgpib_reg_offset; - if (!mite_devices) { - pr_err("no National Instruments PCI boards found\n"); - return -1; - } + if (!mite_devices) + return -ENODEV; for (mite = mite_devices; mite; mite = mite->next) { short found_board; @@ -1305,37 +957,32 @@ int ni_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) if (found_board) break; } - if (!mite) { - pr_err("no NI PCI-GPIB boards found\n"); - return -1; - } + if (!mite) + return -ENODEV; + tnt_priv->mite = mite; retval = mite_setup(tnt_priv->mite); - if (retval < 0) { - pr_err("tnt4882: error setting up mite.\n"); + if (retval < 0) return retval; - } nec_priv->mmiobase = tnt_priv->mite->daq_io_addr; // get irq - if (request_irq(mite_irq(tnt_priv->mite), tnt4882_interrupt, isr_flags, - "ni-pci-gpib", board)) { - pr_err("gpib: can't request IRQ %d\n", mite_irq(tnt_priv->mite)); - return -1; + retval = request_irq(mite_irq(tnt_priv->mite), tnt4882_interrupt, isr_flags, "ni-pci-gpib", + board); + if (retval) { + dev_err(board->gpib_dev, "failed to obtain pci irq %d\n", mite_irq(tnt_priv->mite)); + return retval; } tnt_priv->irq = mite_irq(tnt_priv->mite); - pr_info("tnt4882: irq %i\n", tnt_priv->irq); // TNT5004 detection switch (tnt_readb(tnt_priv, CSR) & 0xf0) { case 0x30: nec_priv->type = TNT4882; - pr_info("tnt4882: TNT4882 chipset detected\n"); break; case 0x40: nec_priv->type = TNT5004; - pr_info("tnt4882: TNT5004 chipset detected\n"); break; } tnt4882_init(tnt_priv, board); @@ -1343,7 +990,7 @@ int ni_pci_attach(gpib_board_t *board, const gpib_board_config_t *config) return 0; } -void ni_pci_detach(gpib_board_t *board) +static void ni_pci_detach(struct gpib_board *board) { struct tnt4882_priv *tnt_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1365,28 +1012,22 @@ static int ni_isapnp_find(struct pnp_dev **dev) { *dev = pnp_find_dev(NULL, ISAPNP_VENDOR_ID_NI, ISAPNP_FUNCTION(ISAPNP_ID_NI_ATGPIB_TNT), NULL); - if (!*dev || !(*dev)->card) { - pr_err("tnt4882: failed to find isapnp board\n"); + if (!*dev || !(*dev)->card) return -ENODEV; - } - if (pnp_device_attach(*dev) < 0) { - pr_err("tnt4882: atgpib/tnt board already active, skipping\n"); + if (pnp_device_attach(*dev) < 0) return -EBUSY; - } if (pnp_activate_dev(*dev) < 0) { pnp_device_detach(*dev); - pr_err("tnt4882: failed to activate() atgpib/tnt, aborting\n"); return -EAGAIN; } if (!pnp_port_valid(*dev, 0) || !pnp_irq_valid(*dev, 0)) { pnp_device_detach(*dev); - pr_err("tnt4882: invalid port or irq for atgpib/tnt, aborting\n"); - return -ENOMEM; + return -EINVAL; } return 0; } -static int ni_isa_attach_common(gpib_board_t *board, const gpib_board_config_t *config, +static int ni_isa_attach_common(struct gpib_board *board, const struct gpib_board_config *config, enum nec7210_chipset chipset) { struct tnt4882_priv *tnt_priv; @@ -1394,6 +1035,7 @@ static int ni_isa_attach_common(gpib_board_t *board, const gpib_board_config_t * int isr_flags = 0; u32 iobase; int irq; + int retval; board->status = 0; @@ -1409,7 +1051,6 @@ static int ni_isa_attach_common(gpib_board_t *board, const gpib_board_config_t * // look for plug-n-play board if (config->ibbase == 0) { struct pnp_dev *dev; - int retval; retval = ni_isapnp_find(&dev); if (retval < 0) @@ -1422,18 +1063,18 @@ static int ni_isa_attach_common(gpib_board_t *board, const gpib_board_config_t * irq = config->ibirq; } // allocate ioports - if (!request_region(iobase, atgpib_iosize, "atgpib")) { - pr_err("tnt4882: failed to allocate ioports\n"); - return -1; - } + if (!request_region(iobase, atgpib_iosize, "atgpib")) + return -EBUSY; + nec_priv->mmiobase = ioport_map(iobase, atgpib_iosize); if (!nec_priv->mmiobase) - return -1; + return -EBUSY; // get irq - if (request_irq(irq, tnt4882_interrupt, isr_flags, "atgpib", board)) { - pr_err("gpib: can't request IRQ %d\n", irq); - return -1; + retval = request_irq(irq, tnt4882_interrupt, isr_flags, "atgpib", board); + if (retval) { + dev_err(board->gpib_dev, "failed to request ISA irq %d\n", irq); + return retval; } tnt_priv->irq = irq; @@ -1442,22 +1083,22 @@ static int ni_isa_attach_common(gpib_board_t *board, const gpib_board_config_t * return 0; } -int ni_tnt_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ni_tnt_isa_attach(struct gpib_board *board, const struct gpib_board_config *config) { return ni_isa_attach_common(board, config, TNT4882); } -int ni_nat4882_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ni_nat4882_isa_attach(struct gpib_board *board, const struct gpib_board_config *config) { return ni_isa_attach_common(board, config, NAT4882); } -int ni_nec_isa_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ni_nec_isa_attach(struct gpib_board *board, const struct gpib_board_config *config) { return ni_isa_attach_common(board, config, NEC7210); } -void ni_isa_detach(gpib_board_t *board) +static void ni_isa_detach(struct gpib_board *board) { struct tnt4882_priv *tnt_priv = board->private_data; struct nec7210_priv *nec_priv; @@ -1483,6 +1124,230 @@ static int tnt4882_pci_probe(struct pci_dev *dev, const struct pci_device_id *id return 0; } +static struct gpib_interface ni_pci_interface = { + .name = "ni_pci", + .attach = ni_pci_attach, + .detach = ni_pci_detach, + .read = tnt4882_accel_read, + .write = tnt4882_accel_write, + .command = tnt4882_command, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = tnt4882_line_status, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response2 = tnt4882_serial_poll_response2, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +static struct gpib_interface ni_pci_accel_interface = { + .name = "ni_pci_accel", + .attach = ni_pci_attach, + .detach = ni_pci_detach, + .read = tnt4882_accel_read, + .write = tnt4882_accel_write, + .command = tnt4882_command, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = tnt4882_line_status, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response2 = tnt4882_serial_poll_response2, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +static struct gpib_interface ni_isa_interface = { + .name = "ni_isa", + .attach = ni_tnt_isa_attach, + .detach = ni_isa_detach, + .read = tnt4882_accel_read, + .write = tnt4882_accel_write, + .command = tnt4882_command, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = tnt4882_line_status, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response2 = tnt4882_serial_poll_response2, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +static struct gpib_interface ni_nat4882_isa_interface = { + .name = "ni_nat4882_isa", + .attach = ni_nat4882_isa_attach, + .detach = ni_isa_detach, + .read = tnt4882_read, + .write = tnt4882_write, + .command = tnt4882_command_unaccel, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = tnt4882_line_status, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response2 = tnt4882_serial_poll_response2, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +static struct gpib_interface ni_nec_isa_interface = { + .name = "ni_nec_isa", + .attach = ni_nec_isa_attach, + .detach = ni_isa_detach, + .read = tnt4882_read, + .write = tnt4882_write, + .command = tnt4882_command_unaccel, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = NULL, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response = tnt4882_serial_poll_response, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +static struct gpib_interface ni_isa_accel_interface = { + .name = "ni_isa_accel", + .attach = ni_tnt_isa_attach, + .detach = ni_isa_detach, + .read = tnt4882_accel_read, + .write = tnt4882_accel_write, + .command = tnt4882_command, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = tnt4882_line_status, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response2 = tnt4882_serial_poll_response2, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +static struct gpib_interface ni_nat4882_isa_accel_interface = { + .name = "ni_nat4882_isa_accel", + .attach = ni_nat4882_isa_attach, + .detach = ni_isa_detach, + .read = tnt4882_accel_read, + .write = tnt4882_accel_write, + .command = tnt4882_command_unaccel, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = tnt4882_line_status, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response2 = tnt4882_serial_poll_response2, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +static struct gpib_interface ni_nec_isa_accel_interface = { + .name = "ni_nec_isa_accel", + .attach = ni_nec_isa_attach, + .detach = ni_isa_detach, + .read = tnt4882_accel_read, + .write = tnt4882_accel_write, + .command = tnt4882_command_unaccel, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = NULL, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response = tnt4882_serial_poll_response, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + static const struct pci_device_id tnt4882_pci_table[] = { {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_GPIB)}, {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_GPIB_PLUS)}, @@ -1499,16 +1364,26 @@ static const struct pci_device_id tnt4882_pci_table[] = { MODULE_DEVICE_TABLE(pci, tnt4882_pci_table); static struct pci_driver tnt4882_pci_driver = { - .name = "tnt4882", + .name = DRV_NAME, .id_table = tnt4882_pci_table, .probe = &tnt4882_pci_probe }; +#if 0 +/* unused, will be needed when the driver is turned into a pnp_driver */ static const struct pnp_device_id tnt4882_pnp_table[] = { {.id = "NICC601"}, {.id = ""} }; MODULE_DEVICE_TABLE(pnp, tnt4882_pnp_table); +#endif + +#ifdef CONFIG_GPIB_PCMCIA +static struct gpib_interface ni_pcmcia_interface; +static struct gpib_interface ni_pcmcia_accel_interface; +static int __init init_ni_gpib_cs(void); +static void __exit exit_ni_gpib_cs(void); +#endif static int __init tnt4882_init_module(void) { @@ -1516,84 +1391,83 @@ static int __init tnt4882_init_module(void) result = pci_register_driver(&tnt4882_pci_driver); if (result) { - pr_err("tnt4882_gpib: pci_register_driver failed: error = %d\n", result); + pr_err("pci_register_driver failed: error = %d\n", result); return result; } result = gpib_register_driver(&ni_isa_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_isa; } result = gpib_register_driver(&ni_isa_accel_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_isa_accel; } result = gpib_register_driver(&ni_nat4882_isa_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_nat4882_isa; } result = gpib_register_driver(&ni_nat4882_isa_accel_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_nat4882_isa_accel; } result = gpib_register_driver(&ni_nec_isa_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_nec_isa; } result = gpib_register_driver(&ni_nec_isa_accel_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_nec_isa_accel; } result = gpib_register_driver(&ni_pci_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_pci; } result = gpib_register_driver(&ni_pci_accel_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_pci_accel; } -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA result = gpib_register_driver(&ni_pcmcia_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_pcmcia; } result = gpib_register_driver(&ni_pcmcia_accel_interface, THIS_MODULE); if (result) { - pr_err("tnt4882_gpib: gpib_register_driver failed: error = %d\n", result); + pr_err("gpib_register_driver failed: error = %d\n", result); goto err_pcmcia_accel; } result = init_ni_gpib_cs(); if (result) { - pr_err("tnt4882_gpib: pcmcia_register_driver failed: error = %d\n", result); + pr_err("pcmcia_register_driver failed: error = %d\n", result); goto err_pcmcia_driver; } #endif mite_init(); - mite_list_devices(); return 0; -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA err_pcmcia_driver: gpib_unregister_driver(&ni_pcmcia_accel_interface); err_pcmcia_accel: @@ -1631,7 +1505,7 @@ static void __exit tnt4882_exit_module(void) gpib_unregister_driver(&ni_nec_isa_accel_interface); gpib_unregister_driver(&ni_pci_interface); gpib_unregister_driver(&ni_pci_accel_interface); -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA gpib_unregister_driver(&ni_pcmcia_interface); gpib_unregister_driver(&ni_pcmcia_accel_interface); exit_ni_gpib_cs(); @@ -1642,7 +1516,7 @@ static void __exit tnt4882_exit_module(void) pci_unregister_driver(&tnt4882_pci_driver); } -#ifdef GPIB_PCMCIA +#ifdef CONFIG_GPIB_PCMCIA #include <linux/kernel.h> #include <linux/moduleparam.h> @@ -1655,29 +1529,9 @@ static void __exit tnt4882_exit_module(void) #include <pcmcia/cisreg.h> #include <pcmcia/ds.h> -/* - * All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If - * you do not define PCMCIA_DEBUG at all, all the debug code will be - * left out. If you compile with PCMCIA_DEBUG=0, the debug code will - * be present but disabled -- but it can then be enabled for specific - * modules at load time with a 'pc_debug=#' option to insmod. - */ -#define PCMCIA_DEBUG 1 -#ifdef PCMCIA_DEBUG -static int pc_debug = PCMCIA_DEBUG; -module_param(pc_debug, int, 0); -#define DEBUG(n, args...) \ - do {if (pc_debug > (n)) \ - pr_debug(args); } \ - while (0) -#else -#define DEBUG(args...) -#endif - static int ni_gpib_config(struct pcmcia_device *link); static void ni_gpib_release(struct pcmcia_device *link); -static int ni_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config); -static void ni_pcmcia_detach(gpib_board_t *board); +static void ni_pcmcia_detach(struct gpib_board *board); /* * A linked list of "instances" of the dummy device. Each actual @@ -1696,7 +1550,7 @@ static struct pcmcia_device *curr_dev; struct local_info_t { struct pcmcia_device *p_dev; - gpib_board_t *dev; + struct gpib_board *dev; int stop; struct bus_operations *bus; }; @@ -1710,9 +1564,7 @@ struct local_info_t { static int ni_gpib_probe(struct pcmcia_device *link) { struct local_info_t *info; - //struct gpib_board_t *dev; - - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev; /* Allocate space for private device-specific data */ info = kzalloc(sizeof(*info), GFP_KERNEL); @@ -1737,17 +1589,15 @@ static int ni_gpib_probe(struct pcmcia_device *link) } /* - * This deletes a driver "instance". The device is de-registered - * with Card Services. If it has been released, all local data - * structures are freed. Otherwise, the structures will be freed - * when the device is released. + * This deletes a driver "instance". The device is de-registered + * with Card Services. If it has been released, all local data + * structures are freed. Otherwise, the structures will be freed + * when the device is released. */ static void ni_gpib_remove(struct pcmcia_device *link) { struct local_info_t *info = link->priv; - //struct gpib_board_t *dev = info->dev; - - DEBUG(0, "%s(%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; if (info->dev) ni_pcmcia_detach(info->dev); @@ -1769,18 +1619,16 @@ static int ni_gpib_config_iteration(struct pcmcia_device *link, void *priv_data) } /* - * ni_gpib_config() is scheduled to run after a CARD_INSERTION event - * is received, to configure the PCMCIA socket, and to make the - * device available to the system. + * ni_gpib_config() is scheduled to run after a CARD_INSERTION event + * is received, to configure the PCMCIA socket, and to make the + * device available to the system. */ static int ni_gpib_config(struct pcmcia_device *link) { //struct local_info_t *info = link->priv; - //gpib_board_t *dev = info->dev; + //struct gpib_board *dev = info->dev; int last_ret; - DEBUG(0, "%s(0x%p)\n", __func__, link); - last_ret = pcmcia_loop_config(link, &ni_gpib_config_iteration, NULL); if (last_ret) { dev_warn(&link->dev, "no configuration found\n"); @@ -1803,18 +1651,16 @@ static int ni_gpib_config(struct pcmcia_device *link) */ static void ni_gpib_release(struct pcmcia_device *link) { - DEBUG(0, "%s(0x%p)\n", __func__, link); pcmcia_disable_device(link); } /* ni_gpib_release */ static int ni_gpib_suspend(struct pcmcia_device *link) { //struct local_info_t *info = link->priv; - //struct gpib_board_t *dev = info->dev; - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; if (link->open) - pr_err("Device still open ???\n"); + dev_warn(&link->dev, "Device still open\n"); //netif_device_detach(dev); return 0; @@ -1823,12 +1669,10 @@ static int ni_gpib_suspend(struct pcmcia_device *link) static int ni_gpib_resume(struct pcmcia_device *link) { //struct local_info_t *info = link->priv; - //struct gpib_board_t *dev = info->dev; - DEBUG(0, "%s(0x%p)\n", __func__, link); + //struct struct gpib_board *dev = info->dev; /*if (link->open) { * ni_gpib_probe(dev); / really? - * printk("Gpib resumed ???\n"); * //netif_device_attach(dev); *} */ @@ -1854,32 +1698,28 @@ static struct pcmcia_driver ni_gpib_cs_driver = { .resume = ni_gpib_resume, }; -int __init init_ni_gpib_cs(void) +static int __init init_ni_gpib_cs(void) { return pcmcia_register_driver(&ni_gpib_cs_driver); } -void __exit exit_ni_gpib_cs(void) +static void __exit exit_ni_gpib_cs(void) { - DEBUG(0, "ni_gpib_cs: unloading\n"); pcmcia_unregister_driver(&ni_gpib_cs_driver); } static const int pcmcia_gpib_iosize = 32; -int ni_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config) +static int ni_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct local_info_t *info; struct tnt4882_priv *tnt_priv; struct nec7210_priv *nec_priv; int isr_flags = IRQF_SHARED; + int retval; - DEBUG(0, "%s(0x%p)\n", __func__, board); - - if (!curr_dev) { - pr_err("gpib: no NI PCMCIA board found\n"); - return -1; - } + if (!curr_dev) + return -ENODEV; info = curr_dev->priv; info->dev = board; @@ -1888,6 +1728,7 @@ int ni_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config) if (tnt4882_allocate_private(board)) return -ENOMEM; + tnt_priv = board->private_data; nec_priv = &tnt_priv->nec7210_priv; nec_priv->type = TNT4882; @@ -1895,23 +1736,20 @@ int ni_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config) nec_priv->write_byte = nec7210_locking_ioport_write_byte; nec_priv->offset = atgpib_reg_offset; - DEBUG(0, "ioport1 window attributes: 0x%lx\n", curr_dev->resource[0]->flags); if (!request_region(curr_dev->resource[0]->start, resource_size(curr_dev->resource[0]), - "tnt4882")) { - pr_err("gpib: ioports starting at 0x%lx are already in use\n", - (unsigned long)curr_dev->resource[0]->start); - return -EIO; - } + DRV_NAME)) + return -ENOMEM; nec_priv->mmiobase = ioport_map(curr_dev->resource[0]->start, resource_size(curr_dev->resource[0])); if (!nec_priv->mmiobase) - return -1; + return -ENOMEM; // get irq - if (request_irq(curr_dev->irq, tnt4882_interrupt, isr_flags, "tnt4882", board)) { - pr_err("gpib: can't request IRQ %d\n", curr_dev->irq); - return -1; + retval = request_irq(curr_dev->irq, tnt4882_interrupt, isr_flags, DRV_NAME, board); + if (retval) { + dev_err(board->gpib_dev, "failed to obtain PCMCIA irq %d\n", curr_dev->irq); + return retval; } tnt_priv->irq = curr_dev->irq; @@ -1920,13 +1758,11 @@ int ni_pcmcia_attach(gpib_board_t *board, const gpib_board_config_t *config) return 0; } -void ni_pcmcia_detach(gpib_board_t *board) +static void ni_pcmcia_detach(struct gpib_board *board) { struct tnt4882_priv *tnt_priv = board->private_data; struct nec7210_priv *nec_priv; - DEBUG(0, "%s(0x%p)\n", __func__, board); - if (tnt_priv) { nec_priv = &tnt_priv->nec7210_priv; if (tnt_priv->irq) @@ -1941,7 +1777,63 @@ void ni_pcmcia_detach(gpib_board_t *board) tnt4882_free_private(board); } -#endif // GPIB_PCMCIA +static struct gpib_interface ni_pcmcia_interface = { + .name = "ni_pcmcia", + .attach = ni_pcmcia_attach, + .detach = ni_pcmcia_detach, + .read = tnt4882_accel_read, + .write = tnt4882_accel_write, + .command = tnt4882_command, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = tnt4882_line_status, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response = tnt4882_serial_poll_response, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +static struct gpib_interface ni_pcmcia_accel_interface = { + .name = "ni_pcmcia_accel", + .attach = ni_pcmcia_attach, + .detach = ni_pcmcia_detach, + .read = tnt4882_accel_read, + .write = tnt4882_accel_write, + .command = tnt4882_command, + .take_control = tnt4882_take_control, + .go_to_standby = tnt4882_go_to_standby, + .request_system_control = tnt4882_request_system_control, + .interface_clear = tnt4882_interface_clear, + .remote_enable = tnt4882_remote_enable, + .enable_eos = tnt4882_enable_eos, + .disable_eos = tnt4882_disable_eos, + .parallel_poll = tnt4882_parallel_poll, + .parallel_poll_configure = tnt4882_parallel_poll_configure, + .parallel_poll_response = tnt4882_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = tnt4882_line_status, + .update_status = tnt4882_update_status, + .primary_address = tnt4882_primary_address, + .secondary_address = tnt4882_secondary_address, + .serial_poll_response = tnt4882_serial_poll_response, + .serial_poll_status = tnt4882_serial_poll_status, + .t1_delay = tnt4882_t1_delay, + .return_to_local = tnt4882_return_to_local, +}; + +#endif // CONFIG_GPIB_PCMCIA module_init(tnt4882_init_module); module_exit(tnt4882_exit_module); diff --git a/drivers/staging/gpib/uapi/gpib.h b/drivers/staging/gpib/uapi/gpib.h new file mode 100644 index 000000000000..41500cee4029 --- /dev/null +++ b/drivers/staging/gpib/uapi/gpib.h @@ -0,0 +1,302 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/*************************************************************************** + * copyright : (C) 2002 by Frank Mori Hess + ***************************************************************************/ + +#ifndef _GPIB_H +#define _GPIB_H + +#define GPIB_MAX_NUM_BOARDS 16 +#define GPIB_MAX_NUM_DESCRIPTORS 0x1000 + +enum ibsta_bit_numbers { + DCAS_NUM = 0, + DTAS_NUM = 1, + LACS_NUM = 2, + TACS_NUM = 3, + ATN_NUM = 4, + CIC_NUM = 5, + REM_NUM = 6, + LOK_NUM = 7, + CMPL_NUM = 8, + EVENT_NUM = 9, + SPOLL_NUM = 10, + RQS_NUM = 11, + SRQI_NUM = 12, + END_NUM = 13, + TIMO_NUM = 14, + ERR_NUM = 15 +}; + +/* IBSTA status bits (returned by all functions) */ +enum ibsta_bits { + DCAS = (1 << DCAS_NUM), /* device clear state */ + DTAS = (1 << DTAS_NUM), /* device trigger state */ + LACS = (1 << LACS_NUM), /* GPIB interface is addressed as Listener */ + TACS = (1 << TACS_NUM), /* GPIB interface is addressed as Talker */ + ATN = (1 << ATN_NUM), /* Attention is asserted */ + CIC = (1 << CIC_NUM), /* GPIB interface is Controller-in-Charge */ + REM = (1 << REM_NUM), /* remote state */ + LOK = (1 << LOK_NUM), /* lockout state */ + CMPL = (1 << CMPL_NUM), /* I/O is complete */ + EVENT = (1 << EVENT_NUM), /* DCAS, DTAS, or IFC has occurred */ + SPOLL = (1 << SPOLL_NUM), /* board serial polled by busmaster */ + RQS = (1 << RQS_NUM), /* Device requesting service */ + SRQI = (1 << SRQI_NUM), /* SRQ is asserted */ + END = (1 << END_NUM), /* EOI or EOS encountered */ + TIMO = (1 << TIMO_NUM), /* Time limit on I/O or wait function exceeded */ + ERR = (1 << ERR_NUM), /* Function call terminated on error */ + + device_status_mask = ERR | TIMO | END | CMPL | RQS, + board_status_mask = ERR | TIMO | END | CMPL | SPOLL | + EVENT | LOK | REM | CIC | ATN | TACS | LACS | DTAS | DCAS | SRQI, +}; + +/* End-of-string (EOS) modes for use with ibeos */ + +enum eos_flags { + EOS_MASK = 0x1c00, + REOS = 0x0400, /* Terminate reads on EOS */ + XEOS = 0x800, /* assert EOI when EOS char is sent */ + BIN = 0x1000 /* Do 8-bit compare on EOS */ +}; + +/* GPIB Bus Control Lines bit vector */ +enum bus_control_line { + VALID_DAV = 0x01, + VALID_NDAC = 0x02, + VALID_NRFD = 0x04, + VALID_IFC = 0x08, + VALID_REN = 0x10, + VALID_SRQ = 0x20, + VALID_ATN = 0x40, + VALID_EOI = 0x80, + VALID_ALL = 0xff, + BUS_DAV = 0x0100, /* DAV line status bit */ + BUS_NDAC = 0x0200, /* NDAC line status bit */ + BUS_NRFD = 0x0400, /* NRFD line status bit */ + BUS_IFC = 0x0800, /* IFC line status bit */ + BUS_REN = 0x1000, /* REN line status bit */ + BUS_SRQ = 0x2000, /* SRQ line status bit */ + BUS_ATN = 0x4000, /* ATN line status bit */ + BUS_EOI = 0x8000 /* EOI line status bit */ +}; + +/* Possible GPIB command messages */ + +enum cmd_byte { + GTL = 0x1, /* go to local */ + SDC = 0x4, /* selected device clear */ + PP_CONFIG = 0x5, +#ifndef PPC + PPC = PP_CONFIG, /* parallel poll configure */ +#endif + GET = 0x8, /* group execute trigger */ + TCT = 0x9, /* take control */ + LLO = 0x11, /* local lockout */ + DCL = 0x14, /* device clear */ + PPU = 0x15, /* parallel poll unconfigure */ + SPE = 0x18, /* serial poll enable */ + SPD = 0x19, /* serial poll disable */ + CFE = 0x1f, /* configure enable */ + LAD = 0x20, /* value to be 'ored' in to obtain listen address */ + UNL = 0x3F, /* unlisten */ + TAD = 0x40, /* value to be 'ored' in to obtain talk address */ + UNT = 0x5F, /* untalk */ + SAD = 0x60, /* my secondary address (base) */ + PPE = 0x60, /* parallel poll enable (base) */ + PPD = 0x70 /* parallel poll disable */ +}; + +enum ppe_bits { + PPC_DISABLE = 0x10, + PPC_SENSE = 0x8, /* parallel poll sense bit */ + PPC_DIO_MASK = 0x7 +}; + +/* confine address to range 0 to 30. */ +static inline unsigned int gpib_address_restrict(unsigned int addr) +{ + addr &= 0x1f; + if (addr == 0x1f) + addr = 0; + return addr; +} + +static inline __u8 MLA(unsigned int addr) +{ + return gpib_address_restrict(addr) | LAD; +} + +static inline __u8 MTA(unsigned int addr) +{ + return gpib_address_restrict(addr) | TAD; +} + +static inline __u8 MSA(unsigned int addr) +{ + return (addr & 0x1f) | SAD; +} + +static inline __u8 PPE_byte(unsigned int dio_line, int sense) +{ + __u8 cmd; + + cmd = PPE; + if (sense) + cmd |= PPC_SENSE; + cmd |= (dio_line - 1) & 0x7; + return cmd; +} + +/* mask of bits that actually matter in a command byte */ +enum { + gpib_command_mask = 0x7f, +}; + +static inline int is_PPE(__u8 command) +{ + return (command & 0x70) == 0x60; +} + +static inline int is_PPD(__u8 command) +{ + return (command & 0x70) == 0x70; +} + +static inline int in_addressed_command_group(__u8 command) +{ + return (command & 0x70) == 0x0; +} + +static inline int in_universal_command_group(__u8 command) +{ + return (command & 0x70) == 0x10; +} + +static inline int in_listen_address_group(__u8 command) +{ + return (command & 0x60) == 0x20; +} + +static inline int in_talk_address_group(__u8 command) +{ + return (command & 0x60) == 0x40; +} + +static inline int in_primary_command_group(__u8 command) +{ + return in_addressed_command_group(command) || + in_universal_command_group(command) || + in_listen_address_group(command) || + in_talk_address_group(command); +} + +static inline int gpib_address_equal(unsigned int pad1, int sad1, unsigned int pad2, int sad2) +{ + if (pad1 == pad2) { + if (sad1 == sad2) + return 1; + if (sad1 < 0 && sad2 < 0) + return 1; + } + + return 0; +} + +enum ibask_option { + IBA_PAD = 0x1, + IBA_SAD = 0x2, + IBA_TMO = 0x3, + IBA_EOT = 0x4, + IBA_PPC = 0x5, /* board only */ + IBA_READ_DR = 0x6, /* device only */ + IBA_AUTOPOLL = 0x7, /* board only */ + IBA_CICPROT = 0x8, /* board only */ + IBA_IRQ = 0x9, /* board only */ + IBA_SC = 0xa, /* board only */ + IBA_SRE = 0xb, /* board only */ + IBA_EOS_RD = 0xc, + IBA_EOS_WRT = 0xd, + IBA_EOS_CMP = 0xe, + IBA_EOS_CHAR = 0xf, + IBA_PP2 = 0x10, /* board only */ + IBA_TIMING = 0x11, /* board only */ + IBA_DMA = 0x12, /* board only */ + IBA_READ_ADJUST = 0x13, + IBA_WRITE_ADJUST = 0x14, + IBA_EVENT_QUEUE = 0x15, /* board only */ + IBA_SPOLL_BIT = 0x16, /* board only */ + IBA_SEND_LLO = 0x17, /* board only */ + IBA_SPOLL_TIME = 0x18, /* device only */ + IBA_PPOLL_TIME = 0x19, /* board only */ + IBA_END_BIT_IS_NORMAL = 0x1a, + IBA_UN_ADDR = 0x1b, /* device only */ + IBA_HS_CABLE_LENGTH = 0x1f, /* board only */ + IBA_IST = 0x20, /* board only */ + IBA_RSV = 0x21, /* board only */ + IBA_BNA = 0x200, /* device only */ + /* linux-gpib extensions */ + IBA_7_BIT_EOS = 0x1000 /* board only. Returns 1 if board supports 7 bit eos compares*/ +}; + +enum ibconfig_option { + IBC_PAD = 0x1, + IBC_SAD = 0x2, + IBC_TMO = 0x3, + IBC_EOT = 0x4, + IBC_PPC = 0x5, /* board only */ + IBC_READDR = 0x6, /* device only */ + IBC_AUTOPOLL = 0x7, /* board only */ + IBC_CICPROT = 0x8, /* board only */ + IBC_IRQ = 0x9, /* board only */ + IBC_SC = 0xa, /* board only */ + IBC_SRE = 0xb, /* board only */ + IBC_EOS_RD = 0xc, + IBC_EOS_WRT = 0xd, + IBC_EOS_CMP = 0xe, + IBC_EOS_CHAR = 0xf, + IBC_PP2 = 0x10, /* board only */ + IBC_TIMING = 0x11, /* board only */ + IBC_DMA = 0x12, /* board only */ + IBC_READ_ADJUST = 0x13, + IBC_WRITE_ADJUST = 0x14, + IBC_EVENT_QUEUE = 0x15, /* board only */ + IBC_SPOLL_BIT = 0x16, /* board only */ + IBC_SEND_LLO = 0x17, /* board only */ + IBC_SPOLL_TIME = 0x18, /* device only */ + IBC_PPOLL_TIME = 0x19, /* board only */ + IBC_END_BIT_IS_NORMAL = 0x1a, + IBC_UN_ADDR = 0x1b, /* device only */ + IBC_HS_CABLE_LENGTH = 0x1f, /* board only */ + IBC_IST = 0x20, /* board only */ + IBC_RSV = 0x21, /* board only */ + IBC_BNA = 0x200 /* device only */ +}; + +enum t1_delays { + T1_DELAY_2000ns = 1, + T1_DELAY_500ns = 2, + T1_DELAY_350ns = 3 +}; + +enum { + request_service_bit = 0x40, +}; + +enum gpib_events { + EVENT_NONE = 0, + EVENT_DEV_TRG = 1, + EVENT_DEV_CLR = 2, + EVENT_IFC = 3 +}; + +enum gpib_stb { + IB_STB_RQS = 0x40, /* IEEE 488.1 & 2 */ + IB_STB_ESB = 0x20, /* IEEE 488.2 only */ + IB_STB_MAV = 0x10 /* IEEE 488.2 only */ +}; + +#endif /* _GPIB_H */ + diff --git a/drivers/staging/gpib/uapi/gpib_ioctl.h b/drivers/staging/gpib/uapi/gpib_ioctl.h index 6202865278ea..0fed5c0fa7f2 100644 --- a/drivers/staging/gpib/uapi/gpib_ioctl.h +++ b/drivers/staging/gpib/uapi/gpib_ioctl.h @@ -12,42 +12,42 @@ #define GPIB_CODE 160 -typedef struct { +struct gpib_board_type_ioctl { char name[100]; -} board_type_ioctl_t; +}; /* argument for read/write/command ioctls */ -typedef struct { - uint64_t buffer_ptr; +struct gpib_read_write_ioctl { + __u64 buffer_ptr; unsigned int requested_transfer_count; unsigned int completed_transfer_count; int end; /* end flag return for reads, end io suppression request for cmd*/ int handle; -} read_write_ioctl_t; +}; -typedef struct { +struct gpib_open_dev_ioctl { unsigned int handle; unsigned int pad; int sad; unsigned is_board : 1; -} open_dev_ioctl_t; +}; -typedef struct { +struct gpib_close_dev_ioctl { unsigned int handle; -} close_dev_ioctl_t; +}; -typedef struct { +struct gpib_serial_poll_ioctl { unsigned int pad; int sad; - uint8_t status_byte; -} serial_poll_ioctl_t; + __u8 status_byte; +}; -typedef struct { +struct gpib_eos_ioctl { int eos; int eos_flags; -} eos_ioctl_t; +}; -typedef struct { +struct gpib_wait_ioctl { int handle; int wait_mask; int clear_mask; @@ -56,21 +56,21 @@ typedef struct { int pad; int sad; unsigned int usec_timeout; -} wait_ioctl_t; +}; -typedef struct { - uint64_t init_data_ptr; +struct gpib_online_ioctl { + __u64 init_data_ptr; int init_data_length; int online; -} online_ioctl_t; +}; -typedef struct { +struct gpib_spoll_bytes_ioctl { unsigned int num_bytes; unsigned int pad; int sad; -} spoll_bytes_ioctl_t; +}; -typedef struct { +struct gpib_board_info_ioctl { unsigned int pad; int sad; int parallel_poll_configuration; @@ -79,91 +79,85 @@ typedef struct { unsigned int t1_delay; unsigned ist : 1; unsigned no_7_bit_eos : 1; -} board_info_ioctl_t; +}; -typedef struct { +struct gpib_select_pci_ioctl { int pci_bus; int pci_slot; -} select_pci_ioctl_t; +}; -typedef struct { - uint8_t config; +struct gpib_ppoll_config_ioctl { + __u8 config; unsigned set_ist : 1; unsigned clear_ist : 1; -} ppoll_config_ioctl_t; +}; -typedef struct { +struct gpib_pad_ioctl { unsigned int handle; unsigned int pad; -} pad_ioctl_t; +}; -typedef struct { +struct gpib_sad_ioctl { unsigned int handle; int sad; -} sad_ioctl_t; +}; // select a piece of hardware to attach by its sysfs device path -typedef struct { +struct gpib_select_device_path_ioctl { char device_path[0x1000]; -} select_device_path_ioctl_t; - -typedef short event_ioctl_t; -typedef int rsc_ioctl_t; -typedef unsigned int t1_delay_ioctl_t; -typedef short autospoll_ioctl_t; -typedef short local_ppoll_mode_ioctl_t; +}; // update status byte and request service -typedef struct { - uint8_t status_byte; +struct gpib_request_service2 { + __u8 status_byte; int new_reason_for_service; -} request_service2_t; +}; /* Standard functions. */ enum gpib_ioctl { - IBRD = _IOWR(GPIB_CODE, 100, read_write_ioctl_t), - IBWRT = _IOWR(GPIB_CODE, 101, read_write_ioctl_t), - IBCMD = _IOWR(GPIB_CODE, 102, read_write_ioctl_t), - IBOPENDEV = _IOWR(GPIB_CODE, 3, open_dev_ioctl_t), - IBCLOSEDEV = _IOW(GPIB_CODE, 4, close_dev_ioctl_t), - IBWAIT = _IOWR(GPIB_CODE, 5, wait_ioctl_t), - IBRPP = _IOWR(GPIB_CODE, 6, uint8_t), + IBRD = _IOWR(GPIB_CODE, 100, struct gpib_read_write_ioctl), + IBWRT = _IOWR(GPIB_CODE, 101, struct gpib_read_write_ioctl), + IBCMD = _IOWR(GPIB_CODE, 102, struct gpib_read_write_ioctl), + IBOPENDEV = _IOWR(GPIB_CODE, 3, struct gpib_open_dev_ioctl), + IBCLOSEDEV = _IOW(GPIB_CODE, 4, struct gpib_close_dev_ioctl), + IBWAIT = _IOWR(GPIB_CODE, 5, struct gpib_wait_ioctl), + IBRPP = _IOWR(GPIB_CODE, 6, __u8), IBSIC = _IOW(GPIB_CODE, 9, unsigned int), IBSRE = _IOW(GPIB_CODE, 10, int), IBGTS = _IO(GPIB_CODE, 11), IBCAC = _IOW(GPIB_CODE, 12, int), IBLINES = _IOR(GPIB_CODE, 14, short), - IBPAD = _IOW(GPIB_CODE, 15, pad_ioctl_t), - IBSAD = _IOW(GPIB_CODE, 16, sad_ioctl_t), + IBPAD = _IOW(GPIB_CODE, 15, struct gpib_pad_ioctl), + IBSAD = _IOW(GPIB_CODE, 16, struct gpib_sad_ioctl), IBTMO = _IOW(GPIB_CODE, 17, unsigned int), - IBRSP = _IOWR(GPIB_CODE, 18, serial_poll_ioctl_t), - IBEOS = _IOW(GPIB_CODE, 19, eos_ioctl_t), - IBRSV = _IOW(GPIB_CODE, 20, uint8_t), - CFCBASE = _IOW(GPIB_CODE, 21, uint64_t), + IBRSP = _IOWR(GPIB_CODE, 18, struct gpib_serial_poll_ioctl), + IBEOS = _IOW(GPIB_CODE, 19, struct gpib_eos_ioctl), + IBRSV = _IOW(GPIB_CODE, 20, __u8), + CFCBASE = _IOW(GPIB_CODE, 21, __u64), CFCIRQ = _IOW(GPIB_CODE, 22, unsigned int), CFCDMA = _IOW(GPIB_CODE, 23, unsigned int), - CFCBOARDTYPE = _IOW(GPIB_CODE, 24, board_type_ioctl_t), + CFCBOARDTYPE = _IOW(GPIB_CODE, 24, struct gpib_board_type_ioctl), IBMUTEX = _IOW(GPIB_CODE, 26, int), - IBSPOLL_BYTES = _IOWR(GPIB_CODE, 27, spoll_bytes_ioctl_t), - IBPPC = _IOW(GPIB_CODE, 28, ppoll_config_ioctl_t), - IBBOARD_INFO = _IOR(GPIB_CODE, 29, board_info_ioctl_t), + IBSPOLL_BYTES = _IOWR(GPIB_CODE, 27, struct gpib_spoll_bytes_ioctl), + IBPPC = _IOW(GPIB_CODE, 28, struct gpib_ppoll_config_ioctl), + IBBOARD_INFO = _IOR(GPIB_CODE, 29, struct gpib_board_info_ioctl), IBQUERY_BOARD_RSV = _IOR(GPIB_CODE, 31, int), - IBSELECT_PCI = _IOWR(GPIB_CODE, 32, select_pci_ioctl_t), - IBEVENT = _IOR(GPIB_CODE, 33, event_ioctl_t), - IBRSC = _IOW(GPIB_CODE, 34, rsc_ioctl_t), - IB_T1_DELAY = _IOW(GPIB_CODE, 35, t1_delay_ioctl_t), + IBSELECT_PCI = _IOWR(GPIB_CODE, 32, struct gpib_select_pci_ioctl), + IBEVENT = _IOR(GPIB_CODE, 33, short), + IBRSC = _IOW(GPIB_CODE, 34, int), + IB_T1_DELAY = _IOW(GPIB_CODE, 35, unsigned int), IBLOC = _IO(GPIB_CODE, 36), - IBAUTOSPOLL = _IOW(GPIB_CODE, 38, autospoll_ioctl_t), - IBONL = _IOW(GPIB_CODE, 39, online_ioctl_t), - IBPP2_SET = _IOW(GPIB_CODE, 40, local_ppoll_mode_ioctl_t), - IBPP2_GET = _IOR(GPIB_CODE, 41, local_ppoll_mode_ioctl_t), - IBSELECT_DEVICE_PATH = _IOW(GPIB_CODE, 43, select_device_path_ioctl_t), + IBAUTOSPOLL = _IOW(GPIB_CODE, 38, short), + IBONL = _IOW(GPIB_CODE, 39, struct gpib_online_ioctl), + IBPP2_SET = _IOW(GPIB_CODE, 40, short), + IBPP2_GET = _IOR(GPIB_CODE, 41, short), + IBSELECT_DEVICE_PATH = _IOW(GPIB_CODE, 43, struct gpib_select_device_path_ioctl), // 44 was IBSELECT_SERIAL_NUMBER - IBRSV2 = _IOW(GPIB_CODE, 45, request_service2_t) + IBRSV2 = _IOW(GPIB_CODE, 45, struct gpib_request_service2) }; #endif /* _GPIB_IOCTL_H */ diff --git a/drivers/staging/gpib/uapi/gpib_user.h b/drivers/staging/gpib/uapi/gpib_user.h deleted file mode 100644 index 0896a55a758f..000000000000 --- a/drivers/staging/gpib/uapi/gpib_user.h +++ /dev/null @@ -1,363 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ - -/*************************************************************************** - * copyright : (C) 2002 by Frank Mori Hess - ***************************************************************************/ - -#ifndef _GPIB_USER_H -#define _GPIB_USER_H - -#define GPIB_MAX_NUM_BOARDS 16 -#define GPIB_MAX_NUM_DESCRIPTORS 0x1000 - -enum ibsta_bit_numbers { - DCAS_NUM = 0, - DTAS_NUM = 1, - LACS_NUM = 2, - TACS_NUM = 3, - ATN_NUM = 4, - CIC_NUM = 5, - REM_NUM = 6, - LOK_NUM = 7, - CMPL_NUM = 8, - EVENT_NUM = 9, - SPOLL_NUM = 10, - RQS_NUM = 11, - SRQI_NUM = 12, - END_NUM = 13, - TIMO_NUM = 14, - ERR_NUM = 15 -}; - -/* IBSTA status bits (returned by all functions) */ -enum ibsta_bits { - DCAS = (1 << DCAS_NUM), /* device clear state */ - DTAS = (1 << DTAS_NUM), /* device trigger state */ - LACS = (1 << LACS_NUM), /* GPIB interface is addressed as Listener */ - TACS = (1 << TACS_NUM), /* GPIB interface is addressed as Talker */ - ATN = (1 << ATN_NUM), /* Attention is asserted */ - CIC = (1 << CIC_NUM), /* GPIB interface is Controller-in-Charge */ - REM = (1 << REM_NUM), /* remote state */ - LOK = (1 << LOK_NUM), /* lockout state */ - CMPL = (1 << CMPL_NUM), /* I/O is complete */ - EVENT = (1 << EVENT_NUM), /* DCAS, DTAS, or IFC has occurred */ - SPOLL = (1 << SPOLL_NUM), /* board serial polled by busmaster */ - RQS = (1 << RQS_NUM), /* Device requesting service */ - SRQI = (1 << SRQI_NUM), /* SRQ is asserted */ - END = (1 << END_NUM), /* EOI or EOS encountered */ - TIMO = (1 << TIMO_NUM), /* Time limit on I/O or wait function exceeded */ - ERR = (1 << ERR_NUM), /* Function call terminated on error */ - - device_status_mask = ERR | TIMO | END | CMPL | RQS, - board_status_mask = ERR | TIMO | END | CMPL | SPOLL | - EVENT | LOK | REM | CIC | ATN | TACS | LACS | DTAS | DCAS | SRQI, -}; - -/* IBERR error codes */ -enum iberr_code { - EDVR = 0, /* system error */ - ECIC = 1, /* not CIC */ - ENOL = 2, /* no listeners */ - EADR = 3, /* CIC and not addressed before I/O */ - EARG = 4, /* bad argument to function call */ - ESAC = 5, /* not SAC */ - EABO = 6, /* I/O operation was aborted */ - ENEB = 7, /* non-existent board (GPIB interface offline) */ - EDMA = 8, /* DMA hardware error detected */ - EOIP = 10, /* new I/O attempted with old I/O in progress */ - ECAP = 11, /* no capability for intended opeation */ - EFSO = 12, /* file system operation error */ - EBUS = 14, /* bus error */ - ESTB = 15, /* lost serial poll bytes */ - ESRQ = 16, /* SRQ stuck on */ - ETAB = 20 /* Table Overflow */ -}; - -/* Timeout values and meanings */ -enum gpib_timeout { - TNONE = 0, /* Infinite timeout (disabled) */ - T10us = 1, /* Timeout of 10 usec (ideal) */ - T30us = 2, /* Timeout of 30 usec (ideal) */ - T100us = 3, /* Timeout of 100 usec (ideal) */ - T300us = 4, /* Timeout of 300 usec (ideal) */ - T1ms = 5, /* Timeout of 1 msec (ideal) */ - T3ms = 6, /* Timeout of 3 msec (ideal) */ - T10ms = 7, /* Timeout of 10 msec (ideal) */ - T30ms = 8, /* Timeout of 30 msec (ideal) */ - T100ms = 9, /* Timeout of 100 msec (ideal) */ - T300ms = 10, /* Timeout of 300 msec (ideal) */ - T1s = 11, /* Timeout of 1 sec (ideal) */ - T3s = 12, /* Timeout of 3 sec (ideal) */ - T10s = 13, /* Timeout of 10 sec (ideal) */ - T30s = 14, /* Timeout of 30 sec (ideal) */ - T100s = 15, /* Timeout of 100 sec (ideal) */ - T300s = 16, /* Timeout of 300 sec (ideal) */ - T1000s = 17 /* Timeout of 1000 sec (maximum) */ -}; - -/* End-of-string (EOS) modes for use with ibeos */ - -enum eos_flags { - EOS_MASK = 0x1c00, - REOS = 0x0400, /* Terminate reads on EOS */ - XEOS = 0x800, /* assert EOI when EOS char is sent */ - BIN = 0x1000 /* Do 8-bit compare on EOS */ -}; - -/* GPIB Bus Control Lines bit vector */ -enum bus_control_line { - ValidDAV = 0x01, - ValidNDAC = 0x02, - ValidNRFD = 0x04, - ValidIFC = 0x08, - ValidREN = 0x10, - ValidSRQ = 0x20, - ValidATN = 0x40, - ValidEOI = 0x80, - ValidALL = 0xff, - BusDAV = 0x0100, /* DAV line status bit */ - BusNDAC = 0x0200, /* NDAC line status bit */ - BusNRFD = 0x0400, /* NRFD line status bit */ - BusIFC = 0x0800, /* IFC line status bit */ - BusREN = 0x1000, /* REN line status bit */ - BusSRQ = 0x2000, /* SRQ line status bit */ - BusATN = 0x4000, /* ATN line status bit */ - BusEOI = 0x8000 /* EOI line status bit */ -}; - -enum old_bus_control_line { - BUS_DAV = 0x0100, /* DAV line status bit */ - BUS_NDAC = 0x0200, /* NDAC line status bit */ - BUS_NRFD = 0x0400, /* NRFD line status bit */ - BUS_IFC = 0x0800, /* IFC line status bit */ - BUS_REN = 0x1000, /* REN line status bit */ - BUS_SRQ = 0x2000, /* SRQ line status bit */ - BUS_ATN = 0x4000, /* ATN line status bit */ - BUS_EOI = 0x8000 /* EOI line status bit */ -}; - -/* Possible GPIB command messages */ - -enum cmd_byte { - GTL = 0x1, /* go to local */ - SDC = 0x4, /* selected device clear */ - PPConfig = 0x5, -#ifndef PPC - PPC = PPConfig, /* parallel poll configure */ -#endif - GET = 0x8, /* group execute trigger */ - TCT = 0x9, /* take control */ - LLO = 0x11, /* local lockout */ - DCL = 0x14, /* device clear */ - PPU = 0x15, /* parallel poll unconfigure */ - SPE = 0x18, /* serial poll enable */ - SPD = 0x19, /* serial poll disable */ - CFE = 0x1f, /* configure enable */ - LAD = 0x20, /* value to be 'ored' in to obtain listen address */ - UNL = 0x3F, /* unlisten */ - TAD = 0x40, /* value to be 'ored' in to obtain talk address */ - UNT = 0x5F, /* untalk */ - SAD = 0x60, /* my secondary address (base) */ - PPE = 0x60, /* parallel poll enable (base) */ - PPD = 0x70 /* parallel poll disable */ -}; - -enum ppe_bits { - PPC_DISABLE = 0x10, - PPC_SENSE = 0x8, /* parallel poll sense bit */ - PPC_DIO_MASK = 0x7 -}; - -/* confine address to range 0 to 30. */ -static inline unsigned int gpib_address_restrict(unsigned int addr) -{ - addr &= 0x1f; - if (addr == 0x1f) - addr = 0; - return addr; -} - -static inline uint8_t MLA(unsigned int addr) -{ - return gpib_address_restrict(addr) | LAD; -} - -static inline uint8_t MTA(unsigned int addr) -{ - return gpib_address_restrict(addr) | TAD; -} - -static inline uint8_t MSA(unsigned int addr) -{ - return gpib_address_restrict(addr) | SAD; -} - -static inline uint8_t PPE_byte(unsigned int dio_line, int sense) -{ - uint8_t cmd; - - cmd = PPE; - if (sense) - cmd |= PPC_SENSE; - cmd |= (dio_line - 1) & 0x7; - return cmd; -} - -static inline uint8_t CFGn(unsigned int meters) -{ - return 0x6 | (meters & 0xf); -} - -/* mask of bits that actually matter in a command byte */ -enum { - gpib_command_mask = 0x7f, -}; - -static inline int is_PPE(uint8_t command) -{ - return (command & 0x70) == 0x60; -} - -static inline int is_PPD(uint8_t command) -{ - return (command & 0x70) == 0x70; -} - -static inline int in_addressed_command_group(uint8_t command) -{ - return (command & 0x70) == 0x0; -} - -static inline int in_universal_command_group(uint8_t command) -{ - return (command & 0x70) == 0x10; -} - -static inline int in_listen_address_group(uint8_t command) -{ - return (command & 0x60) == 0x20; -} - -static inline int in_talk_address_group(uint8_t command) -{ - return (command & 0x60) == 0x40; -} - -static inline int in_primary_command_group(uint8_t command) -{ - return in_addressed_command_group(command) || - in_universal_command_group(command) || - in_listen_address_group(command) || - in_talk_address_group(command); -} - -static inline int gpib_address_equal(unsigned int pad1, int sad1, unsigned int pad2, int sad2) -{ - if (pad1 == pad2) { - if (sad1 == sad2) - return 1; - if (sad1 < 0 && sad2 < 0) - return 1; - } - - return 0; -} - -enum ibask_option { - IbaPAD = 0x1, - IbaSAD = 0x2, - IbaTMO = 0x3, - IbaEOT = 0x4, - IbaPPC = 0x5, /* board only */ - IbaREADDR = 0x6, /* device only */ - IbaAUTOPOLL = 0x7, /* board only */ - IbaCICPROT = 0x8, /* board only */ - IbaIRQ = 0x9, /* board only */ - IbaSC = 0xa, /* board only */ - IbaSRE = 0xb, /* board only */ - IbaEOSrd = 0xc, - IbaEOSwrt = 0xd, - IbaEOScmp = 0xe, - IbaEOSchar = 0xf, - IbaPP2 = 0x10, /* board only */ - IbaTIMING = 0x11, /* board only */ - IbaDMA = 0x12, /* board only */ - IbaReadAdjust = 0x13, - IbaWriteAdjust = 0x14, - IbaEventQueue = 0x15, /* board only */ - IbaSPollBit = 0x16, /* board only */ - IbaSpollBit = 0x16, /* board only */ - IbaSendLLO = 0x17, /* board only */ - IbaSPollTime = 0x18, /* device only */ - IbaPPollTime = 0x19, /* board only */ - IbaEndBitIsNormal = 0x1a, - IbaUnAddr = 0x1b, /* device only */ - IbaHSCableLength = 0x1f, /* board only */ - IbaIst = 0x20, /* board only */ - IbaRsv = 0x21, /* board only */ - IbaBNA = 0x200, /* device only */ - /* linux-gpib extensions */ - Iba7BitEOS = 0x1000 /* board only. Returns 1 if board supports 7 bit eos compares*/ -}; - -enum ibconfig_option { - IbcPAD = 0x1, - IbcSAD = 0x2, - IbcTMO = 0x3, - IbcEOT = 0x4, - IbcPPC = 0x5, /* board only */ - IbcREADDR = 0x6, /* device only */ - IbcAUTOPOLL = 0x7, /* board only */ - IbcCICPROT = 0x8, /* board only */ - IbcIRQ = 0x9, /* board only */ - IbcSC = 0xa, /* board only */ - IbcSRE = 0xb, /* board only */ - IbcEOSrd = 0xc, - IbcEOSwrt = 0xd, - IbcEOScmp = 0xe, - IbcEOSchar = 0xf, - IbcPP2 = 0x10, /* board only */ - IbcTIMING = 0x11, /* board only */ - IbcDMA = 0x12, /* board only */ - IbcReadAdjust = 0x13, - IbcWriteAdjust = 0x14, - IbcEventQueue = 0x15, /* board only */ - IbcSPollBit = 0x16, /* board only */ - IbcSpollBit = 0x16, /* board only */ - IbcSendLLO = 0x17, /* board only */ - IbcSPollTime = 0x18, /* device only */ - IbcPPollTime = 0x19, /* board only */ - IbcEndBitIsNormal = 0x1a, - IbcUnAddr = 0x1b, /* device only */ - IbcHSCableLength = 0x1f, /* board only */ - IbcIst = 0x20, /* board only */ - IbcRsv = 0x21, /* board only */ - IbcBNA = 0x200 /* device only */ -}; - -enum t1_delays { - T1_DELAY_2000ns = 1, - T1_DELAY_500ns = 2, - T1_DELAY_350ns = 3 -}; - -enum { - request_service_bit = 0x40, -}; - -enum gpib_events { - EventNone = 0, - EventDevTrg = 1, - EventDevClr = 2, - EventIFC = 3 -}; - -enum gpib_stb { - IbStbRQS = 0x40, /* IEEE 488.1 & 2 */ - IbStbESB = 0x20, /* IEEE 488.2 only */ - IbStbMAV = 0x10 /* IEEE 488.2 only */ -}; - -#endif /* _GPIB_USER_H */ - -/* Check for errors */ |