Staging driver updates for 6.16-rc1

Here is the "big" set of staging driver changes for 6.16-rc1.  Included
 in here are:
   - gpib driver cleanups and updates.  This subsystem is _almost_ ready
     to be merged into the main portion of the kernel tree.  Hopefully
     should happen in the next kernel merge cycle if all goes well.
   - sm750fb driver cleanups
   - rtl8723bs driver cleanups
   - other small driver cleanups for coding style issues
 
 All of these have been in for over 2 weeks with no reported issues
 
 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -----BEGIN PGP SIGNATURE-----
 
 iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCaEKofA8cZ3JlZ0Brcm9h
 aC5jb20ACgkQMUfUDdst+ykn5ACg1H4WXygJwNZdW6rSQ3hafugGu8IAn2oYjAlS
 CZG3iqSQ8q8l1Dl3peMj
 =J8mr
 -----END PGP SIGNATURE-----

Merge tag 'staging-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging

Pull staging driver updates from Greg KH:
 "Here is the "big" set of staging driver changes for 6.16-rc1. Included
  in here are:

   - gpib driver cleanups and updates.

     This subsystem is _almost_ ready to be merged into the main portion
     of the kernel tree. Hopefully should happen in the next kernel
     merge cycle if all goes well.

   - sm750fb driver cleanups

   - rtl8723bs driver cleanups

   - other small driver cleanups for coding style issues

  All of these have been in for over 2 weeks with no reported issues"

* tag 'staging-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (203 commits)
  staging: rtl8723bs: remove unnecessary braces for single statement blocks
  staging: rtl8723bs: Removed multiple blank lines of rtw_pwrctrl.c
  staging: sm750fb: rename `hw_sm750le_setBLANK`
  staging: sm750fb: rename `hw_sm750_setBLANK`
  staging: sm750fb: rename `hw_sm750_setColReg`
  staging: sm750fb: rename `hw_sm750_crtc_setMode`
  staging: sm750fb: rename `hw_sm750_crtc_checkMode`
  staging: sm750fb: rename `hw_sm750_output_setMode`
  staging: sm750fb: rename `hw_sm750le_deWait`
  staging: sm750fb: rename `hw_sm750_deWait`
  staging: sm750fb: rename `hw_sm750_initAccel`
  staging: gpib: switch to kmalloc(sizeof(*status))
  staging: gpib: Fix secondary address restriction
  staging: gpib: Fix uapi include header guard name
  staging: gpib: Avoid unused variable warning
  staging: gpib: Declare driver entry points static
  staging: gpib: Fix PCMCIA config identifier
  staging: gpib: Avoid unused variable warnings
  staging: gpib: Fix lpvo request_system_control
  staging: sm750fb: rename sm750_hw_cursor_setData2
  ...
This commit is contained in:
Linus Torvalds 2025-06-06 11:23:37 -07:00
commit a100922a38
76 changed files with 1592 additions and 2612 deletions

View file

@ -9147,9 +9147,10 @@ F: lib/fault-inject.c
F: tools/testing/fault-injection/
FBTFT Framebuffer drivers
M: Andy Shevchenko <andy@kernel.org>
L: dri-devel@lists.freedesktop.org
L: linux-fbdev@vger.kernel.org
S: Orphan
S: Odd fixes
F: drivers/staging/fbtft/
FC0011 TUNER DRIVER

View file

@ -8,160 +8,136 @@ menuconfig FB_TFT
select FB_BACKLIGHT
select FB_SYSMEM_HELPERS_DEFERRED
if FB_TFT
config FB_TFT_AGM1264K_FL
tristate "FB driver for the AGM1264K-FL LCD display"
depends on FB_TFT
help
Framebuffer support for the AGM1264K-FL LCD display (two Samsung KS0108 compatible chips)
config FB_TFT_BD663474
tristate "FB driver for the BD663474 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for BD663474
config FB_TFT_HX8340BN
tristate "FB driver for the HX8340BN LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for HX8340BN
config FB_TFT_HX8347D
tristate "FB driver for the HX8347D LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for HX8347D
config FB_TFT_HX8353D
tristate "FB driver for the HX8353D LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for HX8353D
config FB_TFT_HX8357D
tristate "FB driver for the HX8357D LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for HX8357D
config FB_TFT_ILI9163
tristate "FB driver for the ILI9163 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for ILI9163
config FB_TFT_ILI9320
tristate "FB driver for the ILI9320 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for ILI9320
config FB_TFT_ILI9325
tristate "FB driver for the ILI9325 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for ILI9325
config FB_TFT_ILI9340
tristate "FB driver for the ILI9340 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for ILI9340
config FB_TFT_ILI9341
tristate "FB driver for the ILI9341 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for ILI9341
config FB_TFT_ILI9481
tristate "FB driver for the ILI9481 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for ILI9481
config FB_TFT_ILI9486
tristate "FB driver for the ILI9486 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for ILI9486
config FB_TFT_PCD8544
tristate "FB driver for the PCD8544 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for PCD8544
config FB_TFT_RA8875
tristate "FB driver for the RA8875 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for RA8875
config FB_TFT_S6D02A1
tristate "FB driver for the S6D02A1 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for S6D02A1
config FB_TFT_S6D1121
tristate "FB driver for the S6D1211 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for S6D1121
config FB_TFT_SEPS525
tristate "FB driver for the SEPS525 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for SEPS525
Say Y if you have such a display that utilizes this controller.
config FB_TFT_SH1106
tristate "FB driver for the SH1106 OLED Controller"
depends on FB_TFT
help
Framebuffer support for SH1106
config FB_TFT_SSD1289
tristate "FB driver for the SSD1289 LCD Controller"
depends on FB_TFT
help
Framebuffer support for SSD1289
config FB_TFT_SSD1305
tristate "FB driver for the SSD1305 OLED Controller"
depends on FB_TFT
help
Framebuffer support for SSD1305
config FB_TFT_SSD1306
tristate "FB driver for the SSD1306 OLED Controller"
depends on FB_TFT
help
Framebuffer support for SSD1306
config FB_TFT_SSD1331
tristate "FB driver for the SSD1331 LCD Controller"
depends on FB_TFT
help
Framebuffer support for SSD1331
config FB_TFT_SSD1351
tristate "FB driver for the SSD1351 LCD Controller"
depends on FB_TFT
help
Framebuffer support for SSD1351
config FB_TFT_ST7735R
tristate "FB driver for the ST7735R LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for ST7735R
config FB_TFT_ST7789V
tristate "FB driver for the ST7789V LCD Controller"
depends on FB_TFT
help
This enables generic framebuffer support for the Sitronix ST7789V
display controller. The controller is intended for small color
@ -171,30 +147,27 @@ config FB_TFT_ST7789V
config FB_TFT_TINYLCD
tristate "FB driver for tinylcd.com display"
depends on FB_TFT
help
Custom Framebuffer support for tinylcd.com display
config FB_TFT_TLS8204
tristate "FB driver for the TLS8204 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for TLS8204
config FB_TFT_UC1611
tristate "FB driver for the UC1611 LCD controller"
depends on FB_TFT
help
Generic Framebuffer support for UC1611
config FB_TFT_UC1701
tristate "FB driver for the UC1701 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for UC1701
config FB_TFT_UPD161704
tristate "FB driver for the uPD161704 LCD Controller"
depends on FB_TFT
help
Generic Framebuffer support for uPD161704
endif

View file

@ -27,10 +27,10 @@ MODULE_DESCRIPTION("GPIB driver for Agilent 82350b");
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, uint8_t *buffer,
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, uint8_t *buffer,
static int agilent_82350b_accel_read(struct gpib_board *board, u8 *buffer,
size_t length, int *end, size_t *bytes_read)
{
@ -39,7 +39,7 @@ static int agilent_82350b_accel_read(struct gpib_board *board, uint8_t *buffer,
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);
@ -50,9 +50,9 @@ static int agilent_82350b_accel_read(struct gpib_board *board, uint8_t *buffer,
*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;
@ -67,7 +67,8 @@ static int agilent_82350b_accel_read(struct gpib_board *board, uint8_t *buffer,
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;
@ -111,17 +112,18 @@ static int agilent_82350b_accel_read(struct gpib_board *board, uint8_t *buffer,
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)
@ -145,7 +147,7 @@ static int translate_wait_return_value(struct gpib_board *board, int retval)
return 0;
}
static int agilent_82350b_accel_write(struct gpib_board *board, uint8_t *buffer,
static int agilent_82350b_accel_write(struct gpib_board *board, u8 *buffer,
size_t length, int send_eoi,
size_t *bytes_written)
{
@ -169,7 +171,7 @@ static int agilent_82350b_accel_write(struct gpib_board *board, uint8_t *buffer,
event_status = read_and_clear_event_status(board);
#ifdef EXPERIMENTAL
// wait for previous BO to complete if any
/* 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) ||
@ -192,7 +194,7 @@ static int agilent_82350b_accel_write(struct gpib_board *board, uint8_t *buffer,
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);
@ -262,7 +264,7 @@ static irqreturn_t agilent_82350b_interrupt(int irq, void *arg)
tms9914_interrupt_have_status(board, &a_priv->tms9914_priv, 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);
@ -292,12 +294,12 @@ static void set_transfer_counter(struct agilent_82350b_priv *a_priv, int 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
static int agilent_82350b_read(struct gpib_board *board, uint8_t *buffer,
/* 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;
@ -305,7 +307,7 @@ static int agilent_82350b_read(struct gpib_board *board, uint8_t *buffer,
return tms9914_read(board, &priv->tms9914_priv, buffer, length, end, bytes_read);
}
static int agilent_82350b_write(struct gpib_board *board, uint8_t *buffer,
static int agilent_82350b_write(struct gpib_board *board, u8 *buffer,
size_t length, int send_eoi, size_t *bytes_written)
{
@ -314,7 +316,7 @@ static int agilent_82350b_write(struct gpib_board *board, uint8_t *buffer,
return tms9914_write(board, &priv->tms9914_priv, buffer, length, send_eoi, bytes_written);
}
static int agilent_82350b_command(struct gpib_board *board, uint8_t *buffer,
static int agilent_82350b_command(struct gpib_board *board, u8 *buffer,
size_t length, size_t *bytes_written)
{
@ -339,9 +341,7 @@ static int agilent_82350b_go_to_standby(struct gpib_board *board)
return tms9914_go_to_standby(board, &priv->tms9914_priv);
}
static void agilent_82350b_request_system_control(struct gpib_board *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;
@ -355,7 +355,7 @@ static void agilent_82350b_request_system_control(struct gpib_board *board,
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);
}
static void agilent_82350b_interface_clear(struct gpib_board *board, int assert)
@ -373,7 +373,7 @@ static void agilent_82350b_remote_enable(struct gpib_board *board, int enable)
tms9914_remote_enable(board, &priv->tms9914_priv, enable);
}
static int agilent_82350b_enable_eos(struct gpib_board *board, uint8_t eos_byte,
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;
@ -412,7 +412,7 @@ static int agilent_82350b_secondary_address(struct gpib_board *board,
return tms9914_secondary_address(board, &priv->tms9914_priv, address, enable);
}
static int agilent_82350b_parallel_poll(struct gpib_board *board, uint8_t *result)
static int agilent_82350b_parallel_poll(struct gpib_board *board, u8 *result)
{
struct agilent_82350b_priv *priv = board->private_data;
@ -420,7 +420,7 @@ static int agilent_82350b_parallel_poll(struct gpib_board *board, uint8_t *resul
}
static void agilent_82350b_parallel_poll_configure(struct gpib_board *board,
uint8_t config)
u8 config)
{
struct agilent_82350b_priv *priv = board->private_data;
@ -434,14 +434,14 @@ static void agilent_82350b_parallel_poll_response(struct gpib_board *board, int
tms9914_parallel_poll_response(board, &priv->tms9914_priv, ist);
}
static void agilent_82350b_serial_poll_response(struct gpib_board *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);
}
static uint8_t agilent_82350b_serial_poll_status(struct gpib_board *board)
static u8 agilent_82350b_serial_poll_status(struct gpib_board *board)
{
struct agilent_82350b_priv *priv = board->private_data;
@ -492,7 +492,7 @@ static void agilent_82350b_free_private(struct gpib_board *board)
}
static int init_82350a_hardware(struct gpib_board *board,
const gpib_board_config_t *config)
const struct gpib_board_config *config)
{
struct agilent_82350b_priv *a_priv = board->private_data;
static const unsigned int firmware_length = 5302;
@ -511,18 +511,18 @@ static int init_82350a_hardware(struct gpib_board *board,
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, "the 82350A board requires firmware after powering on.\n");
return -EIO;
}
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);
@ -563,7 +563,7 @@ 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) {
@ -587,7 +587,7 @@ static int test_sram(struct gpib_board *board)
}
static int agilent_82350b_generic_attach(struct gpib_board *board,
const gpib_board_config_t *config,
const struct gpib_board_config *config,
int use_fifos)
{
@ -606,7 +606,7 @@ static int agilent_82350b_generic_attach(struct gpib_board *board,
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) {
@ -702,7 +702,7 @@ static int agilent_82350b_generic_attach(struct gpib_board *board,
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);
@ -713,7 +713,7 @@ static int agilent_82350b_generic_attach(struct gpib_board *board,
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 {
@ -730,13 +730,13 @@ static int agilent_82350b_generic_attach(struct gpib_board *board,
}
static int agilent_82350b_unaccel_attach(struct gpib_board *board,
const gpib_board_config_t *config)
const struct gpib_board_config *config)
{
return agilent_82350b_generic_attach(board, config, 0);
}
static int agilent_82350b_accel_attach(struct gpib_board *board,
const gpib_board_config_t *config)
const struct gpib_board_config *config)
{
return agilent_82350b_generic_attach(board, config, 1);
}
@ -747,7 +747,7 @@ static void agilent_82350b_detach(struct gpib_board *board)
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;
@ -773,7 +773,7 @@ static void agilent_82350b_detach(struct gpib_board *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,
@ -790,7 +790,7 @@ 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,
@ -801,7 +801,7 @@ static gpib_interface_t agilent_82350b_unaccel_interface = {
.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,
@ -818,7 +818,7 @@ 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,

View file

@ -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,12 +57,12 @@ struct agilent_82350b_priv {
bool using_fifos;
};
//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,
@ -76,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,
@ -89,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,
@ -115,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
@ -135,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

View file

@ -26,7 +26,7 @@ static struct usb_interface *agilent_82357a_driver_interfaces[MAX_NUM_82357A_INT
static DEFINE_MUTEX(agilent_82357a_hotplug_lock); // protect board insertion and removal
static unsigned int agilent_82357a_update_status(struct gpib_board *board,
unsigned int clear_mask);
unsigned int clear_mask);
static int agilent_82357a_take_control_internal(struct gpib_board *board, int synchronous);
@ -34,7 +34,7 @@ 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)
@ -43,7 +43,7 @@ static void agilent_82357a_timeout_handler(struct timer_list *t)
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,
@ -74,7 +74,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);
@ -89,7 +89,7 @@ static int agilent_82357a_send_bulk_msg(struct agilent_82357a_priv *a_priv, void
goto cleanup;
}
mutex_unlock(&a_priv->bulk_alloc_lock);
if (down_interruptible(&context->complete)) {
if (wait_for_completion_interruptible(&context->complete)) {
retval = -ERESTARTSYS;
goto cleanup;
}
@ -142,7 +142,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);
@ -157,7 +157,7 @@ static int agilent_82357a_receive_bulk_msg(struct agilent_82357a_priv *a_priv, v
goto cleanup;
}
mutex_unlock(&a_priv->bulk_alloc_lock);
if (down_interruptible(&context->complete)) {
if (wait_for_completion_interruptible(&context->complete)) {
retval = -ERESTARTSYS;
goto cleanup;
}
@ -420,10 +420,10 @@ cleanup:
}
// interface functions
int agilent_82357a_command(struct gpib_board *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(struct gpib_board *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;
@ -524,9 +524,10 @@ static int agilent_82357a_read(struct gpib_board *board, uint8_t *buffer, size_t
}
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,7 +536,7 @@ static int agilent_82357a_read(struct gpib_board *board, uint8_t *buffer, size_t
}
static ssize_t agilent_82357a_generic_write(struct gpib_board *board,
uint8_t *buffer, size_t length,
u8 *buffer, size_t length,
int send_commands, int send_eoi,
size_t *bytes_written)
{
@ -675,13 +676,13 @@ static ssize_t agilent_82357a_generic_write(struct gpib_board *board,
return 0;
}
static int agilent_82357a_write(struct gpib_board *board, uint8_t *buffer,
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(struct gpib_board *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);
@ -715,9 +716,10 @@ static int agilent_82357a_take_control(struct gpib_board *board, int synchronous
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
/*
* 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;
@ -754,9 +756,7 @@ static int agilent_82357a_go_to_standby(struct gpib_board *board)
return 0;
}
//FIXME should change prototype to return int
static void agilent_82357a_request_system_control(struct gpib_board *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;
@ -765,7 +765,7 @@ static void agilent_82357a_request_system_control(struct gpib_board *board,
int i = 0;
if (!a_priv->bus_interface)
return; // -ENODEV;
return -ENODEV;
usb_dev = interface_to_usbdev(a_priv->bus_interface);
/* 82357B needs bit to be set in 9914 AUXCR register */
@ -774,9 +774,7 @@ static void agilent_82357a_request_system_control(struct gpib_board *board,
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;
@ -785,7 +783,7 @@ static void agilent_82357a_request_system_control(struct gpib_board *board,
retval = agilent_82357a_write_registers(a_priv, writes, i);
if (retval)
dev_err(&usb_dev->dev, "write_registers() returned error\n");
return;// retval;
return retval;
}
static void agilent_82357a_interface_clear(struct gpib_board *board, int assert)
@ -832,7 +830,7 @@ static void agilent_82357a_remote_enable(struct gpib_board *board, int enable)
return;// 0;
}
static int agilent_82357a_enable_eos(struct gpib_board *board, uint8_t eos_byte,
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;
@ -946,7 +944,7 @@ static int agilent_82357a_secondary_address(struct gpib_board *board,
return 0;
}
static int agilent_82357a_parallel_poll(struct gpib_board *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;
@ -988,7 +986,7 @@ static int agilent_82357a_parallel_poll(struct gpib_board *board, uint8_t *resul
return 0;
}
static void agilent_82357a_parallel_poll_configure(struct gpib_board *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;
@ -1000,13 +998,13 @@ static void agilent_82357a_parallel_poll_response(struct gpib_board *board, int
return;// 0;
}
static void agilent_82357a_serial_poll_response(struct gpib_board *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(struct gpib_board *board)
static u8 agilent_82357a_serial_poll_status(struct gpib_board *board)
{
//board can only be system controller
return 0;
@ -1292,7 +1290,7 @@ static int agilent_82357a_init(struct gpib_board *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);
@ -1305,7 +1303,7 @@ static inline int agilent_82357a_device_match(struct usb_interface *interface,
return 1;
}
static int agilent_82357a_attach(struct gpib_board *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;
@ -1432,7 +1430,7 @@ static void agilent_82357a_detach(struct gpib_board *board)
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,
@ -1591,7 +1589,7 @@ static int agilent_82357a_driver_resume(struct usb_interface *interface)
{
struct usb_device *usb_dev = interface_to_usbdev(interface);
struct gpib_board *board;
int i, retval;
int i, retval = 0;
mutex_lock(&agilent_82357a_hotplug_lock);
@ -1602,8 +1600,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;
@ -1626,7 +1626,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);
@ -1644,7 +1644,7 @@ static int agilent_82357a_driver_resume(struct usb_interface *interface)
resume_exit:
mutex_unlock(&agilent_82357a_hotplug_lock);
return 0;
return retval;
}
static struct usb_driver agilent_82357a_bus_driver = {

View file

@ -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;
};

View file

@ -27,7 +27,7 @@
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("GPIB driver Measurement Computing boards using cb7210.2 and cbi488.2");
static int cb7210_read(struct gpib_board *board, uint8_t *buffer, size_t length,
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)
@ -76,7 +76,7 @@ static inline void input_fifo_enable(struct gpib_board *board, int enable)
spin_unlock_irqrestore(&board->spinlock, flags);
}
static int fifo_read(struct gpib_board *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;
@ -170,7 +170,7 @@ static int fifo_read(struct gpib_board *board, struct cb7210_priv *cb_priv, uint
return retval;
}
static int cb7210_accel_read(struct gpib_board *board, uint8_t *buffer,
static int cb7210_accel_read(struct gpib_board *board, u8 *buffer,
size_t length, int *end, size_t *bytes_read)
{
ssize_t retval;
@ -264,7 +264,7 @@ static inline void output_fifo_enable(struct gpib_board *board, int enable)
spin_unlock_irqrestore(&board->spinlock, flags);
}
static int fifo_write(struct gpib_board *board, uint8_t *buffer, size_t length,
static int fifo_write(struct gpib_board *board, u8 *buffer, size_t length,
size_t *bytes_written)
{
size_t count = 0;
@ -350,7 +350,7 @@ static int fifo_write(struct gpib_board *board, uint8_t *buffer, size_t length,
return retval;
}
static int cb7210_accel_write(struct gpib_board *board, uint8_t *buffer,
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;
@ -533,14 +533,14 @@ static irqreturn_t cb7210_interrupt(int irq, void *arg)
return cb7210_internal_interrupt(arg);
}
static int cb_pci_attach(struct gpib_board *board, const gpib_board_config_t *config);
static int cb_isa_attach(struct gpib_board *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(struct gpib_board *board);
static void cb_isa_detach(struct gpib_board *board);
// wrappers for interface functions
static int cb7210_read(struct gpib_board *board, uint8_t *buffer, size_t length,
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;
@ -548,7 +548,7 @@ static int cb7210_read(struct gpib_board *board, uint8_t *buffer, size_t length,
return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read);
}
static int cb7210_write(struct gpib_board *board, uint8_t *buffer, size_t length,
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;
@ -556,7 +556,7 @@ static int cb7210_write(struct gpib_board *board, uint8_t *buffer, size_t length
return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written);
}
static int cb7210_command(struct gpib_board *board, uint8_t *buffer, size_t length,
static int cb7210_command(struct gpib_board *board, u8 *buffer, size_t length,
size_t *bytes_written)
{
struct cb7210_priv *priv = board->private_data;
@ -578,7 +578,7 @@ static int cb7210_go_to_standby(struct gpib_board *board)
return nec7210_go_to_standby(board, &priv->nec7210_priv);
}
static void cb7210_request_system_control(struct gpib_board *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;
@ -589,7 +589,7 @@ static void cb7210_request_system_control(struct gpib_board *board, int request_
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);
}
static void cb7210_interface_clear(struct gpib_board *board, int assert)
@ -606,7 +606,7 @@ static void cb7210_remote_enable(struct gpib_board *board, int enable)
nec7210_remote_enable(board, &priv->nec7210_priv, enable);
}
static int cb7210_enable_eos(struct gpib_board *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;
@ -641,14 +641,14 @@ static int cb7210_secondary_address(struct gpib_board *board, unsigned int addre
return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable);
}
static int cb7210_parallel_poll(struct gpib_board *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);
}
static void cb7210_parallel_poll_configure(struct gpib_board *board, uint8_t configuration)
static void cb7210_parallel_poll_configure(struct gpib_board *board, u8 configuration)
{
struct cb7210_priv *priv = board->private_data;
@ -662,14 +662,14 @@ static void cb7210_parallel_poll_response(struct gpib_board *board, int ist)
nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist);
}
static void cb7210_serial_poll_response(struct gpib_board *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);
}
static uint8_t cb7210_serial_poll_status(struct gpib_board *board)
static u8 cb7210_serial_poll_status(struct gpib_board *board)
{
struct cb7210_priv *priv = board->private_data;
@ -686,7 +686,7 @@ static void cb7210_return_to_local(struct gpib_board *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,
@ -714,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,
@ -742,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,
@ -769,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,
@ -797,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,
@ -824,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,
@ -905,7 +905,8 @@ static int cb7210_init(struct cb7210_priv *cb_priv, struct gpib_board *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)
*/
@ -926,7 +927,7 @@ static int cb7210_init(struct cb7210_priv *cb_priv, struct gpib_board *board)
return 0;
}
static int cb_pci_attach(struct gpib_board *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;
@ -1031,7 +1032,7 @@ static void cb_pci_detach(struct gpib_board *board)
cb7210_generic_detach(board);
}
static int cb_isa_attach(struct gpib_board *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;
@ -1133,7 +1134,7 @@ static struct pci_driver cb7210_pci_driver = {
static int cb_gpib_config(struct pcmcia_device *link);
static void cb_gpib_release(struct pcmcia_device *link);
static int cb_pcmcia_attach(struct gpib_board *board, const gpib_board_config_t *config);
static int cb_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config);
static void cb_pcmcia_detach(struct gpib_board *board);
/*
@ -1246,13 +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;
retval = pcmcia_loop_config(link, &cb_gpib_config_iteration, NULL);
if (retval) {
dev_warn(&link->dev, "no configuration found\n");
@ -1275,9 +1271,9 @@ static int cb_gpib_config(struct pcmcia_device *link)
} /* 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)
@ -1333,7 +1329,7 @@ static void cb_pcmcia_cleanup_module(void)
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,
@ -1361,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,
@ -1389,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,
@ -1417,7 +1413,7 @@ static gpib_interface_t cb_pcmcia_accel_interface = {
.return_to_local = cb7210_return_to_local,
};
static int cb_pcmcia_attach(struct gpib_board *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;

View file

@ -73,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;
@ -89,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;
@ -99,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;
@ -113,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;
@ -134,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
@ -189,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,

View file

@ -40,12 +40,12 @@ static irqreturn_t cec_interrupt(int irq, void *arg)
#define CEC_DEV_ID 0x5cec
#define CEC_SUBID 0x9050
static int cec_pci_attach(struct gpib_board *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(struct gpib_board *board);
// wrappers for interface functions
static int cec_read(struct gpib_board *board, uint8_t *buffer, size_t length, int *end,
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;
@ -53,7 +53,7 @@ static int cec_read(struct gpib_board *board, uint8_t *buffer, size_t length, in
return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read);
}
static int cec_write(struct gpib_board *board, uint8_t *buffer, size_t length, int send_eoi,
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;
@ -61,7 +61,7 @@ static int cec_write(struct gpib_board *board, uint8_t *buffer, size_t length, i
return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written);
}
static int cec_command(struct gpib_board *board, uint8_t *buffer,
static int cec_command(struct gpib_board *board, u8 *buffer,
size_t length, size_t *bytes_written)
{
struct cec_priv *priv = board->private_data;
@ -83,11 +83,11 @@ static int cec_go_to_standby(struct gpib_board *board)
return nec7210_go_to_standby(board, &priv->nec7210_priv);
}
static void cec_request_system_control(struct gpib_board *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);
}
static void cec_interface_clear(struct gpib_board *board, int assert)
@ -104,7 +104,7 @@ static void cec_remote_enable(struct gpib_board *board, int enable)
nec7210_remote_enable(board, &priv->nec7210_priv, enable);
}
static int cec_enable_eos(struct gpib_board *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;
@ -139,14 +139,14 @@ static int cec_secondary_address(struct gpib_board *board, unsigned int address,
return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable);
}
static int cec_parallel_poll(struct gpib_board *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);
}
static void cec_parallel_poll_configure(struct gpib_board *board, uint8_t config)
static void cec_parallel_poll_configure(struct gpib_board *board, u8 config)
{
struct cec_priv *priv = board->private_data;
@ -160,14 +160,14 @@ static void cec_parallel_poll_response(struct gpib_board *board, int ist)
nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist);
}
static void cec_serial_poll_response(struct gpib_board *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(struct gpib_board *board)
static u8 cec_serial_poll_status(struct gpib_board *board)
{
struct cec_priv *priv = board->private_data;
@ -188,7 +188,7 @@ static void cec_return_to_local(struct gpib_board *board)
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,
@ -265,7 +265,7 @@ static void cec_init(struct cec_priv *cec_priv, const struct gpib_board *board)
nec7210_board_online(nec_priv, board);
}
static int cec_pci_attach(struct gpib_board *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;

View file

@ -26,35 +26,37 @@ 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, struct gpib_board *board, unsigned long arg);
static int read_ioctl(gpib_file_private_t *file_priv, struct gpib_board *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, struct gpib_board *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, struct gpib_board *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, 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(gpib_file_private_t *file_priv, 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, gpib_file_private_t *file_priv,
static int pad_ioctl(struct gpib_board *board, struct gpib_file_private *file_priv,
unsigned long arg);
static int sad_ioctl(struct gpib_board *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(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(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(struct gpib_board *board, gpib_file_private_t *file_priv,
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(struct gpib_board *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(struct gpib_board *board, unsigned long arg);
static int status_bytes_ioctl(struct gpib_board *board, unsigned long arg);
@ -64,15 +66,16 @@ static int set_local_ppoll_mode_ioctl(struct gpib_board *board, unsigned long ar
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(gpib_board_config_t *config, unsigned long arg);
static int select_device_path_ioctl(gpib_board_config_t *config, 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(gpib_file_private_t *file_priv, struct gpib_board *board);
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, 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);
/*
* Timer functions
@ -119,7 +122,8 @@ int io_timed_out(struct gpib_board *board)
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)
@ -170,7 +174,7 @@ 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;
@ -178,10 +182,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(struct gpib_board *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;
@ -194,7 +198,7 @@ int push_status_byte(struct gpib_board *board, gpib_status_queue_t *device, u8 p
return retval;
}
status = kmalloc(sizeof(status_byte_t), GFP_KERNEL);
status = kmalloc(sizeof(*status), GFP_KERNEL);
if (!status)
return -ENOMEM;
@ -212,11 +216,11 @@ int push_status_byte(struct gpib_board *board, gpib_status_queue_t *device, u8 p
}
// pop status byte from front of status byte fifo
int pop_status_byte(struct gpib_board *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;
@ -229,7 +233,7 @@ int pop_status_byte(struct gpib_board *board, gpib_status_queue_t *device, u8 *p
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);
@ -243,14 +247,14 @@ int pop_status_byte(struct gpib_board *board, gpib_status_queue_t *device, u8 *p
return 0;
}
gpib_status_queue_t *get_gpib_status_queue(struct gpib_board *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;
}
@ -258,10 +262,10 @@ gpib_status_queue_t *get_gpib_status_queue(struct gpib_board *board, unsigned in
return NULL;
}
int get_serial_poll_byte(struct gpib_board *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;
struct gpib_status_queue *device;
device = get_gpib_status_queue(board, pad, sad);
if (num_status_bytes(device))
@ -291,7 +295,8 @@ int autopoll_all_devices(struct gpib_board *board)
}
dev_dbg(board->gpib_dev, "complete\n");
/* need to wake wait queue in case someone is
/*
* need to wake wait queue in case someone is
* waiting on RQS
*/
wake_up_interruptible(&board->wait);
@ -334,7 +339,7 @@ static int setup_serial_poll(struct gpib_board *board, unsigned int usec_timeout
}
static int read_serial_poll_byte(struct gpib_board *board, unsigned int pad,
int sad, unsigned int usec_timeout, uint8_t *result)
int sad, unsigned int usec_timeout, u8 *result)
{
u8 cmd_string[8];
int end_flag;
@ -405,7 +410,7 @@ static int cleanup_serial_poll(struct gpib_board *board, unsigned int usec_timeo
}
static int serial_poll_single(struct gpib_board *board, unsigned int pad, int sad,
unsigned int usec_timeout, uint8_t *result)
unsigned int usec_timeout, u8 *result)
{
int retval, cleanup_retval;
@ -427,7 +432,7 @@ 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;
@ -440,7 +445,7 @@ int serial_poll_all(struct gpib_board *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)
@ -470,7 +475,7 @@ int serial_poll_all(struct gpib_board *board, unsigned int usec_timeout)
*/
int dvrsp(struct gpib_board *board, unsigned int pad, int sad,
unsigned int usec_timeout, uint8_t *result)
unsigned int usec_timeout, u8 *result)
{
int status = ibstatus(board);
int retval;
@ -492,8 +497,8 @@ int dvrsp(struct gpib_board *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);
@ -503,11 +508,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;
@ -522,7 +527,7 @@ int ibopen(struct inode *inode, struct file *filep)
{
unsigned int minor = iminor(inode);
struct gpib_board *board;
gpib_file_private_t *priv;
struct gpib_file_private *priv;
if (minor >= GPIB_MAX_NUM_BOARDS) {
pr_err("gpib: invalid minor number of device file\n");
@ -531,12 +536,12 @@ 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);
init_gpib_file_private((struct gpib_file_private *)filep->private_data);
if (board->use_count == 0) {
int retval;
@ -560,8 +565,8 @@ int ibclose(struct inode *inode, struct file *filep)
{
unsigned int minor = iminor(inode);
struct gpib_board *board;
gpib_file_private_t *priv = filep->private_data;
gpib_descriptor_t *desc;
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");
@ -606,7 +611,7 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg)
{
unsigned int minor = iminor(filep->f_path.dentry->d_inode);
struct gpib_board *board;
gpib_file_private_t *file_priv = filep->private_data;
struct gpib_file_private *file_priv = filep->private_data;
long retval = -ENOTTY;
if (minor >= GPIB_MAX_NUM_BOARDS) {
@ -665,8 +670,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);
@ -736,8 +742,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);
@ -760,8 +767,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);
@ -790,8 +798,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);
@ -806,10 +815,11 @@ done:
return retval;
}
static int board_type_ioctl(gpib_file_private_t *file_priv, struct gpib_board *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))
@ -817,15 +827,16 @@ static int board_type_ioctl(gpib_file_private_t *file_priv, struct gpib_board *b
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 != &registered_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;
@ -857,16 +868,16 @@ static int board_type_ioctl(gpib_file_private_t *file_priv, struct gpib_board *b
return -EINVAL;
}
static int read_ioctl(gpib_file_private_t *file_priv, struct gpib_board *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));
@ -913,7 +924,8 @@ static int read_ioctl(gpib_file_private_t *file_priv, struct gpib_board *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.
@ -932,15 +944,15 @@ static int read_ioctl(gpib_file_private_t *file_priv, struct gpib_board *board,
return read_ret;
}
static int command_ioctl(gpib_file_private_t *file_priv,
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;
@ -967,10 +979,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);
@ -1016,15 +1029,15 @@ static int command_ioctl(gpib_file_private_t *file_priv,
return retval;
}
static int write_ioctl(gpib_file_private_t *file_priv, struct gpib_board *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)
@ -1068,7 +1081,8 @@ static int write_ioctl(gpib_file_private_t *file_priv, struct gpib_board *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.
@ -1089,8 +1103,8 @@ static int write_ioctl(gpib_file_private_t *file_priv, struct gpib_board *board,
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));
@ -1114,13 +1128,14 @@ static int increment_open_device_count(struct gpib_board *board, struct list_hea
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, "incrementing open count for pad %i, sad %i\n",
device->pad, device->sad);
@ -1129,8 +1144,8 @@ static int increment_open_device_count(struct gpib_board *board, struct list_hea
}
}
/* 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);
@ -1148,11 +1163,11 @@ static int increment_open_device_count(struct gpib_board *board, struct list_hea
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, "decrementing open count for pad %i, sad %i\n",
device->pad, device->sad);
@ -1180,13 +1195,13 @@ static inline int decrement_open_device_count(struct gpib_board *board, struct l
return subtract_open_device_count(board, head, pad, sad, 1);
}
static int cleanup_open_devices(gpib_file_private_t *file_priv, struct gpib_board *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)
@ -1207,9 +1222,9 @@ static int cleanup_open_devices(gpib_file_private_t *file_priv, struct gpib_boar
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));
@ -1225,7 +1240,7 @@ static int open_dev_ioctl(struct file *filep, struct gpib_board *board, unsigned
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;
@ -1242,7 +1257,8 @@ static int open_dev_ioctl(struct file *filep, struct gpib_board *board, unsigned
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);
@ -1257,8 +1273,8 @@ static int open_dev_ioctl(struct file *filep, struct gpib_board *board, unsigned
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));
@ -1284,7 +1300,7 @@ static int close_dev_ioctl(struct file *filep, struct gpib_board *board, unsigne
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;
retval = copy_from_user(&serial_cmd, (void __user *)arg, sizeof(serial_cmd));
@ -1303,12 +1319,12 @@ static int serial_poll_ioctl(struct gpib_board *board, unsigned long arg)
return 0;
}
static int wait_ioctl(gpib_file_private_t *file_priv, struct gpib_board *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)
@ -1348,7 +1364,7 @@ static int parallel_poll_ioctl(struct gpib_board *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;
@ -1430,12 +1446,12 @@ static int line_status_ioctl(struct gpib_board *board, unsigned long arg)
return 0;
}
static int pad_ioctl(struct gpib_board *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)
@ -1466,12 +1482,12 @@ static int pad_ioctl(struct gpib_board *board, gpib_file_private_t *file_priv,
return 0;
}
static int sad_ioctl(struct gpib_board *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)
@ -1503,7 +1519,7 @@ static int sad_ioctl(struct gpib_board *board, gpib_file_private_t *file_priv,
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));
@ -1527,11 +1543,11 @@ static int request_service_ioctl(struct gpib_board *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;
@ -1539,7 +1555,7 @@ static int request_service2_ioctl(struct gpib_board *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;
@ -1558,7 +1574,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;
@ -1575,7 +1591,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;
@ -1592,12 +1608,12 @@ static int dma_ioctl(gpib_board_config_t *config, unsigned long arg)
return 0;
}
static int autospoll_ioctl(struct gpib_board *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)
@ -1630,7 +1646,7 @@ static int autospoll_ioctl(struct gpib_board *board, gpib_file_private_t *file_p
return retval;
}
static int mutex_ioctl(struct gpib_board *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;
@ -1687,7 +1703,7 @@ static int timeout_ioctl(struct gpib_board *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));
@ -1713,7 +1729,7 @@ 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)
{
local_ppoll_mode_ioctl_t cmd;
short cmd;
int retval;
retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
@ -1730,7 +1746,7 @@ static int set_local_ppoll_mode_ioctl(struct gpib_board *board, unsigned long ar
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;
@ -1757,7 +1773,7 @@ static int query_board_rsv_ioctl(struct gpib_board *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;
@ -1790,9 +1806,9 @@ static int interface_clear_ioctl(struct gpib_board *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))
@ -1808,19 +1824,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;
@ -1836,16 +1853,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(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;
@ -1858,7 +1875,7 @@ static int push_gpib_event_nolock(struct gpib_board *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;
dev_err(board->gpib_dev, "failed to allocate memory for event\n");
@ -1888,23 +1905,24 @@ int push_gpib_event(struct gpib_board *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(struct gpib_board *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;
}
@ -1916,7 +1934,7 @@ static int pop_gpib_event_nolock(struct gpib_board *board, gpib_event_queue_t *q
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);
@ -1931,7 +1949,7 @@ static int pop_gpib_event_nolock(struct gpib_board *board, gpib_event_queue_t *q
}
// pop event from front of event queue
int pop_gpib_event(struct gpib_board *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;
@ -1944,7 +1962,7 @@ int pop_gpib_event(struct gpib_board *board, gpib_event_queue_t *queue, short *e
static int event_ioctl(struct gpib_board *board, unsigned long arg)
{
event_ioctl_t user_event;
short user_event;
int retval;
short event;
@ -1963,21 +1981,19 @@ static int event_ioctl(struct gpib_board *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(struct gpib_board *board, unsigned long arg)
{
t1_delay_ioctl_t cmd;
unsigned int cmd;
unsigned int delay;
int retval;
@ -2011,7 +2027,7 @@ 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;
@ -2020,9 +2036,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)
@ -2036,7 +2052,7 @@ 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;
@ -2053,9 +2069,9 @@ void gpib_unregister_driver(gpib_interface_t *interface)
}
}
for (list_ptr = registered_drivers.next; list_ptr != &registered_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);
@ -2065,9 +2081,9 @@ void gpib_unregister_driver(gpib_interface_t *interface)
}
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;
}
@ -2143,7 +2159,7 @@ static void init_board_array(struct gpib_board *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);
@ -2208,7 +2224,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;
@ -2227,7 +2243,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)

View file

@ -33,9 +33,10 @@ int ibcac(struct gpib_board *board, int sync, int fallback_to_async)
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(struct gpib_board *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.
@ -96,7 +98,7 @@ static int check_for_command_acceptors(struct gpib_board *board)
* must be called to initialize the GPIB and enable
* the interface to leave the controller idle state.
*/
int ibcmd(struct gpib_board *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;
@ -218,7 +220,8 @@ int ibonline(struct gpib_board *board)
board->interface->detach(board);
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
@ -297,7 +300,7 @@ int iblines(const struct gpib_board *board, short *lines)
* calling ibcmd.
*/
int ibrd(struct gpib_board *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;
@ -313,7 +316,8 @@ int ibrd(struct gpib_board *board, uint8_t *buf, size_t length, int *end_flag, s
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
*/
@ -343,7 +347,7 @@ ibrd_out:
* 1. Prior to conducting the poll the interface is placed
* in the controller active state.
*/
int ibrpp(struct gpib_board *board, uint8_t *result)
int ibrpp(struct gpib_board *board, u8 *result)
{
int retval = 0;
@ -358,7 +362,7 @@ int ibrpp(struct gpib_board *board, uint8_t *result)
return retval;
}
int ibppc(struct gpib_board *board, uint8_t configuration)
int ibppc(struct gpib_board *board, u8 configuration)
{
configuration &= 0x1f;
board->interface->parallel_poll_configure(board, configuration);
@ -367,7 +371,7 @@ int ibppc(struct gpib_board *board, uint8_t configuration)
return 0;
}
int ibrsv2(struct gpib_board *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;
@ -418,12 +422,21 @@ int ibsic(struct gpib_board *board, unsigned int usec_duration)
return 0;
}
/* FIXME make int */
void ibrsc(struct gpib_board *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)
board->interface->request_system_control(board, request_control);
return 0;
}
/*
@ -506,15 +519,16 @@ int ibstatus(struct gpib_board *board)
return general_ibstatus(board, NULL, 0, 0, NULL);
}
int general_ibstatus(struct gpib_board *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;
@ -573,8 +587,8 @@ 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)
{
struct gpib_board *board = winfo->board;
int temp_status;
@ -623,10 +637,10 @@ static void remove_wait_timer(struct wait_info *winfo)
* no condition is waited for.
*/
int ibwait(struct gpib_board *board, int wait_mask, int clear_mask, int set_mask,
int *status, unsigned long usec_timeout, gpib_descriptor_t *desc)
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)
@ -677,7 +691,7 @@ int ibwait(struct gpib_board *board, int wait_mask, int clear_mask, int set_mask
* well as the interface board itself must be
* addressed by calling ibcmd.
*/
int ibwrt(struct gpib_board *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;

View file

@ -22,10 +22,13 @@
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(struct gpib_board *board, gpib_status_queue_t *device, uint8_t poll_byte);
int pop_status_byte(struct gpib_board *board, gpib_status_queue_t *device, uint8_t *poll_byte);
gpib_status_queue_t *get_gpib_status_queue(struct gpib_board *board, unsigned int pad, int sad);
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, uint8_t *poll_byte);
unsigned int usec_timeout, u8 *poll_byte);
int autopoll_all_devices(struct gpib_board *board);

View file

@ -24,15 +24,17 @@
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("GPIB Driver for Fluke cda devices");
static int fluke_attach_holdoff_all(struct gpib_board *board, const gpib_board_config_t *config);
static int fluke_attach_holdoff_end(struct gpib_board *board, const gpib_board_config_t *config);
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;
@ -43,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;
@ -54,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(struct gpib_board *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;
@ -62,7 +64,7 @@ static int fluke_read(struct gpib_board *board, uint8_t *buffer, size_t length,
return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read);
}
static int fluke_write(struct gpib_board *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;
@ -70,7 +72,7 @@ static int fluke_write(struct gpib_board *board, uint8_t *buffer, size_t length,
return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written);
}
static int fluke_command(struct gpib_board *board, uint8_t *buffer,
static int fluke_command(struct gpib_board *board, u8 *buffer,
size_t length, size_t *bytes_written)
{
struct fluke_priv *priv = board->private_data;
@ -92,12 +94,12 @@ static int fluke_go_to_standby(struct gpib_board *board)
return nec7210_go_to_standby(board, &priv->nec7210_priv);
}
static void fluke_request_system_control(struct gpib_board *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(struct gpib_board *board, int assert)
@ -114,7 +116,7 @@ static void fluke_remote_enable(struct gpib_board *board, int enable)
nec7210_remote_enable(board, &priv->nec7210_priv, enable);
}
static int fluke_enable_eos(struct gpib_board *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;
@ -149,14 +151,14 @@ static int fluke_secondary_address(struct gpib_board *board, unsigned int addres
return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable);
}
static int fluke_parallel_poll(struct gpib_board *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(struct gpib_board *board, uint8_t configuration)
static void fluke_parallel_poll_configure(struct gpib_board *board, u8 configuration)
{
struct fluke_priv *priv = board->private_data;
@ -170,14 +172,14 @@ static void fluke_parallel_poll_response(struct gpib_board *board, int ist)
nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist);
}
static void fluke_serial_poll_response(struct gpib_board *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(struct gpib_board *board)
static u8 fluke_serial_poll_status(struct gpib_board *board)
{
struct fluke_priv *priv = board->private_data;
@ -254,7 +256,8 @@ static int lacs_or_read_ready(struct gpib_board *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(struct gpib_board *board)
@ -276,7 +279,8 @@ static int wait_for_read(struct gpib_board *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
@ -310,7 +314,8 @@ 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.
*/
@ -371,7 +376,7 @@ static void fluke_dma_callback(void *arg)
spin_unlock_irqrestore(&board->spinlock, flags);
}
static int fluke_dma_write(struct gpib_board *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;
@ -441,7 +446,8 @@ static int fluke_dma_write(struct gpib_board *board, uint8_t *buffer, size_t len
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)
@ -456,7 +462,7 @@ cleanup:
return retval;
}
static int fluke_accel_write(struct gpib_board *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;
@ -508,7 +514,8 @@ static int fluke_accel_write(struct gpib_board *board, uint8_t *buffer, size_t l
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
@ -539,12 +546,14 @@ static int fluke_get_dma_residue(struct dma_chan *chan, dma_cookie_t cookie)
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(struct gpib_board *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;
@ -608,7 +617,8 @@ static int fluke_dma_read(struct gpib_board *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)) {
@ -625,7 +635,8 @@ static int fluke_dma_read(struct gpib_board *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);
@ -641,14 +652,17 @@ static int fluke_dma_read(struct gpib_board *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;
}
@ -657,7 +671,7 @@ static int fluke_dma_read(struct gpib_board *board, uint8_t *buffer,
return retval;
}
static int fluke_accel_read(struct gpib_board *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;
@ -698,7 +712,7 @@ static int fluke_accel_read(struct gpib_board *board, uint8_t *buffer, size_t le
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,
@ -725,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
@ -733,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,
@ -760,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,
@ -802,7 +817,7 @@ irqreturn_t fluke_gpib_internal_interrupt(struct gpib_board *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;
}
@ -914,7 +929,8 @@ static int fluke_init(struct fluke_priv *e_priv, struct gpib_board *board, int h
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)
*/
@ -933,7 +949,8 @@ static int fluke_init(struct fluke_priv *e_priv, struct gpib_board *board, int h
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.
*/
@ -943,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(struct gpib_board *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;
@ -1024,10 +1041,8 @@ static int fluke_attach_impl(struct gpib_board *board, const gpib_board_config_t
}
irq = platform_get_irq(fluke_gpib_pdev, 0);
if (irq < 0) {
dev_err(&fluke_gpib_pdev->dev, "failed to obtain IRQ\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,
@ -1042,19 +1057,21 @@ static int fluke_attach_impl(struct gpib_board *board, const gpib_board_config_t
e_priv->dma_channel = dma_request_channel(dma_cap, gpib_dma_channel_filter, NULL);
if (!e_priv->dma_channel) {
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
/*
* 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(struct gpib_board *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(struct gpib_board *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);
}

View file

@ -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)

View file

@ -32,13 +32,15 @@ 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(struct gpib_board *board, const gpib_board_config_t *config);
static int fmh_gpib_attach_holdoff_end(struct gpib_board *board, const gpib_board_config_t *config);
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 gpib_board_config_t *config);
const struct gpib_board_config *config);
static int fmh_gpib_pci_attach_holdoff_end(struct gpib_board *board,
const gpib_board_config_t *config);
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);
@ -46,7 +48,7 @@ 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(struct gpib_board *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;
@ -54,7 +56,7 @@ static int fmh_gpib_read(struct gpib_board *board, uint8_t *buffer, size_t lengt
return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read);
}
static int fmh_gpib_write(struct gpib_board *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;
@ -62,7 +64,7 @@ static int fmh_gpib_write(struct gpib_board *board, uint8_t *buffer, size_t leng
return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written);
}
static int fmh_gpib_command(struct gpib_board *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;
@ -84,12 +86,12 @@ static int fmh_gpib_go_to_standby(struct gpib_board *board)
return nec7210_go_to_standby(board, &priv->nec7210_priv);
}
static void fmh_gpib_request_system_control(struct gpib_board *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(struct gpib_board *board, int assert)
@ -106,7 +108,7 @@ static void fmh_gpib_remote_enable(struct gpib_board *board, int enable)
nec7210_remote_enable(board, &priv->nec7210_priv, enable);
}
static int fmh_gpib_enable_eos(struct gpib_board *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;
@ -141,14 +143,14 @@ static int fmh_gpib_secondary_address(struct gpib_board *board, unsigned int add
return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable);
}
static int fmh_gpib_parallel_poll(struct gpib_board *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(struct gpib_board *board, uint8_t configuration)
static void fmh_gpib_parallel_poll_configure(struct gpib_board *board, u8 configuration)
{
struct fmh_priv *priv = board->private_data;
@ -169,7 +171,8 @@ static void fmh_gpib_local_parallel_poll_mode(struct gpib_board *board, int loca
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.
*/
@ -177,7 +180,7 @@ static void fmh_gpib_local_parallel_poll_mode(struct gpib_board *board, int loca
}
}
static void fmh_gpib_serial_poll_response2(struct gpib_board *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;
@ -195,7 +198,8 @@ static void fmh_gpib_serial_poll_response2(struct gpib_board *board, uint8_t sta
}
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.
@ -204,7 +208,8 @@ static void fmh_gpib_serial_poll_response2(struct gpib_board *board, uint8_t sta
} 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.
*/
@ -212,7 +217,7 @@ static void fmh_gpib_serial_poll_response2(struct gpib_board *board, uint8_t sta
spin_unlock_irqrestore(&board->spinlock, flags);
}
static uint8_t fmh_gpib_serial_poll_status(struct gpib_board *board)
static u8 fmh_gpib_serial_poll_status(struct gpib_board *board)
{
struct fmh_priv *priv = board->private_data;
@ -333,7 +338,8 @@ static int wait_for_rx_fifo_half_full_or_end(struct gpib_board *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(struct gpib_board *board)
{
@ -377,7 +383,8 @@ static void fmh_gpib_dma_callback(void *arg)
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)
@ -391,7 +398,7 @@ static int fmh_gpib_all_bytes_are_sent(struct fmh_priv *e_priv)
return 1;
}
static int fmh_gpib_dma_write(struct gpib_board *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;
@ -469,7 +476,7 @@ cleanup:
return retval;
}
static int fmh_gpib_accel_write(struct gpib_board *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;
@ -523,7 +530,8 @@ static int fmh_gpib_accel_write(struct gpib_board *board, uint8_t *buffer,
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
@ -554,8 +562,10 @@ static int fmh_gpib_get_dma_residue(struct dma_chan *chan, dma_cookie_t cookie)
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;
}
@ -581,10 +591,11 @@ static int wait_for_tx_fifo_half_empty(struct gpib_board *board)
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(struct gpib_board *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;
@ -650,7 +661,7 @@ cleanup:
return retval;
}
static int fmh_gpib_fifo_write(struct gpib_board *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;
@ -697,7 +708,7 @@ static int fmh_gpib_fifo_write(struct gpib_board *board, uint8_t *buffer, size_t
return retval;
}
static int fmh_gpib_dma_read(struct gpib_board *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;
@ -768,8 +779,10 @@ static int fmh_gpib_dma_read(struct gpib_board *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))
@ -793,14 +806,17 @@ static int fmh_gpib_dma_read(struct gpib_board *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;
}
@ -819,7 +835,8 @@ static void fmh_gpib_release_rfd_holdoff(struct gpib_board *board, struct fmh_pr
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.
*/
@ -828,7 +845,8 @@ static void fmh_gpib_release_rfd_holdoff(struct gpib_board *board, struct fmh_pr
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
@ -846,7 +864,7 @@ static void fmh_gpib_release_rfd_holdoff(struct gpib_board *board, struct fmh_pr
spin_unlock_irqrestore(&board->spinlock, flags);
}
static int fmh_gpib_accel_read(struct gpib_board *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;
@ -893,10 +911,11 @@ static int fmh_gpib_accel_read(struct gpib_board *board, uint8_t *buffer, size_t
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(struct gpib_board *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;
@ -954,7 +973,7 @@ cleanup:
return retval;
}
static int fmh_gpib_fifo_read(struct gpib_board *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;
@ -969,7 +988,8 @@ static int fmh_gpib_fifo_read(struct gpib_board *board, uint8_t *buffer, size_t
*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);
@ -1011,7 +1031,7 @@ static int fmh_gpib_fifo_read(struct gpib_board *board, uint8_t *buffer, size_t
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,
@ -1039,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,
@ -1067,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,
@ -1095,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,
@ -1136,7 +1156,7 @@ irqreturn_t fmh_gpib_internal_interrupt(struct gpib_board *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;
}
@ -1166,7 +1186,8 @@ irqreturn_t fmh_gpib_internal_interrupt(struct gpib_board *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.
@ -1179,7 +1200,8 @@ irqreturn_t fmh_gpib_internal_interrupt(struct gpib_board *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
@ -1193,7 +1215,8 @@ irqreturn_t fmh_gpib_internal_interrupt(struct gpib_board *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
@ -1335,7 +1358,7 @@ static int fmh_gpib_init(struct fmh_priv *e_priv, struct gpib_board *board, int
/* 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;
@ -1351,7 +1374,7 @@ static int fmh_gpib_device_match(struct device *dev, const void *data)
return 1;
}
static int fmh_gpib_attach_impl(struct gpib_board *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;
@ -1424,10 +1447,8 @@ static int fmh_gpib_attach_impl(struct gpib_board *board, const gpib_board_confi
(unsigned long)resource_size(e_priv->dma_port_res));
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
dev_err(board->dev, "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,
@ -1444,7 +1465,8 @@ static int fmh_gpib_attach_impl(struct gpib_board *board, const gpib_board_confi
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.
*/
@ -1454,12 +1476,12 @@ static int fmh_gpib_attach_impl(struct gpib_board *board, const gpib_board_confi
return fmh_gpib_init(e_priv, board, handshake_mode);
}
int fmh_gpib_attach_holdoff_all(struct gpib_board *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(struct gpib_board *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);
}
@ -1497,7 +1519,8 @@ void fmh_gpib_detach(struct gpib_board *board)
fmh_gpib_generic_detach(board);
}
static int fmh_gpib_pci_attach_impl(struct gpib_board *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;
@ -1570,12 +1593,14 @@ static int fmh_gpib_pci_attach_impl(struct gpib_board *board, const gpib_board_c
return fmh_gpib_init(e_priv, board, handshake_mode);
}
int fmh_gpib_pci_attach_holdoff_all(struct gpib_board *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(struct gpib_board *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;
@ -1631,7 +1656,6 @@ MODULE_DEVICE_TABLE(of, fmh_gpib_of_match);
static struct platform_driver fmh_gpib_platform_driver = {
.driver = {
.name = DRV_NAME,
.owner = THIS_MODULE,
.of_match_table = fmh_gpib_of_match,
},
.probe = &fmh_gpib_platform_probe

View file

@ -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);

View file

@ -32,7 +32,8 @@
#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
@ -65,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);
@ -135,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];
@ -311,7 +306,6 @@ 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;
@ -324,7 +318,7 @@ 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 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);
@ -353,7 +347,7 @@ static char printable(char x)
* *
***************************************************************************/
static int bb_read(struct gpib_board *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;
@ -491,7 +485,7 @@ dav_exit:
* *
***************************************************************************/
static int bb_write(struct gpib_board *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;
@ -522,7 +516,7 @@ static int bb_write(struct gpib_board *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;
}
@ -619,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);
@ -691,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:
@ -728,7 +723,7 @@ static irqreturn_t bb_SRQ_interrupt(int irq, void *arg)
return IRQ_HANDLED;
}
static int bb_command(struct gpib_board *board, uint8_t *buffer,
static int bb_command(struct gpib_board *board, u8 *buffer,
size_t length, size_t *bytes_written)
{
size_t ret;
@ -855,6 +850,7 @@ static void set_atn(struct gpib_board *board, int atn_asserted)
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;
@ -864,14 +860,12 @@ static void set_atn(struct gpib_board *board, int atn_asserted)
priv->talker_state = talker_active;
}
gpiod_direction_output(_ATN, !atn_asserted);
priv->atn_asserted = atn_asserted;
}
static int bb_take_control(struct gpib_board *board, int synchronous)
{
dbg_printk(2, "%d\n", synchronous);
set_atn(board, 1);
set_bit(CIC_NUM, &board->status);
return 0;
}
@ -882,16 +876,24 @@ static int bb_go_to_standby(struct gpib_board *board)
return 0;
}
static void bb_request_system_control(struct gpib_board *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(struct gpib_board *board, int assert)
@ -903,6 +905,7 @@ static void bb_interface_clear(struct gpib_board *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);
}
@ -920,7 +923,7 @@ static void bb_remote_enable(struct gpib_board *board, int enable)
}
}
static int bb_enable_eos(struct gpib_board *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;
@ -987,12 +990,12 @@ static int bb_secondary_address(struct gpib_board *board, unsigned int address,
return 0;
}
static int bb_parallel_poll(struct gpib_board *board, uint8_t *result)
static int bb_parallel_poll(struct gpib_board *board, u8 *result)
{
return -ENOENT;
}
static void bb_parallel_poll_configure(struct gpib_board *board, uint8_t config)
static void bb_parallel_poll_configure(struct gpib_board *board, u8 config)
{
}
@ -1000,11 +1003,11 @@ static void bb_parallel_poll_response(struct gpib_board *board, int ist)
{
}
static void bb_serial_poll_response(struct gpib_board *board, uint8_t status)
static void bb_serial_poll_response(struct gpib_board *board, u8 status)
{
}
static uint8_t bb_serial_poll_status(struct gpib_board *board)
static u8 bb_serial_poll_status(struct gpib_board *board)
{
return 0; // -ENOENT;
}
@ -1120,8 +1123,7 @@ static void release_gpios(void)
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;
@ -1132,8 +1134,8 @@ static int allocate_gpios(struct gpib_board *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);
@ -1150,30 +1152,26 @@ 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;
}
dev_err(board->gpib_dev, "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(struct gpib_board *board)
@ -1184,8 +1182,6 @@ static void bb_detach(struct gpib_board *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");
@ -1206,7 +1202,7 @@ static void bb_detach(struct gpib_board *board)
free_private(board);
}
static int bb_attach(struct gpib_board *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;
@ -1245,7 +1241,6 @@ static int bb_attach(struct gpib_board *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 {
dev_err(board->gpib_dev, "Unrecognized pin map %s\n", pin_map);
goto bb_attach_fail;
@ -1256,7 +1251,8 @@ static int bb_attach(struct gpib_board *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
@ -1266,6 +1262,10 @@ static int bb_attach(struct gpib_board *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);
@ -1293,8 +1293,6 @@ static int bb_attach(struct gpib_board *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;
@ -1306,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,
@ -1364,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;

View file

@ -4,8 +4,9 @@
* 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
@ -24,12 +25,12 @@
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("GPIB driver for HP 82335 interface cards");
static int hp82335_attach(struct gpib_board *board, const gpib_board_config_t *config);
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
static int hp82335_read(struct gpib_board *board, uint8_t *buffer, size_t length,
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;
@ -37,7 +38,7 @@ static int hp82335_read(struct gpib_board *board, uint8_t *buffer, size_t length
return tms9914_read(board, &priv->tms9914_priv, buffer, length, end, bytes_read);
}
static int hp82335_write(struct gpib_board *board, uint8_t *buffer, size_t length, int send_eoi,
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;
@ -45,7 +46,7 @@ static int hp82335_write(struct gpib_board *board, uint8_t *buffer, size_t lengt
return tms9914_write(board, &priv->tms9914_priv, buffer, length, send_eoi, bytes_written);
}
static int hp82335_command(struct gpib_board *board, uint8_t *buffer, size_t length,
static int hp82335_command(struct gpib_board *board, u8 *buffer, size_t length,
size_t *bytes_written)
{
struct hp82335_priv *priv = board->private_data;
@ -67,11 +68,11 @@ static int hp82335_go_to_standby(struct gpib_board *board)
return tms9914_go_to_standby(board, &priv->tms9914_priv);
}
static void hp82335_request_system_control(struct gpib_board *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);
}
static void hp82335_interface_clear(struct gpib_board *board, int assert)
@ -88,7 +89,7 @@ static void hp82335_remote_enable(struct gpib_board *board, int enable)
tms9914_remote_enable(board, &priv->tms9914_priv, enable);
}
static int hp82335_enable_eos(struct gpib_board *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;
@ -123,14 +124,14 @@ static int hp82335_secondary_address(struct gpib_board *board, unsigned int addr
return tms9914_secondary_address(board, &priv->tms9914_priv, address, enable);
}
static int hp82335_parallel_poll(struct gpib_board *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);
}
static void hp82335_parallel_poll_configure(struct gpib_board *board, uint8_t config)
static void hp82335_parallel_poll_configure(struct gpib_board *board, u8 config)
{
struct hp82335_priv *priv = board->private_data;
@ -144,14 +145,14 @@ static void hp82335_parallel_poll_response(struct gpib_board *board, int ist)
tms9914_parallel_poll_response(board, &priv->tms9914_priv, ist);
}
static void hp82335_serial_poll_response(struct gpib_board *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(struct gpib_board *board)
static u8 hp82335_serial_poll_status(struct gpib_board *board)
{
struct hp82335_priv *priv = board->private_data;
@ -179,7 +180,7 @@ static void hp82335_return_to_local(struct gpib_board *board)
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,
@ -226,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));
}
@ -243,7 +244,7 @@ static void hp82335_clear_interrupt(struct hp82335_priv *hp_priv)
writeb(0, tms_priv->mmiobase + HPREG_INTR_CLEAR);
}
static int hp82335_attach(struct gpib_board *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;

View file

@ -25,11 +25,11 @@ 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, uint8_t *buffer, size_t length, int send_eoi,
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);
static int hp_82341_accel_read(struct gpib_board *board, uint8_t *buffer, size_t length, int *end,
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;
@ -51,11 +51,12 @@ static int hp_82341_accel_read(struct gpib_board *board, uint8_t *buffer, size_t
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;
@ -172,7 +173,7 @@ static int restart_write_fifo(struct gpib_board *board, struct hp_82341_priv *hp
return 0;
}
static int hp_82341_accel_write(struct gpib_board *board, uint8_t *buffer, size_t length,
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;
@ -250,12 +251,12 @@ static int hp_82341_accel_write(struct gpib_board *board, uint8_t *buffer, size_
return 0;
}
static int hp_82341_attach(struct gpib_board *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(struct gpib_board *board);
// wrappers for interface functions
static int hp_82341_read(struct gpib_board *board, uint8_t *buffer, size_t length, int *end,
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;
@ -263,7 +264,7 @@ static int hp_82341_read(struct gpib_board *board, uint8_t *buffer, size_t lengt
return tms9914_read(board, &priv->tms9914_priv, buffer, length, end, bytes_read);
}
static int hp_82341_write(struct gpib_board *board, uint8_t *buffer, size_t length, int send_eoi,
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;
@ -271,7 +272,7 @@ static int hp_82341_write(struct gpib_board *board, uint8_t *buffer, size_t leng
return tms9914_write(board, &priv->tms9914_priv, buffer, length, send_eoi, bytes_written);
}
static int hp_82341_command(struct gpib_board *board, uint8_t *buffer, size_t length,
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;
@ -293,7 +294,7 @@ static int hp_82341_go_to_standby(struct gpib_board *board)
return tms9914_go_to_standby(board, &priv->tms9914_priv);
}
static void hp_82341_request_system_control(struct gpib_board *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;
@ -302,7 +303,7 @@ static void hp_82341_request_system_control(struct gpib_board *board, int reques
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);
}
static void hp_82341_interface_clear(struct gpib_board *board, int assert)
@ -319,7 +320,7 @@ static void hp_82341_remote_enable(struct gpib_board *board, int enable)
tms9914_remote_enable(board, &priv->tms9914_priv, enable);
}
static int hp_82341_enable_eos(struct gpib_board *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;
@ -354,14 +355,14 @@ static int hp_82341_secondary_address(struct gpib_board *board, unsigned int add
return tms9914_secondary_address(board, &priv->tms9914_priv, address, enable);
}
static int hp_82341_parallel_poll(struct gpib_board *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);
}
static void hp_82341_parallel_poll_configure(struct gpib_board *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;
@ -375,14 +376,14 @@ static void hp_82341_parallel_poll_response(struct gpib_board *board, int ist)
tms9914_parallel_poll_response(board, &priv->tms9914_priv, ist);
}
static void hp_82341_serial_poll_response(struct gpib_board *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(struct gpib_board *board)
static u8 hp_82341_serial_poll_status(struct gpib_board *board)
{
struct hp_82341_priv *priv = board->private_data;
@ -410,7 +411,7 @@ static void hp_82341_return_to_local(struct gpib_board *board)
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,
@ -438,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,
@ -479,12 +480,12 @@ static void hp_82341_free_private(struct gpib_board *board)
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);
}
@ -619,7 +620,8 @@ static int hp_82341_load_firmware_array(struct hp_82341_priv *hp_priv,
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))
@ -686,7 +688,7 @@ static int clear_xilinx(struct hp_82341_priv *hp_priv)
return 0;
}
static int hp_82341_attach(struct gpib_board *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;

View file

@ -11,23 +11,23 @@
#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);
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, gpib_event_queue_t *queue, 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);

View file

@ -8,12 +8,8 @@
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(struct gpib_board *board, unsigned int usec_timeout);
void os_remove_timer(struct gpib_board *board);
void osSendEOI(void);
void osSendEOI(void);
void init_gpib_board(struct gpib_board *board);
static inline unsigned long usec_to_jiffies(unsigned int usec)
{
@ -23,34 +19,31 @@ static inline unsigned long usec_to_jiffies(unsigned int usec)
};
int serial_poll_all(struct gpib_board *board, unsigned int usec_timeout);
void init_gpib_descriptor(gpib_descriptor_t *desc);
void init_gpib_descriptor(struct gpib_descriptor *desc);
int dvrsp(struct gpib_board *board, unsigned int pad, int sad,
unsigned int usec_timeout, uint8_t *result);
int ibAPWait(struct gpib_board *board, int pad);
int ibAPrsp(struct gpib_board *board, int padsad, char *spb);
void ibAPE(struct gpib_board *board, int pad, int v);
unsigned int usec_timeout, u8 *result);
int ibcac(struct gpib_board *board, int sync, int fallback_to_async);
int ibcmd(struct gpib_board *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);
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, uint8_t *buf, size_t length, int *end_flag, size_t *bytes_read);
int ibrpp(struct gpib_board *board, uint8_t *buf);
int ibrsv2(struct gpib_board *board, uint8_t status_byte, int new_reason_for_service);
void ibrsc(struct gpib_board *board, int request_control);
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, gpib_descriptor_t *desc);
int ibwrt(struct gpib_board *board, uint8_t *buf, size_t cnt, int send_eoi, size_t *bytes_written);
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 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 io_timed_out(struct gpib_board *board);
int ibppc(struct gpib_board *board, uint8_t configuration);
int ibppc(struct gpib_board *board, u8 configuration);
#endif /* GPIB_PROTO_INCLUDED */

View file

@ -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;
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)(struct gpib_board *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)(struct gpib_board *board);
/* read() should read at most 'length' bytes from the bus into
/*
* 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)(struct gpib_board *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)(struct gpib_board *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)(struct gpib_board *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)(struct gpib_board *board, int asyncronous);
/* De-assert ATN. Returns zero on success, nonzer on error.
/*
* De-assert ATN. Returns zero on success, nonzer on error.
*/
int (*go_to_standby)(struct gpib_board *board);
/* request/release control of the IFC and REN lines (system controller) */
void (*request_system_control)(struct gpib_board *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)(struct gpib_board *board, int assert);
/* Sends remote enable command if 'enable' is nonzero, disables remote mode
/*
* Sends remote enable command if 'enable' is nonzero, disables remote mode
* if 'enable' is zero
*/
void (*remote_enable)(struct gpib_board *board, int enable);
/* enable END for reads, when byte 'eos' is received. If
/*
* 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)(struct gpib_board *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)(struct gpib_board *board);
/* configure parallel poll */
void (*parallel_poll_configure)(struct gpib_board *board, uint8_t configuration);
void (*parallel_poll_configure)(struct gpib_board *board, u8 configuration);
/* conduct parallel poll */
int (*parallel_poll)(struct gpib_board *board, uint8_t *result);
int (*parallel_poll)(struct gpib_board *board, u8 *result);
/* set/clear ist (individual status bit) */
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)(struct gpib_board *board, int local);
/* Returns current status of the bus lines. Should be set to
/*
* 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 struct gpib_board *board);
/* updates and returns the board's current status.
/*
* 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)(struct gpib_board *board, unsigned int clear_mask);
/* Sets primary address 0-30 for gpib interface card.
/*
* Sets primary address 0-30 for gpib interface card.
*/
int (*primary_address)(struct gpib_board *board, unsigned int address);
/* Sets and enables, or disables secondary address 0-30
/*
* Sets and enables, or disables secondary address 0-30
* for gpib interface card.
*/
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)(struct gpib_board *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,11 +180,12 @@ 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)(struct gpib_board *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)(struct gpib_board *board);
u8 (*serial_poll_status)(struct gpib_board *board);
/* adjust T1 delay */
int (*t1_delay)(struct gpib_board *board, unsigned int nano_sec);
/* go to local mode */
@ -179,14 +196,14 @@ struct gpib_interface_struct {
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;
@ -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 struct gpib_board 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 {
/* 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 {
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 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 {
/* 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__ */

View file

@ -1,4 +1,4 @@
//* SPDX-License-Identifier: GPL-2.0 */
/* SPDX-License-Identifier: GPL-2.0 */
/***************************************************************************
* copyright : (C) 2002 by Frank Mori Hess
@ -78,19 +78,19 @@ enum {
};
// interface functions
int nec7210_read(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *board, struct nec7210_priv *priv, int syncronous);
int nec7210_go_to_standby(struct gpib_board *board, struct nec7210_priv *priv);
void nec7210_request_system_control(struct gpib_board *board,
struct nec7210_priv *priv, int request_control);
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, uint8_t eos_bytes,
int nec7210_enable_eos(struct gpib_board *board, struct nec7210_priv *priv, u8 eos_bytes,
int compare_8_bits);
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,
@ -100,14 +100,14 @@ int nec7210_primary_address(const struct gpib_board *board,
struct nec7210_priv *priv, unsigned int address);
int nec7210_secondary_address(const struct gpib_board *board, struct nec7210_priv *priv,
unsigned int address, int enable);
int nec7210_parallel_poll(struct gpib_board *board, struct nec7210_priv *priv, uint8_t *result);
void nec7210_serial_poll_response(struct gpib_board *board, struct nec7210_priv *priv, uint8_t status);
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(struct gpib_board *board,
struct nec7210_priv *priv, int ist);
uint8_t nec7210_serial_poll_status(struct gpib_board *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);
@ -119,18 +119,18 @@ unsigned int nec7210_set_reg_bits(struct nec7210_priv *priv, unsigned int reg,
unsigned int mask, unsigned int bits);
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);
uint8_t nec7210_read_data_in(struct gpib_board *board, struct nec7210_priv *priv, int *end);
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

View file

@ -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

View file

@ -1,4 +1,4 @@
//* SPDX-License-Identifier: GPL-2.0 */
/* SPDX-License-Identifier: GPL-2.0 */
/***************************************************************************
* copyright : (C) 2002 by Frank Mori Hess
@ -79,24 +79,25 @@ enum {
};
// interface functions
int tms9914_read(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *board, struct tms9914_priv *priv, int syncronous);
/* alternate version of tms9914_take_control which works around buggy tcs
/*
* alternate version of tms9914_take_control which works around buggy tcs
* implementation.
*/
int tms9914_take_control_workaround(struct gpib_board *board, struct tms9914_priv *priv,
int syncronous);
int tms9914_go_to_standby(struct gpib_board *board, struct tms9914_priv *priv);
void tms9914_request_system_control(struct gpib_board *board, struct tms9914_priv *priv,
int request_control);
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, uint8_t eos_bytes,
int tms9914_enable_eos(struct gpib_board *board, struct tms9914_priv *priv, u8 eos_bytes,
int compare_8_bits);
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,
@ -105,13 +106,14 @@ int tms9914_primary_address(struct gpib_board *board,
struct tms9914_priv *priv, unsigned int address);
int tms9914_secondary_address(struct gpib_board *board, struct tms9914_priv *priv,
unsigned int address, int enable);
int tms9914_parallel_poll(struct gpib_board *board, struct tms9914_priv *priv, uint8_t *result);
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, uint8_t config);
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(struct gpib_board *board, struct tms9914_priv *priv, uint8_t status);
uint8_t tms9914_serial_poll_status(struct gpib_board *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);
@ -124,10 +126,10 @@ 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(struct gpib_board *board, struct tms9914_priv *priv);
@ -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

View file

@ -35,44 +35,6 @@ struct ines_priv {
u8 extend_mode_bits;
};
// interface functions
int ines_read(struct gpib_board *board, uint8_t *buffer, size_t length, int *end, size_t *bytes_read);
int ines_write(struct gpib_board *board, uint8_t *buffer, size_t length,
int send_eoi, size_t *bytes_written);
int ines_accel_read(struct gpib_board *board, uint8_t *buffer, size_t length,
int *end, size_t *bytes_read);
int ines_accel_write(struct gpib_board *board, uint8_t *buffer, size_t length,
int send_eoi, size_t *bytes_written);
int ines_command(struct gpib_board *board, uint8_t *buffer, size_t length, size_t *bytes_written);
int ines_take_control(struct gpib_board *board, int synchronous);
int ines_go_to_standby(struct gpib_board *board);
void ines_request_system_control(struct gpib_board *board, int request_control);
void ines_interface_clear(struct gpib_board *board, int assert);
void ines_remote_enable(struct gpib_board *board, int enable);
int ines_enable_eos(struct gpib_board *board, uint8_t eos_byte, int compare_8_bits);
void ines_disable_eos(struct gpib_board *board);
unsigned int ines_update_status(struct gpib_board *board, unsigned int clear_mask);
int ines_primary_address(struct gpib_board *board, unsigned int address);
int ines_secondary_address(struct gpib_board *board, unsigned int address, int enable);
int ines_parallel_poll(struct gpib_board *board, uint8_t *result);
void ines_parallel_poll_configure(struct gpib_board *board, uint8_t config);
void ines_parallel_poll_response(struct gpib_board *board, int ist);
void ines_serial_poll_response(struct gpib_board *board, uint8_t status);
uint8_t ines_serial_poll_status(struct gpib_board *board);
int ines_line_status(const struct gpib_board *board);
int ines_t1_delay(struct gpib_board *board, unsigned int nano_sec);
void ines_return_to_local(struct gpib_board *board);
// interrupt service routines
irqreturn_t ines_pci_interrupt(int irq, void *arg);
irqreturn_t ines_interrupt(struct gpib_board *board);
// utility functions
void ines_free_private(struct gpib_board *board);
int ines_generic_attach(struct gpib_board *board);
void ines_online(struct ines_priv *priv, const struct gpib_board *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,

View file

@ -25,7 +25,9 @@
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("GPIB driver for Ines iGPIB 72010");
int ines_line_status(const struct gpib_board *board)
static irqreturn_t ines_interrupt(struct gpib_board *board);
static int ines_line_status(const struct gpib_board *board)
{
int status = VALID_ALL;
int bcm_bits;
@ -55,7 +57,7 @@ int ines_line_status(const struct gpib_board *board)
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("bug! tried to set xfer counter > 0xffff\n");
@ -65,7 +67,7 @@ void ines_set_xfer_counter(struct ines_priv *priv, unsigned int count)
ines_outb(priv, count & 0xff, XFER_COUNT_LOWER);
}
int ines_t1_delay(struct gpib_board *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;
@ -95,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(struct gpib_board *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;
@ -133,8 +135,8 @@ static ssize_t pio_read(struct gpib_board *board, struct ines_priv *ines_priv, u
return retval;
}
int ines_accel_read(struct gpib_board *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;
@ -213,8 +215,8 @@ static int ines_write_wait(struct gpib_board *board, struct ines_priv *ines_priv
return 0;
}
int ines_accel_write(struct gpib_board *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;
@ -264,7 +266,7 @@ int ines_accel_write(struct gpib_board *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)
{
struct gpib_board *board = arg;
struct ines_priv *priv = board->private_data;
@ -281,7 +283,7 @@ irqreturn_t ines_pci_interrupt(int irq, void *arg)
return ines_interrupt(board);
}
irqreturn_t ines_interrupt(struct gpib_board *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;
@ -295,7 +297,7 @@ irqreturn_t ines_interrupt(struct gpib_board *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)
@ -313,9 +315,9 @@ irqreturn_t ines_interrupt(struct gpib_board *board)
return IRQ_HANDLED;
}
static int ines_pci_attach(struct gpib_board *board, const gpib_board_config_t *config);
static int ines_pci_accel_attach(struct gpib_board *board, const gpib_board_config_t *config);
static int ines_isa_attach(struct gpib_board *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(struct gpib_board *board);
static void ines_isa_detach(struct gpib_board *board);
@ -393,8 +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(struct gpib_board *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;
@ -412,134 +414,134 @@ int ines_read(struct gpib_board *board, uint8_t *buffer, size_t length,
return retval;
}
int ines_write(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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(struct gpib_board *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,
@ -567,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,
@ -595,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,
@ -623,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,
@ -664,13 +666,13 @@ static int ines_allocate_private(struct gpib_board *board)
return 0;
}
void ines_free_private(struct gpib_board *board)
static void ines_free_private(struct gpib_board *board)
{
kfree(board->private_data);
board->private_data = NULL;
}
int ines_generic_attach(struct gpib_board *board)
static int ines_generic_attach(struct gpib_board *board)
{
struct ines_priv *ines_priv;
struct nec7210_priv *nec_priv;
@ -690,7 +692,7 @@ int ines_generic_attach(struct gpib_board *board)
return 0;
}
void ines_online(struct ines_priv *ines_priv, const struct gpib_board *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;
@ -724,7 +726,7 @@ void ines_online(struct ines_priv *ines_priv, const struct gpib_board *board, in
nec7210_set_reg_bits(nec_priv, IMR1, HR_DOIE | HR_DIIE, 0);
}
static int ines_common_pci_attach(struct gpib_board *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;
@ -852,7 +854,7 @@ static int ines_common_pci_attach(struct gpib_board *board, const gpib_board_con
return 0;
}
int ines_pci_attach(struct gpib_board *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;
@ -867,7 +869,7 @@ int ines_pci_attach(struct gpib_board *board, const gpib_board_config_t *config)
return 0;
}
int ines_pci_accel_attach(struct gpib_board *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;
@ -884,7 +886,7 @@ int ines_pci_accel_attach(struct gpib_board *board, const gpib_board_config_t *c
static const int ines_isa_iosize = 0x20;
int ines_isa_attach(struct gpib_board *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;
@ -915,7 +917,7 @@ int ines_isa_attach(struct gpib_board *board, const gpib_board_config_t *config)
return 0;
}
void ines_pci_detach(struct gpib_board *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(struct gpib_board *board)
ines_free_private(board);
}
void ines_isa_detach(struct gpib_board *board)
static void ines_isa_detach(struct gpib_board *board)
{
struct ines_priv *ines_priv = board->private_data;
struct nec7210_priv *nec_priv;
@ -990,48 +992,49 @@ static struct pci_driver ines_pci_driver = {
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(struct gpib_board *board, const gpib_board_config_t *config);
static int ines_pcmcia_accel_attach(struct gpib_board *board, const gpib_board_config_t *config);
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 irqreturn_t ines_pcmcia_interrupt(int irq, void *arg);
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 {
@ -1042,13 +1045,13 @@ struct local_info {
};
/*
* 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)
{
@ -1079,10 +1082,10 @@ 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)
{
@ -1103,18 +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;
retval = pcmcia_loop_config(link, &ines_gpib_config_iteration, NULL);
if (retval) {
dev_warn(&link->dev, "no configuration found\n");
@ -1125,8 +1125,9 @@ static int ines_gpib_config(struct pcmcia_device *link)
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;
@ -1159,9 +1160,9 @@ static int ines_gpib_config(struct pcmcia_device *link)
} /* 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)
@ -1210,12 +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)
{
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,
@ -1243,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,
@ -1271,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,
@ -1299,14 +1300,14 @@ 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)
{
struct gpib_board *board = arg;
return ines_interrupt(board);
}
int ines_common_pcmcia_attach(struct gpib_board *board)
static int ines_common_pcmcia_attach(struct gpib_board *board)
{
struct ines_priv *ines_priv;
struct nec7210_priv *nec_priv;
@ -1345,7 +1346,7 @@ int ines_common_pcmcia_attach(struct gpib_board *board)
return 0;
}
int ines_pcmcia_attach(struct gpib_board *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;
@ -1360,7 +1361,8 @@ int ines_pcmcia_attach(struct gpib_board *board, const gpib_board_config_t *conf
return 0;
}
int ines_pcmcia_accel_attach(struct gpib_board *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;
@ -1375,7 +1377,7 @@ int ines_pcmcia_accel_attach(struct gpib_board *board, const gpib_board_config_t
return 0;
}
void ines_pcmcia_detach(struct gpib_board *board)
static void ines_pcmcia_detach(struct gpib_board *board)
{
struct ines_priv *ines_priv = board->private_data;
struct nec7210_priv *nec_priv;
@ -1484,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);

View file

@ -36,16 +36,16 @@ MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("GPIB driver for LPVO usb devices");
/*
* 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.
*
*/
@ -56,18 +56,18 @@ static const struct usb_device_id skel_table[] = {
MODULE_DEVICE_TABLE(usb, skel_table);
/*
* *** 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
* *** 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;
@ -169,10 +169,10 @@ static void show_status(struct gpib_board *board)
}
/*
* 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
@ -182,7 +182,7 @@ 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;
@ -192,7 +192,7 @@ 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)
*/
@ -203,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 ***
*/
/**
@ -262,13 +262,11 @@ static int send_command(struct gpib_board *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(struct gpib_board *board, int line, int value)
@ -368,7 +366,7 @@ static void set_timeout(struct gpib_board *board)
}
/*
* now the standard interface functions - attach and detach
* now the standard interface functions - attach and detach
*/
/**
@ -384,7 +382,7 @@ static void set_timeout(struct gpib_board *board)
* detach() will be called. Always.
*/
static int usb_gpib_attach(struct gpib_board *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;
@ -464,7 +462,8 @@ static int usb_gpib_attach(struct gpib_board *board, const gpib_board_config_t *
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
*/
@ -473,7 +472,8 @@ static int usb_gpib_attach(struct gpib_board *board, const gpib_board_config_t *
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
*/
@ -654,7 +654,8 @@ static int usb_gpib_line_status(const struct gpib_board *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
*/
@ -705,9 +706,10 @@ static int usb_gpib_line_status(const struct gpib_board *board)
/* parallel_poll */
static int usb_gpib_parallel_poll(struct gpib_board *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
*/
@ -909,15 +911,13 @@ static void usb_gpib_remote_enable(struct gpib_board *board, int enable)
/* request_system_control */
static void usb_gpib_request_system_control(struct gpib_board *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 */
@ -997,7 +997,7 @@ static int usb_gpib_write(struct gpib_board *board,
/* parallel_poll configure */
static void usb_gpib_parallel_poll_configure(struct gpib_board *board,
uint8_t configuration)
u8 configuration)
{
}
@ -1031,13 +1031,13 @@ static int usb_gpib_secondary_address(struct gpib_board *board,
/* serial_poll_response */
static void usb_gpib_serial_poll_response(struct gpib_board *board, uint8_t status)
static void usb_gpib_serial_poll_response(struct gpib_board *board, u8 status)
{
}
/* serial_poll_status */
static uint8_t usb_gpib_serial_poll_status(struct gpib_board *board)
static u8 usb_gpib_serial_poll_status(struct gpib_board *board)
{
return 0;
}
@ -1053,7 +1053,7 @@ static int usb_gpib_t1_delay(struct gpib_board *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,
@ -1083,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)
@ -1107,8 +1107,9 @@ static int usb_gpib_init_module(struct usb_interface *interface)
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++) {
@ -1162,12 +1163,11 @@ exit:
}
/*
* 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 */
@ -1235,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
*/
@ -1280,7 +1281,7 @@ 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(struct gpib_board *board, int subminor)
@ -1317,7 +1318,7 @@ 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(struct gpib_board *board)
@ -1340,7 +1341,7 @@ static int skel_do_release(struct gpib_board *board)
}
/*
* read functions
* read functions
*/
static void skel_read_bulk_callback(struct urb *urb)
@ -1405,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)
@ -1482,7 +1483,8 @@ retry:
* 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);
@ -1496,7 +1498,8 @@ 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
*/
@ -1551,7 +1554,7 @@ exit:
}
/*
* write functions
* write functions
*/
static void skel_write_bulk_callback(struct urb *urb)
@ -1581,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)
@ -1686,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 */
@ -1771,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,
@ -1800,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,

View file

@ -23,7 +23,7 @@
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("GPIB library code for NEC uPD7210");
int nec7210_enable_eos(struct gpib_board *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);
@ -44,7 +44,7 @@ void nec7210_disable_eos(struct gpib_board *board, struct nec7210_priv *priv)
}
EXPORT_SYMBOL(nec7210_disable_eos);
int nec7210_parallel_poll(struct gpib_board *board, struct nec7210_priv *priv, uint8_t *result)
int nec7210_parallel_poll(struct gpib_board *board, struct nec7210_priv *priv, u8 *result)
{
int ret;
@ -79,14 +79,15 @@ void nec7210_parallel_poll_response(struct gpib_board *board, struct nec7210_pri
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(struct gpib_board *board,
struct nec7210_priv *priv, uint8_t status)
struct nec7210_priv *priv, u8 status)
{
unsigned long flags;
@ -103,7 +104,7 @@ void nec7210_serial_poll_response(struct gpib_board *board,
}
EXPORT_SYMBOL(nec7210_serial_poll_response);
uint8_t nec7210_serial_poll_status(struct gpib_board *board, struct nec7210_priv *priv)
u8 nec7210_serial_poll_status(struct gpib_board *board, struct nec7210_priv *priv)
{
return read_byte(priv, SPSR);
}
@ -202,7 +203,8 @@ unsigned int nec7210_update_status_nolock(struct gpib_board *board, struct nec72
set_bit(SPOLL_NUM, &board->status);
}
/* we rely on the interrupt handler to set the
/*
* we rely on the interrupt handler to set the
* rest of the status bits
*/
@ -251,7 +253,7 @@ void nec7210_set_handshake_mode(struct gpib_board *board, struct nec7210_priv *p
}
EXPORT_SYMBOL(nec7210_set_handshake_mode);
uint8_t nec7210_read_data_in(struct gpib_board *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;
@ -330,14 +332,15 @@ int nec7210_go_to_standby(struct gpib_board *board, struct nec7210_priv *priv)
}
EXPORT_SYMBOL(nec7210_go_to_standby);
void nec7210_request_system_control(struct gpib_board *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);
@ -415,7 +418,7 @@ static inline short nec7210_atn_has_changed(struct gpib_board *board, struct nec
return -1;
}
int nec7210_command(struct gpib_board *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;
@ -464,7 +467,7 @@ int nec7210_command(struct gpib_board *board, struct nec7210_priv *priv, uint8_t
}
EXPORT_SYMBOL(nec7210_command);
static int pio_read(struct gpib_board *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;
@ -482,7 +485,8 @@ static int pio_read(struct gpib_board *board, struct nec7210_priv *priv, uint8_t
}
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
@ -568,7 +572,7 @@ static ssize_t __dma_read(struct gpib_board *board, struct nec7210_priv *priv, s
return retval ? retval : count;
}
static ssize_t dma_read(struct gpib_board *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;
@ -595,7 +599,7 @@ static ssize_t dma_read(struct gpib_board *board, struct nec7210_priv *priv, uin
}
#endif
int nec7210_read(struct gpib_board *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;
@ -642,7 +646,7 @@ static int pio_write_wait(struct gpib_board *board, struct nec7210_priv *priv,
return 0;
}
static int pio_write(struct gpib_board *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;
@ -662,7 +666,8 @@ static int pio_write(struct gpib_board *board, struct nec7210_priv *priv, uint8_
if (retval == -EIO) {
/* resend last byte on bus error */
*bytes_written = last_count;
/* we can get unrecoverable bus errors,
/*
* we can get unrecoverable bus errors,
* so give up after a while
*/
bus_error_count++;
@ -742,7 +747,7 @@ static ssize_t __dma_write(struct gpib_board *board, struct nec7210_priv *priv,
return retval ? retval : length;
}
static ssize_t dma_write(struct gpib_board *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;
@ -767,7 +772,7 @@ static ssize_t dma_write(struct gpib_board *board, struct nec7210_priv *priv, ui
}
#endif
int nec7210_write(struct gpib_board *board, struct nec7210_priv *priv,
uint8_t *buffer, size_t length, int send_eoi,
u8 *buffer, size_t length, int send_eoi,
size_t *bytes_written)
{
int retval = 0;
@ -805,7 +810,8 @@ int nec7210_write(struct gpib_board *board, struct nec7210_priv *priv,
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.
@ -827,7 +833,7 @@ int nec7210_write(struct gpib_board *board, struct nec7210_priv *priv,
EXPORT_SYMBOL(nec7210_write);
/*
* interrupt service routine
* interrupt service routine
*/
irqreturn_t nec7210_interrupt(struct gpib_board *board, struct nec7210_priv *priv)
{
@ -932,13 +938,13 @@ irqreturn_t nec7210_interrupt_have_status(struct gpib_board *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)
@ -1012,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);
@ -1031,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;
@ -1043,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;
@ -1057,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);
@ -1075,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;
@ -1087,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;

View file

@ -74,7 +74,8 @@ 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)
@ -232,7 +233,8 @@ static int ni_usb_nonblocking_receive_bulk_msg(struct ni_usb_priv *ni_priv,
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 +242,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);
}
@ -586,7 +589,7 @@ static int ni_usb_write_registers(struct ni_usb_priv *ni_priv,
}
// interface functions
static int ni_usb_read(struct gpib_board *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;
@ -684,7 +687,8 @@ static int ni_usb_read(struct gpib_board *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;
@ -716,7 +720,7 @@ static int ni_usb_read(struct gpib_board *board, uint8_t *buffer, size_t length,
return retval;
}
static int ni_usb_write(struct gpib_board *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;
@ -794,7 +798,8 @@ static int ni_usb_write(struct gpib_board *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;
@ -819,7 +824,7 @@ static int ni_usb_write(struct gpib_board *board, uint8_t *buffer, size_t length
return retval;
}
static int ni_usb_command_chunk(struct gpib_board *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;
@ -893,7 +898,8 @@ static int ni_usb_command_chunk(struct gpib_board *board, uint8_t *buffer, size_
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;
@ -912,7 +918,7 @@ static int ni_usb_command_chunk(struct gpib_board *board, uint8_t *buffer, size_
return 0;
}
static int ni_usb_command(struct gpib_board *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;
@ -1049,7 +1055,7 @@ static int ni_usb_go_to_standby(struct gpib_board *board)
return 0;
}
static void ni_usb_request_system_control(struct gpib_board *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;
@ -1059,7 +1065,7 @@ static void ni_usb_request_system_control(struct gpib_board *board, int request_
unsigned int ibsta;
if (!ni_priv->bus_interface)
return; // -ENODEV;
return -ENODEV;
usb_dev = interface_to_usbdev(ni_priv->bus_interface);
if (request_control) {
writes[i].device = NIUSB_SUBDEV_TNT4882;
@ -1091,12 +1097,12 @@ static void ni_usb_request_system_control(struct gpib_board *board, int request_
retval = ni_usb_write_registers(ni_priv, writes, i, &ibsta);
if (retval < 0) {
dev_err(&usb_dev->dev, "register write failed, retval=%i\n", retval);
return; // 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?
@ -1176,7 +1182,7 @@ static void ni_usb_remote_enable(struct gpib_board *board, int enable)
return;// 0;
}
static int ni_usb_enable_eos(struct gpib_board *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;
@ -1192,8 +1198,9 @@ static int ni_usb_enable_eos(struct gpib_board *board, uint8_t eos_byte, int com
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;
@ -1334,7 +1341,7 @@ static int ni_usb_secondary_address(struct gpib_board *board, unsigned int addre
return 0;
}
static int ni_usb_parallel_poll(struct gpib_board *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;
@ -1389,7 +1396,7 @@ static int ni_usb_parallel_poll(struct gpib_board *board, uint8_t *result)
return retval;
}
static void ni_usb_parallel_poll_configure(struct gpib_board *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;
@ -1467,7 +1474,7 @@ static void ni_usb_serial_poll_response(struct gpib_board *board, u8 status)
return;// 0;
}
static uint8_t ni_usb_serial_poll_status(struct gpib_board *board)
static u8 ni_usb_serial_poll_status(struct gpib_board *board)
{
return 0;
}
@ -2045,8 +2052,10 @@ static int ni_usb_hs_wait_for_ready(struct ni_usb_priv *ni_priv)
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, "unexpected data: buffer[%i]=0x%x, expected 0x0, 0x1, 0x7 or 0x8\n",
@ -2127,7 +2136,8 @@ ready_out:
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
@ -2198,14 +2208,14 @@ 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(struct gpib_board *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, index;
@ -2343,8 +2353,10 @@ 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) {
@ -2361,7 +2373,7 @@ static void ni_usb_detach(struct gpib_board *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,

View file

@ -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,

View file

@ -90,7 +90,7 @@ irqreturn_t pc2a_interrupt(int irq, void *arg)
}
// wrappers for interface functions
static int pc2_read(struct gpib_board *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;
@ -98,7 +98,7 @@ static int pc2_read(struct gpib_board *board, uint8_t *buffer, size_t length, in
return nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read);
}
static int pc2_write(struct gpib_board *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;
@ -106,7 +106,8 @@ static int pc2_write(struct gpib_board *board, uint8_t *buffer, size_t length, i
return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written);
}
static int pc2_command(struct gpib_board *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;
@ -127,11 +128,11 @@ static int pc2_go_to_standby(struct gpib_board *board)
return nec7210_go_to_standby(board, &priv->nec7210_priv);
}
static void pc2_request_system_control(struct gpib_board *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(struct gpib_board *board, int assert)
@ -148,7 +149,7 @@ static void pc2_remote_enable(struct gpib_board *board, int enable)
nec7210_remote_enable(board, &priv->nec7210_priv, enable);
}
static int pc2_enable_eos(struct gpib_board *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;
@ -183,14 +184,14 @@ static int pc2_secondary_address(struct gpib_board *board, unsigned int address,
return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable);
}
static int pc2_parallel_poll(struct gpib_board *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(struct gpib_board *board, uint8_t config)
static void pc2_parallel_poll_configure(struct gpib_board *board, u8 config)
{
struct pc2_priv *priv = board->private_data;
@ -204,14 +205,14 @@ static void pc2_parallel_poll_response(struct gpib_board *board, int ist)
nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist);
}
static void pc2_serial_poll_response(struct gpib_board *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(struct gpib_board *board)
static u8 pc2_serial_poll_status(struct gpib_board *board)
{
struct pc2_priv *priv = board->private_data;
@ -251,7 +252,7 @@ static void free_private(struct gpib_board *board)
board->private_data = NULL;
}
static int pc2_generic_attach(struct gpib_board *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;
@ -267,8 +268,9 @@ static int pc2_generic_attach(struct gpib_board *board, const gpib_board_config_
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)
// driver needs to be adapted to use isa_register_driver to get a struct device*
@ -294,7 +296,7 @@ static int pc2_generic_attach(struct gpib_board *board, const gpib_board_config_
return 0;
}
static int pc2_attach(struct gpib_board *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;
@ -365,7 +367,7 @@ static void pc2_detach(struct gpib_board *board)
free_private(board);
}
static int pc2a_common_attach(struct gpib_board *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;
@ -459,17 +461,17 @@ static int pc2a_common_attach(struct gpib_board *board, const gpib_board_config_
return 0;
}
static int pc2a_attach(struct gpib_board *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);
}
static int pc2a_cb7210_attach(struct gpib_board *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);
}
static int pc2_2a_attach(struct gpib_board *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);
}
@ -517,7 +519,7 @@ static void pc2_2a_detach(struct gpib_board *board)
pc2a_common_detach(board, pc2_2a_iosize);
}
static gpib_interface_t pc2_interface = {
static struct gpib_interface pc2_interface = {
.name = "pcII",
.attach = pc2_attach,
.detach = pc2_detach,
@ -545,7 +547,7 @@ static gpib_interface_t pc2_interface = {
.return_to_local = pc2_return_to_local,
};
static gpib_interface_t pc2a_interface = {
static struct gpib_interface pc2a_interface = {
.name = "pcIIa",
.attach = pc2a_attach,
.detach = pc2a_detach,
@ -573,7 +575,7 @@ static gpib_interface_t pc2a_interface = {
.return_to_local = pc2_return_to_local,
};
static gpib_interface_t pc2a_cb7210_interface = {
static struct gpib_interface pc2a_cb7210_interface = {
.name = "pcIIa_cb7210",
.attach = pc2a_cb7210_attach,
.detach = pc2a_detach,
@ -601,7 +603,7 @@ static gpib_interface_t pc2a_cb7210_interface = {
.return_to_local = pc2_return_to_local,
};
static gpib_interface_t pc2_2a_interface = {
static struct gpib_interface pc2_2a_interface = {
.name = "pcII_IIa",
.attach = pc2_2a_attach,
.detach = pc2_2a_detach,

View file

@ -53,7 +53,8 @@ int tms9914_take_control(struct gpib_board *board, struct tms9914_priv *priv, in
}
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
@ -66,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(struct gpib_board *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;
@ -116,8 +118,8 @@ void tms9914_remote_enable(struct gpib_board *board, struct tms9914_priv *priv,
}
EXPORT_SYMBOL_GPL(tms9914_remote_enable);
void tms9914_request_system_control(struct gpib_board *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);
@ -125,6 +127,7 @@ void tms9914_request_system_control(struct gpib_board *board, struct tms9914_pri
clear_bit(CIC_NUM, &board->status);
write_byte(priv, AUX_RLC, AUXCR);
}
return 0;
}
EXPORT_SYMBOL_GPL(tms9914_request_system_control);
@ -192,7 +195,7 @@ void tms9914_release_holdoff(struct tms9914_priv *priv)
}
EXPORT_SYMBOL_GPL(tms9914_release_holdoff);
int tms9914_enable_eos(struct gpib_board *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;
@ -209,7 +212,7 @@ void tms9914_disable_eos(struct gpib_board *board, struct tms9914_priv *priv)
}
EXPORT_SYMBOL(tms9914_disable_eos);
int tms9914_parallel_poll(struct gpib_board *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);
@ -235,7 +238,7 @@ static void set_ppoll_reg(struct tms9914_priv *priv, int enable,
}
void tms9914_parallel_poll_configure(struct gpib_board *board,
struct tms9914_priv *priv, uint8_t config)
struct tms9914_priv *priv, u8 config)
{
priv->ppoll_enable = (config & PPC_DISABLE) == 0;
priv->ppoll_line = (config & PPC_DIO_MASK) + 1;
@ -251,7 +254,8 @@ void tms9914_parallel_poll_response(struct gpib_board *board,
}
EXPORT_SYMBOL(tms9914_parallel_poll_response);
void tms9914_serial_poll_response(struct gpib_board *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;
@ -266,7 +270,7 @@ void tms9914_serial_poll_response(struct gpib_board *board, struct tms9914_priv
}
EXPORT_SYMBOL(tms9914_serial_poll_response);
uint8_t tms9914_serial_poll_status(struct gpib_board *board, struct tms9914_priv *priv)
u8 tms9914_serial_poll_status(struct gpib_board *board, struct tms9914_priv *priv)
{
u8 status;
unsigned long flags;
@ -279,7 +283,8 @@ uint8_t tms9914_serial_poll_status(struct gpib_board *board, struct tms9914_priv
}
EXPORT_SYMBOL(tms9914_serial_poll_status);
int tms9914_primary_address(struct gpib_board *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);
@ -321,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;
@ -416,7 +422,7 @@ int tms9914_line_status(const struct gpib_board *board, struct tms9914_priv *pri
}
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;
@ -449,7 +455,8 @@ static int wait_for_read_byte(struct gpib_board *board, struct tms9914_priv *pri
return 0;
}
static inline uint8_t tms9914_read_data_in(struct gpib_board *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;
@ -480,7 +487,7 @@ static inline uint8_t tms9914_read_data_in(struct gpib_board *board, struct tms9
return data;
}
static int pio_read(struct gpib_board *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(struct gpib_board *board, struct tms9914_priv *priv, uint8_t
return retval;
}
int tms9914_read(struct gpib_board *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;
@ -561,7 +568,7 @@ static int pio_write_wait(struct gpib_board *board, struct tms9914_priv *priv)
return 0;
}
static int pio_write(struct gpib_board *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;
@ -585,8 +592,8 @@ static int pio_write(struct gpib_board *board, struct tms9914_priv *priv, uint8_
return length;
}
int tms9914_write(struct gpib_board *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;
@ -620,7 +627,8 @@ int tms9914_write(struct gpib_board *board, struct tms9914_priv *priv, uint8_t *
}
EXPORT_SYMBOL(tms9914_write);
static void check_my_address_state(struct gpib_board *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;
@ -655,7 +663,7 @@ static void check_my_address_state(struct gpib_board *board, struct tms9914_priv
}
}
int tms9914_command(struct gpib_board *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;
@ -736,9 +744,10 @@ irqreturn_t tms9914_interrupt_have_status(struct gpib_board *board, struct tms99
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);
@ -764,7 +773,7 @@ irqreturn_t tms9914_interrupt_have_status(struct gpib_board *board, struct tms99
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;
}
@ -774,18 +783,18 @@ irqreturn_t tms9914_interrupt_have_status(struct gpib_board *board, struct tms99
}
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);
@ -859,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)
@ -876,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)

View file

@ -236,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;
@ -258,7 +258,8 @@ static void tnt4882_release_holdoff(struct gpib_board *board, struct tnt4882_pri
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*/ {
@ -274,7 +275,7 @@ static void tnt4882_release_holdoff(struct gpib_board *board, struct tnt4882_pri
}
}
static int tnt4882_accel_read(struct gpib_board *board, uint8_t *buffer, size_t length, int *end,
static int tnt4882_accel_read(struct gpib_board *board, u8 *buffer, size_t length, int *end,
size_t *bytes_read)
{
size_t count = 0;
@ -384,7 +385,8 @@ static int tnt4882_accel_read(struct gpib_board *board, uint8_t *buffer, size_t
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)
*/
@ -448,7 +450,7 @@ static int write_wait(struct gpib_board *board, struct tnt4882_priv *tnt_priv,
return 0;
}
static int generic_write(struct gpib_board *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;
@ -531,7 +533,8 @@ static int generic_write(struct gpib_board *board, uint8_t *buffer, size_t lengt
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);
@ -539,13 +542,13 @@ static int generic_write(struct gpib_board *board, uint8_t *buffer, size_t lengt
return retval;
}
static int tnt4882_accel_write(struct gpib_board *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);
}
static int tnt4882_command(struct gpib_board *board, uint8_t *buffer, size_t length,
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);
@ -566,7 +569,7 @@ static irqreturn_t tnt4882_internal_interrupt(struct gpib_board *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);
@ -592,7 +595,7 @@ static irqreturn_t tnt4882_interrupt(int irq, void *arg)
}
// wrappers for interface functions
static int tnt4882_read(struct gpib_board *board, uint8_t *buffer, size_t length, int *end,
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;
@ -612,7 +615,7 @@ static int tnt4882_read(struct gpib_board *board, uint8_t *buffer, size_t length
return retval;
}
static int tnt4882_write(struct gpib_board *board, uint8_t *buffer, size_t length, int send_eoi,
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;
@ -620,7 +623,7 @@ static int tnt4882_write(struct gpib_board *board, uint8_t *buffer, size_t lengt
return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written);
}
static int tnt4882_command_unaccel(struct gpib_board *board, uint8_t *buffer,
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;
@ -642,19 +645,21 @@ static int tnt4882_go_to_standby(struct gpib_board *board)
return nec7210_go_to_standby(board, &priv->nec7210_priv);
}
static void tnt4882_request_system_control(struct gpib_board *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;
}
static void tnt4882_interface_clear(struct gpib_board *board, int assert)
@ -671,7 +676,7 @@ static void tnt4882_remote_enable(struct gpib_board *board, int enable)
nec7210_remote_enable(board, &priv->nec7210_priv, enable);
}
static int tnt4882_enable_eos(struct gpib_board *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;
@ -718,7 +723,7 @@ static int tnt4882_secondary_address(struct gpib_board *board, unsigned int addr
return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable);
}
static int tnt4882_parallel_poll(struct gpib_board *board, uint8_t *result)
static int tnt4882_parallel_poll(struct gpib_board *board, u8 *result)
{
struct tnt4882_priv *tnt_priv = board->private_data;
@ -735,7 +740,7 @@ static int tnt4882_parallel_poll(struct gpib_board *board, uint8_t *result)
}
}
static void tnt4882_parallel_poll_configure(struct gpib_board *board, uint8_t config)
static void tnt4882_parallel_poll_configure(struct gpib_board *board, u8 config)
{
struct tnt4882_priv *priv = board->private_data;
@ -760,17 +765,18 @@ static void tnt4882_parallel_poll_response(struct gpib_board *board, int ist)
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
*/
static void tnt4882_serial_poll_response(struct gpib_board *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(struct gpib_board *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;
@ -788,7 +794,8 @@ static void tnt4882_serial_poll_response2(struct gpib_board *board, uint8_t stat
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.
@ -796,7 +803,8 @@ static void tnt4882_serial_poll_response2(struct gpib_board *board, uint8_t stat
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.
*/
@ -804,7 +812,7 @@ static void tnt4882_serial_poll_response2(struct gpib_board *board, uint8_t stat
spin_unlock_irqrestore(&board->spinlock, flags);
}
static uint8_t tnt4882_serial_poll_status(struct gpib_board *board)
static u8 tnt4882_serial_poll_status(struct gpib_board *board)
{
struct tnt4882_priv *priv = board->private_data;
@ -898,7 +906,7 @@ static void tnt4882_init(struct tnt4882_priv *tnt_priv, const struct gpib_board
tnt_writeb(tnt_priv, tnt_priv->imr0_bits, IMR0);
}
static int ni_pci_attach(struct gpib_board *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;
@ -1019,7 +1027,7 @@ static int ni_isapnp_find(struct pnp_dev **dev)
return 0;
}
static int ni_isa_attach_common(struct gpib_board *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;
@ -1075,17 +1083,17 @@ static int ni_isa_attach_common(struct gpib_board *board, const gpib_board_confi
return 0;
}
static int ni_tnt_isa_attach(struct gpib_board *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);
}
static int ni_nat4882_isa_attach(struct gpib_board *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);
}
static int ni_nec_isa_attach(struct gpib_board *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);
}
@ -1116,7 +1124,7 @@ static int tnt4882_pci_probe(struct pci_dev *dev, const struct pci_device_id *id
return 0;
}
static gpib_interface_t ni_pci_interface = {
static struct gpib_interface ni_pci_interface = {
.name = "ni_pci",
.attach = ni_pci_attach,
.detach = ni_pci_detach,
@ -1144,7 +1152,7 @@ static gpib_interface_t ni_pci_interface = {
.return_to_local = tnt4882_return_to_local,
};
static gpib_interface_t ni_pci_accel_interface = {
static struct gpib_interface ni_pci_accel_interface = {
.name = "ni_pci_accel",
.attach = ni_pci_attach,
.detach = ni_pci_detach,
@ -1172,7 +1180,7 @@ static gpib_interface_t ni_pci_accel_interface = {
.return_to_local = tnt4882_return_to_local,
};
static gpib_interface_t ni_isa_interface = {
static struct gpib_interface ni_isa_interface = {
.name = "ni_isa",
.attach = ni_tnt_isa_attach,
.detach = ni_isa_detach,
@ -1200,7 +1208,7 @@ static gpib_interface_t ni_isa_interface = {
.return_to_local = tnt4882_return_to_local,
};
static gpib_interface_t ni_nat4882_isa_interface = {
static struct gpib_interface ni_nat4882_isa_interface = {
.name = "ni_nat4882_isa",
.attach = ni_nat4882_isa_attach,
.detach = ni_isa_detach,
@ -1228,7 +1236,7 @@ static gpib_interface_t ni_nat4882_isa_interface = {
.return_to_local = tnt4882_return_to_local,
};
static gpib_interface_t ni_nec_isa_interface = {
static struct gpib_interface ni_nec_isa_interface = {
.name = "ni_nec_isa",
.attach = ni_nec_isa_attach,
.detach = ni_isa_detach,
@ -1256,7 +1264,7 @@ static gpib_interface_t ni_nec_isa_interface = {
.return_to_local = tnt4882_return_to_local,
};
static gpib_interface_t ni_isa_accel_interface = {
static struct gpib_interface ni_isa_accel_interface = {
.name = "ni_isa_accel",
.attach = ni_tnt_isa_attach,
.detach = ni_isa_detach,
@ -1284,7 +1292,7 @@ static gpib_interface_t ni_isa_accel_interface = {
.return_to_local = tnt4882_return_to_local,
};
static gpib_interface_t ni_nat4882_isa_accel_interface = {
static struct gpib_interface ni_nat4882_isa_accel_interface = {
.name = "ni_nat4882_isa_accel",
.attach = ni_nat4882_isa_attach,
.detach = ni_isa_detach,
@ -1312,7 +1320,7 @@ static gpib_interface_t ni_nat4882_isa_accel_interface = {
.return_to_local = tnt4882_return_to_local,
};
static gpib_interface_t ni_nec_isa_accel_interface = {
static struct gpib_interface ni_nec_isa_accel_interface = {
.name = "ni_nec_isa_accel",
.attach = ni_nec_isa_attach,
.detach = ni_isa_detach,
@ -1371,8 +1379,8 @@ MODULE_DEVICE_TABLE(pnp, tnt4882_pnp_table);
#endif
#ifdef CONFIG_GPIB_PCMCIA
static gpib_interface_t ni_pcmcia_interface;
static gpib_interface_t ni_pcmcia_accel_interface;
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
@ -1581,10 +1589,10 @@ 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)
{
@ -1611,9 +1619,9 @@ 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)
{
@ -1702,7 +1710,7 @@ static void __exit exit_ni_gpib_cs(void)
static const int pcmcia_gpib_iosize = 32;
static int ni_pcmcia_attach(struct gpib_board *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;
@ -1769,7 +1777,7 @@ static void ni_pcmcia_detach(struct gpib_board *board)
tnt4882_free_private(board);
}
static gpib_interface_t ni_pcmcia_interface = {
static struct gpib_interface ni_pcmcia_interface = {
.name = "ni_pcmcia",
.attach = ni_pcmcia_attach,
.detach = ni_pcmcia_detach,
@ -1797,7 +1805,7 @@ static gpib_interface_t ni_pcmcia_interface = {
.return_to_local = tnt4882_return_to_local,
};
static gpib_interface_t ni_pcmcia_accel_interface = {
static struct gpib_interface ni_pcmcia_accel_interface = {
.name = "ni_pcmcia_accel",
.attach = ni_pcmcia_attach,
.detach = ni_pcmcia_detach,

View file

@ -4,8 +4,8 @@
* copyright : (C) 2002 by Frank Mori Hess
***************************************************************************/
#ifndef _GPIB_USER_H
#define _GPIB_USER_H
#ifndef _GPIB_H
#define _GPIB_H
#define GPIB_MAX_NUM_BOARDS 16
#define GPIB_MAX_NUM_DESCRIPTORS 0x1000
@ -53,48 +53,6 @@ enum ibsta_bits {
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 {
@ -130,9 +88,9 @@ enum bus_control_line {
enum cmd_byte {
GTL = 0x1, /* go to local */
SDC = 0x4, /* selected device clear */
PPConfig = 0x5,
PP_CONFIG = 0x5,
#ifndef PPC
PPC = PPConfig, /* parallel poll configure */
PPC = PP_CONFIG, /* parallel poll configure */
#endif
GET = 0x8, /* group execute trigger */
TCT = 0x9, /* take control */
@ -166,24 +124,24 @@ static inline unsigned int gpib_address_restrict(unsigned int addr)
return addr;
}
static inline uint8_t MLA(unsigned int addr)
static inline __u8 MLA(unsigned int addr)
{
return gpib_address_restrict(addr) | LAD;
}
static inline uint8_t MTA(unsigned int addr)
static inline __u8 MTA(unsigned int addr)
{
return gpib_address_restrict(addr) | TAD;
}
static inline uint8_t MSA(unsigned int addr)
static inline __u8 MSA(unsigned int addr)
{
return gpib_address_restrict(addr) | SAD;
return (addr & 0x1f) | SAD;
}
static inline uint8_t PPE_byte(unsigned int dio_line, int sense)
static inline __u8 PPE_byte(unsigned int dio_line, int sense)
{
uint8_t cmd;
__u8 cmd;
cmd = PPE;
if (sense)
@ -192,47 +150,42 @@ static inline uint8_t PPE_byte(unsigned int dio_line, int sense)
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)
static inline int is_PPE(__u8 command)
{
return (command & 0x70) == 0x60;
}
static inline int is_PPD(uint8_t command)
static inline int is_PPD(__u8 command)
{
return (command & 0x70) == 0x70;
}
static inline int in_addressed_command_group(uint8_t command)
static inline int in_addressed_command_group(__u8 command)
{
return (command & 0x70) == 0x0;
}
static inline int in_universal_command_group(uint8_t command)
static inline int in_universal_command_group(__u8 command)
{
return (command & 0x70) == 0x10;
}
static inline int in_listen_address_group(uint8_t command)
static inline int in_listen_address_group(__u8 command)
{
return (command & 0x60) == 0x20;
}
static inline int in_talk_address_group(uint8_t command)
static inline int in_talk_address_group(__u8 command)
{
return (command & 0x60) == 0x40;
}
static inline int in_primary_command_group(uint8_t command)
static inline int in_primary_command_group(__u8 command)
{
return in_addressed_command_group(command) ||
in_universal_command_group(command) ||
@ -253,75 +206,73 @@ static inline int gpib_address_equal(unsigned int pad1, int sad1, unsigned int p
}
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 */
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 */
Iba7BitEOS = 0x1000 /* board only. Returns 1 if board supports 7 bit eos compares*/
IBA_7_BIT_EOS = 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 */
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 {
@ -335,18 +286,17 @@ enum {
};
enum gpib_events {
EventNone = 0,
EventDevTrg = 1,
EventDevClr = 2,
EventIFC = 3
EVENT_NONE = 0,
EVENT_DEV_TRG = 1,
EVENT_DEV_CLR = 2,
EVENT_IFC = 3
};
enum gpib_stb {
IbStbRQS = 0x40, /* IEEE 488.1 & 2 */
IbStbESB = 0x20, /* IEEE 488.2 only */
IbStbMAV = 0x10 /* IEEE 488.2 only */
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_USER_H */
#endif /* _GPIB_H */
/* Check for errors */

View file

@ -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 */

View file

@ -1165,8 +1165,8 @@ static int gb_camera_debugfs_init(struct gb_camera *gcam)
gcam->debugfs.buffers[i].length = 0;
debugfs_create_file_aux(entry->name, entry->mask,
gcam->debugfs.root, gcam, entry,
&gb_camera_debugfs_ops);
gcam->debugfs.root, gcam, entry,
&gb_camera_debugfs_ops);
}
return 0;

View file

@ -123,17 +123,11 @@ static int fw_mgmt_interface_fw_version_operation(struct fw_mgmt *fw_mgmt,
fw_info->major = le16_to_cpu(response.major);
fw_info->minor = le16_to_cpu(response.minor);
strscpy_pad(fw_info->firmware_tag, response.firmware_tag);
/*
* The firmware-tag should be NULL terminated, otherwise throw error but
* don't fail.
*/
if (fw_info->firmware_tag[GB_FIRMWARE_TAG_MAX_SIZE - 1] != '\0') {
ret = strscpy_pad(fw_info->firmware_tag, response.firmware_tag);
if (ret == -E2BIG)
dev_err(fw_mgmt->parent,
"fw-version: firmware-tag is not NULL terminated\n");
fw_info->firmware_tag[GB_FIRMWARE_TAG_MAX_SIZE - 1] = '\0';
}
"fw-version: truncated firmware tag: %s\n",
fw_info->firmware_tag);
return 0;
}
@ -152,14 +146,12 @@ static int fw_mgmt_load_and_validate_operation(struct fw_mgmt *fw_mgmt,
}
request.load_method = load_method;
strscpy_pad(request.firmware_tag, tag);
/*
* The firmware-tag should be NULL terminated, otherwise throw error and
* fail.
*/
if (request.firmware_tag[GB_FIRMWARE_TAG_MAX_SIZE - 1] != '\0') {
dev_err(fw_mgmt->parent, "load-and-validate: firmware-tag is not NULL terminated\n");
ret = strscpy_pad(request.firmware_tag, tag);
if (ret == -E2BIG) {
dev_err(fw_mgmt->parent,
"load-and-validate: truncated firmware tag: %s\n",
request.firmware_tag);
return -EINVAL;
}
@ -248,14 +240,11 @@ static int fw_mgmt_backend_fw_version_operation(struct fw_mgmt *fw_mgmt,
struct gb_fw_mgmt_backend_fw_version_response response;
int ret;
strscpy_pad(request.firmware_tag, fw_info->firmware_tag);
/*
* The firmware-tag should be NULL terminated, otherwise throw error and
* fail.
*/
if (request.firmware_tag[GB_FIRMWARE_TAG_MAX_SIZE - 1] != '\0') {
dev_err(fw_mgmt->parent, "backend-version: firmware-tag is not NULL terminated\n");
ret = strscpy_pad(request.firmware_tag, fw_info->firmware_tag);
if (ret == -E2BIG) {
dev_err(fw_mgmt->parent,
"backend-fw-version: truncated firmware tag: %s\n",
request.firmware_tag);
return -EINVAL;
}
@ -302,13 +291,10 @@ static int fw_mgmt_backend_fw_update_operation(struct fw_mgmt *fw_mgmt,
int ret;
ret = strscpy_pad(request.firmware_tag, tag);
/*
* The firmware-tag should be NULL terminated, otherwise throw error and
* fail.
*/
if (ret == -E2BIG) {
dev_err(fw_mgmt->parent, "backend-update: firmware-tag is not NULL terminated\n");
dev_err(fw_mgmt->parent,
"backend-fw-update: truncated firmware tag: %s\n",
request.firmware_tag);
return -EINVAL;
}

View file

@ -185,8 +185,8 @@ static int gb_gpio_get_value_operation(struct gb_gpio_controller *ggc,
return 0;
}
static void gb_gpio_set_value_operation(struct gb_gpio_controller *ggc,
u8 which, bool value_high)
static int gb_gpio_set_value_operation(struct gb_gpio_controller *ggc,
u8 which, bool value_high)
{
struct device *dev = &ggc->gbphy_dev->dev;
struct gb_gpio_set_value_request request;
@ -195,7 +195,7 @@ static void gb_gpio_set_value_operation(struct gb_gpio_controller *ggc,
if (ggc->lines[which].direction == 1) {
dev_warn(dev, "refusing to set value of input gpio %u\n",
which);
return;
return -EPERM;
}
request.which = which;
@ -204,10 +204,12 @@ static void gb_gpio_set_value_operation(struct gb_gpio_controller *ggc,
&request, sizeof(request), NULL, 0);
if (ret) {
dev_err(dev, "failed to set value of gpio %u\n", which);
return;
return ret;
}
ggc->lines[which].value = request.value;
return 0;
}
static int gb_gpio_set_debounce_operation(struct gb_gpio_controller *ggc,
@ -457,11 +459,11 @@ static int gb_gpio_get(struct gpio_chip *chip, unsigned int offset)
return ggc->lines[which].value;
}
static void gb_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
static int gb_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
{
struct gb_gpio_controller *ggc = gpiochip_get_data(chip);
gb_gpio_set_value_operation(ggc, (u8)offset, !!value);
return gb_gpio_set_value_operation(ggc, (u8)offset, !!value);
}
static int gb_gpio_set_config(struct gpio_chip *chip, unsigned int offset,
@ -555,7 +557,7 @@ static int gb_gpio_probe(struct gbphy_device *gbphy_dev,
gpio->direction_input = gb_gpio_direction_input;
gpio->direction_output = gb_gpio_direction_output;
gpio->get = gb_gpio_get;
gpio->set = gb_gpio_set;
gpio->set_rv = gb_gpio_set;
gpio->set_config = gb_gpio_set_config;
gpio->base = -1; /* Allocate base dynamically */
gpio->ngpio = ggc->line_max + 1;

View file

@ -389,7 +389,7 @@ void update_bmc_sta(struct adapter *padapter)
psta->qos_option = 0;
psta->htpriv.ht_option = false;
psta->ieee8021x_blocked = 0;
psta->ieee8021x_blocked = false;
memset((void *)&psta->sta_stats, 0, sizeof(struct stainfo_stats));

View file

@ -8,14 +8,14 @@
#include <rtw_btcoex.h>
#include <hal_btcoex.h>
void rtw_btcoex_MediaStatusNotify(struct adapter *padapter, u8 mediaStatus)
void rtw_btcoex_MediaStatusNotify(struct adapter *padapter, u8 media_status)
{
if ((mediaStatus == RT_MEDIA_CONNECT)
if ((media_status == RT_MEDIA_CONNECT)
&& (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == true)) {
rtw_hal_set_hwreg(padapter, HW_VAR_DL_RSVD_PAGE, NULL);
}
hal_btcoex_MediaStatusNotify(padapter, mediaStatus);
hal_btcoex_MediaStatusNotify(padapter, media_status);
}
void rtw_btcoex_HaltNotify(struct adapter *padapter)
@ -52,14 +52,14 @@ void rtw_btcoex_RejectApAggregatedPacket(struct adapter *padapter, u8 enable)
void rtw_btcoex_LPS_Enter(struct adapter *padapter)
{
struct pwrctrl_priv *pwrpriv;
u8 lpsVal;
u8 lps_val;
pwrpriv = adapter_to_pwrctl(padapter);
pwrpriv->bpower_saving = true;
lpsVal = hal_btcoex_LpsVal(padapter);
rtw_set_ps_mode(padapter, PS_MODE_MIN, 0, lpsVal, "BTCOEX");
lps_val = hal_btcoex_LpsVal(padapter);
rtw_set_ps_mode(padapter, PS_MODE_MIN, 0, lps_val, "BTCOEX");
}
void rtw_btcoex_LPS_Leave(struct adapter *padapter)

View file

@ -273,9 +273,9 @@ struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue)
/* spin_lock_bh(&(queue->lock)); */
spin_lock_irqsave(&queue->lock, irqL);
if (list_empty(&queue->queue))
if (list_empty(&queue->queue)) {
obj = NULL;
else {
} else {
obj = container_of(get_next(&queue->queue), struct cmd_obj, list);
list_del_init(&obj->list);
}
@ -695,7 +695,6 @@ u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork)
/* for ies is fix buf size */
t_len = sizeof(struct wlan_bssid_ex);
/* for hidden ap to set fw_state here */
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) != true) {
switch (ndis_network_mode) {
@ -738,7 +737,6 @@ u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork)
psecnetwork->ie_length = rtw_restruct_sec_ie(padapter, &pnetwork->network.ies[0], &psecnetwork->ies[0], pnetwork->network.ie_length);
pqospriv->qos_option = 0;
if (pregistrypriv->wmm_enable) {
@ -1032,7 +1030,6 @@ u8 rtw_reset_securitypriv_cmd(struct adapter *padapter)
init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
/* rtw_enqueue_cmd(pcmdpriv, ph2c); */
res = rtw_enqueue_cmd(pcmdpriv, ph2c);
exit:
@ -1099,7 +1096,6 @@ u8 rtw_dynamic_chk_wk_cmd(struct adapter *padapter)
pdrvextra_cmd_parm->pbuf = NULL;
init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
/* rtw_enqueue_cmd(pcmdpriv, ph2c); */
res = rtw_enqueue_cmd(pcmdpriv, ph2c);
exit:
@ -1256,7 +1252,6 @@ static void dynamic_chk_wk_hdl(struct adapter *padapter)
/* */
hal_btcoex_Handler(padapter);
/* always call rtw_ps_processor() at last one. */
rtw_ps_processor(padapter);
}
@ -1367,7 +1362,6 @@ u8 rtw_dm_in_lps_wk_cmd(struct adapter *padapter)
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
u8 res = _SUCCESS;
ph2c = rtw_zmalloc(sizeof(struct cmd_obj));
if (!ph2c) {
res = _FAIL;
@ -1850,7 +1844,6 @@ void rtw_createbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd)
spin_lock_bh(&pmlmepriv->lock);
if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
psta = rtw_get_stainfo(&padapter->stapriv, pnetwork->mac_address);
if (!psta) {

View file

@ -988,11 +988,10 @@ void rtw_macaddr_cfg(struct device *dev, u8 *mac_addr)
if (is_broadcast_ether_addr(mac) || is_zero_ether_addr(mac)) {
addr = of_get_property(np, "local-mac-address", &len);
if (addr && len == ETH_ALEN) {
if (addr && len == ETH_ALEN)
ether_addr_copy(mac_addr, addr);
} else {
else
eth_random_addr(mac_addr);
}
}
}

View file

@ -2022,12 +2022,12 @@ signed int rtw_restruct_sec_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, u
}
iEntry = SecIsInPMKIDList(adapter, pmlmepriv->assoc_bssid);
if (iEntry < 0) {
if (iEntry < 0)
return ielength;
} else {
if (authmode == WLAN_EID_RSN)
ielength = rtw_append_pmkid(adapter, iEntry, out_ie, ielength);
}
if (authmode == WLAN_EID_RSN)
ielength = rtw_append_pmkid(adapter, iEntry, out_ie, ielength);
return ielength;
}

View file

@ -3511,7 +3511,7 @@ void issue_action_BA(struct adapter *padapter, unsigned char *raddr, unsigned ch
/* if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.mac_address)) != NULL) */
psta = rtw_get_stainfo(pstapriv, raddr);
if (psta) {
start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07]&0xfff) + 1;
start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07] % 4096u) + 1;
psta->BA_starting_seqctrl[status & 0x07] = start_seq;

View file

@ -8,7 +8,6 @@
#include <hal_data.h>
#include <linux/jiffies.h>
void _ips_enter(struct adapter *padapter)
{
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
@ -56,9 +55,8 @@ int _ips_leave(struct adapter *padapter)
pwrpriv->ips_leave_cnts++;
result = rtw_ips_pwr_up(padapter);
if (result == _SUCCESS) {
if (result == _SUCCESS)
pwrpriv->rf_pwrstate = rf_on;
}
pwrpriv->bips_processing = false;
pwrpriv->bkeepfwalive = false;
@ -549,9 +547,8 @@ void LeaveAllPowerSaveMode(struct adapter *Adapter)
LPS_Leave_check(Adapter);
} else {
if (adapter_to_pwrctl(Adapter)->rf_pwrstate == rf_off) {
if (adapter_to_pwrctl(Adapter)->rf_pwrstate == rf_off)
ips_leave(Adapter);
}
}
}
@ -996,7 +993,6 @@ void rtw_init_pwrctrl_priv(struct adapter *padapter)
pwrctrlpriv->wowlan_ap_mode = false;
}
void rtw_free_pwrctrl_priv(struct adapter *adapter)
{
}

View file

@ -1641,7 +1641,7 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
struct dvobj_priv *psdpriv = padapter->dvobj;
struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
u8 wsize = preorder_ctrl->wsize_b;
u16 wend = (preorder_ctrl->indicate_seq + wsize - 1) & 0xFFF;/* 4096; */
u16 wend = (preorder_ctrl->indicate_seq + wsize - 1) % 4096u;
/* Rx Reorder initialize condition. */
if (preorder_ctrl->indicate_seq == 0xFFFF)
@ -1657,7 +1657,7 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
/* 2. Incoming SeqNum is larger than the WinEnd => Window shift N */
/* */
if (SN_EQUAL(seq_num, preorder_ctrl->indicate_seq)) {
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096u;
} else if (SN_LESS(wend, seq_num)) {
/* boundary situation, when seq_num cross 0xFFF */
@ -1772,7 +1772,7 @@ static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reor
list_del_init(&(prframe->u.hdr.list));
if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num))
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096u;
/* Set this as a lock to make sure that only one thread is indicating packet. */
/* pTS->RxIndicateState = RXTS_INDICATE_PROCESSING; */

View file

@ -943,7 +943,7 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
if (psta) {
psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
psta->sta_xmitpriv.txseq_tid[pattrib->priority] %= 4096u;
pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
SetSeqNum(hdr, pattrib->seqnum);
@ -963,11 +963,14 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
if (SN_LESS(pattrib->seqnum, tx_seq)) {
pattrib->ampdu_en = false;/* AGG BK */
} else if (SN_EQUAL(pattrib->seqnum, tx_seq)) {
psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (tx_seq+1)&0xfff;
psta->BA_starting_seqctrl[pattrib->priority & 0x0f] =
(tx_seq + 1) % 4096u;
pattrib->ampdu_en = true;/* AGG EN */
} else {
psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (pattrib->seqnum+1)&0xfff;
psta->BA_starting_seqctrl[pattrib->priority & 0x0f] =
(pattrib->seqnum + 1) % 4096u;
pattrib->ampdu_en = true;/* AGG EN */
}
}
@ -1936,7 +1939,6 @@ static void do_queue_select(struct adapter *padapter, struct pkt_attrib *pattrib
s32 rtw_xmit(struct adapter *padapter, struct sk_buff **ppkt)
{
static unsigned long start;
static u32 drop_cnt;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct xmit_frame *pxmitframe = NULL;
@ -1948,15 +1950,11 @@ s32 rtw_xmit(struct adapter *padapter, struct sk_buff **ppkt)
pxmitframe = rtw_alloc_xmitframe(pxmitpriv);
if (jiffies_to_msecs(jiffies - start) > 2000) {
if (jiffies_to_msecs(jiffies - start) > 2000)
start = jiffies;
drop_cnt = 0;
}
if (!pxmitframe) {
drop_cnt++;
if (!pxmitframe)
return -1;
}
res = update_attrib(padapter, *ppkt, &pxmitframe->attrib);

View file

@ -1100,7 +1100,7 @@ static bool halbtc8723b2ant_IsCommonAction(struct btc_coexist *pBtCoexist)
bCommon = true;
} else {
if (BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE == pCoexDm->btStatus) {
if (pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE) {
bLowPwrDisable = false;
pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
@ -1115,7 +1115,7 @@ static bool halbtc8723b2ant_IsCommonAction(struct btc_coexist *pBtCoexist)
halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
bCommon = true;
} else if (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == pCoexDm->btStatus) {
} else if (pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE) {
bLowPwrDisable = true;
pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
@ -1605,7 +1605,7 @@ static void halbtc8723b2ant_ActionSco(struct btc_coexist *pBtCoexist)
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_LEGACY == wifiBw) /* for SCO quality at 11b/g mode */
if (wifiBw == BTC_WIFI_BW_LEGACY) /* for SCO quality at 11b/g mode */
halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
else /* for SCO quality & wifi performance balance at 11n mode */
halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);
@ -1613,7 +1613,7 @@ static void halbtc8723b2ant_ActionSco(struct btc_coexist *pBtCoexist)
halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 0); /* for voice quality */
/* sw mechanism */
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -1660,7 +1660,7 @@ static void halbtc8723b2ant_ActionHid(struct btc_coexist *pBtCoexist)
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_LEGACY == wifiBw) /* for HID at 11b/g mode */
if (wifiBw == BTC_WIFI_BW_LEGACY) /* for HID at 11b/g mode */
halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
else /* for HID quality & wifi performance balance at 11n mode */
halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 9);
@ -1674,7 +1674,7 @@ static void halbtc8723b2ant_ActionHid(struct btc_coexist *pBtCoexist)
halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 13);
/* sw mechanism */
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -1723,7 +1723,7 @@ static void halbtc8723b2ant_ActionA2dp(struct btc_coexist *pBtCoexist)
/* sw mechanism */
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, true, 0x18);
} else {
@ -1755,7 +1755,7 @@ static void halbtc8723b2ant_ActionA2dp(struct btc_coexist *pBtCoexist)
/* sw mechanism */
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -1805,7 +1805,7 @@ static void halbtc8723b2ant_ActionA2dpPanHs(struct btc_coexist *pBtCoexist)
/* sw mechanism */
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -1861,7 +1861,7 @@ static void halbtc8723b2ant_ActionPanEdr(struct btc_coexist *pBtCoexist)
/* sw mechanism */
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -1912,7 +1912,7 @@ static void halbtc8723b2ant_ActionPanHs(struct btc_coexist *pBtCoexist)
halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 1);
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -1964,7 +1964,7 @@ static void halbtc8723b2ant_ActionPanEdrA2dp(struct btc_coexist *pBtCoexist)
(btRssiState == BTC_RSSI_STATE_STAY_HIGH)
) {
halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 12);
if (BTC_WIFI_BW_HT40 == wifiBw)
if (wifiBw == BTC_WIFI_BW_HT40)
halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, false, true, 3);
else
halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, false, false, 3);
@ -1974,7 +1974,7 @@ static void halbtc8723b2ant_ActionPanEdrA2dp(struct btc_coexist *pBtCoexist)
}
/* sw mechanism */
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -2019,7 +2019,7 @@ static void halbtc8723b2ant_ActionPanEdrHid(struct btc_coexist *pBtCoexist)
(btRssiState == BTC_RSSI_STATE_HIGH) ||
(btRssiState == BTC_RSSI_STATE_STAY_HIGH)
) {
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);
halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 11);
pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);
@ -2037,7 +2037,7 @@ static void halbtc8723b2ant_ActionPanEdrHid(struct btc_coexist *pBtCoexist)
}
/* sw mechanism */
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -2090,7 +2090,7 @@ static void halbtc8723b2ant_ActionHidA2dpPanEdr(struct btc_coexist *pBtCoexist)
(btRssiState == BTC_RSSI_STATE_HIGH) ||
(btRssiState == BTC_RSSI_STATE_STAY_HIGH)
) {
if (BTC_WIFI_BW_HT40 == wifiBw)
if (wifiBw == BTC_WIFI_BW_HT40)
halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, true, 2);
else
halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, false, 3);
@ -2098,7 +2098,7 @@ static void halbtc8723b2ant_ActionHidA2dpPanEdr(struct btc_coexist *pBtCoexist)
halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, true, 3);
/* sw mechanism */
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -2140,7 +2140,7 @@ static void halbtc8723b2ant_ActionHidA2dp(struct btc_coexist *pBtCoexist)
halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_LEGACY == wifiBw) {
if (wifiBw == BTC_WIFI_BW_LEGACY) {
if (BTC_RSSI_HIGH(btRssiState))
halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
else if (BTC_RSSI_MEDIUM(btRssiState))
@ -2173,7 +2173,7 @@ static void halbtc8723b2ant_ActionHidA2dp(struct btc_coexist *pBtCoexist)
halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, true, 2);
/* sw mechanism */
if (BTC_WIFI_BW_HT40 == wifiBw) {
if (wifiBw == BTC_WIFI_BW_HT40) {
if (
(wifiRssiState == BTC_RSSI_STATE_HIGH) ||
(wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
@ -2391,12 +2391,12 @@ void EXhalbtc8723b2ant_InitCoexDm(struct btc_coexist *pBtCoexist)
void EXhalbtc8723b2ant_IpsNotify(struct btc_coexist *pBtCoexist, u8 type)
{
if (BTC_IPS_ENTER == type) {
if (type == BTC_IPS_ENTER) {
pCoexSta->bUnderIps = true;
halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);
halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, true);
halbtc8723b2ant_CoexAllOff(pBtCoexist);
} else if (BTC_IPS_LEAVE == type) {
} else if (type == BTC_IPS_LEAVE) {
pCoexSta->bUnderIps = false;
halbtc8723b2ant_InitHwConfig(pBtCoexist, false);
halbtc8723b2ant_InitCoexDm(pBtCoexist);
@ -2406,24 +2406,24 @@ void EXhalbtc8723b2ant_IpsNotify(struct btc_coexist *pBtCoexist, u8 type)
void EXhalbtc8723b2ant_LpsNotify(struct btc_coexist *pBtCoexist, u8 type)
{
if (BTC_LPS_ENABLE == type) {
if (type == BTC_LPS_ENABLE) {
pCoexSta->bUnderLps = true;
} else if (BTC_LPS_DISABLE == type) {
} else if (type == BTC_LPS_DISABLE) {
pCoexSta->bUnderLps = false;
}
}
void EXhalbtc8723b2ant_ScanNotify(struct btc_coexist *pBtCoexist, u8 type)
{
if (BTC_SCAN_START == type) {
} else if (BTC_SCAN_FINISH == type) {
if (type == BTC_SCAN_START) {
} else if (type == BTC_SCAN_FINISH) {
}
}
void EXhalbtc8723b2ant_ConnectNotify(struct btc_coexist *pBtCoexist, u8 type)
{
if (BTC_ASSOCIATE_START == type) {
} else if (BTC_ASSOCIATE_FINISH == type) {
if (type == BTC_ASSOCIATE_START) {
} else if (type == BTC_ASSOCIATE_FINISH) {
}
}
@ -2436,11 +2436,11 @@ void EXhalbtc8723b2ant_MediaStatusNotify(struct btc_coexist *pBtCoexist, u8 type
/* only 2.4G we need to inform bt the chnl mask */
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);
if ((BTC_MEDIA_CONNECT == type) && (wifiCentralChnl <= 14)) {
if ((type == BTC_MEDIA_CONNECT) && (wifiCentralChnl <= 14)) {
H2C_Parameter[0] = 0x1;
H2C_Parameter[1] = wifiCentralChnl;
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
if (BTC_WIFI_BW_HT40 == wifiBw)
if (wifiBw == BTC_WIFI_BW_HT40)
H2C_Parameter[2] = 0x30;
else {
pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
@ -2573,9 +2573,9 @@ void EXhalbtc8723b2ant_BtInfoNotify(
}
if (
(BT_8723B_2ANT_BT_STATUS_ACL_BUSY == pCoexDm->btStatus) ||
(BT_8723B_2ANT_BT_STATUS_SCO_BUSY == pCoexDm->btStatus) ||
(BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY == pCoexDm->btStatus)
(pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_ACL_BUSY) ||
(pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_SCO_BUSY) ||
(pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY)
) {
bBtBusy = true;
bLimitedDig = true;
@ -2603,8 +2603,8 @@ void EXhalbtc8723b2ant_HaltNotify(struct btc_coexist *pBtCoexist)
void EXhalbtc8723b2ant_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState)
{
if (BTC_WIFI_PNP_SLEEP == pnpState) {
} else if (BTC_WIFI_PNP_WAKE_UP == pnpState) {
if (pnpState == BTC_WIFI_PNP_SLEEP) {
} else if (pnpState == BTC_WIFI_PNP_WAKE_UP) {
halbtc8723b2ant_InitHwConfig(pBtCoexist, false);
halbtc8723b2ant_InitCoexDm(pBtCoexist);
halbtc8723b2ant_QueryBtInfo(pBtCoexist);

View file

@ -91,7 +91,7 @@ static void halbtcoutsrc_LeaveLowPower(struct btc_coexist *pBtCoexist)
stime = jiffies;
do {
ready = rtw_register_task_alive(padapter, BTCOEX_ALIVE);
if (_SUCCESS == ready)
if (ready == _SUCCESS)
break;
utime = jiffies_to_msecs(jiffies - stime);
@ -668,7 +668,7 @@ static void halbtcoutsrc_WriteLocalReg1Byte(void *pBtcContext, u32 RegAddr, u8 D
struct btc_coexist *pBtCoexist = (struct btc_coexist *)pBtcContext;
struct adapter *Adapter = pBtCoexist->Adapter;
if (BTC_INTF_SDIO == pBtCoexist->chipInterface)
if (pBtCoexist->chipInterface == BTC_INTF_SDIO)
rtw_write8(Adapter, SDIO_LOCAL_BASE | RegAddr, Data);
else
rtw_write8(Adapter, RegAddr, Data);
@ -894,7 +894,7 @@ void EXhalbtcoutsrc_IpsNotify(struct btc_coexist *pBtCoexist, u8 type)
if (pBtCoexist->bManualControl)
return;
if (IPS_NONE == type)
if (type == IPS_NONE)
ipsType = BTC_IPS_LEAVE;
else
ipsType = BTC_IPS_ENTER;
@ -922,7 +922,7 @@ void EXhalbtcoutsrc_LpsNotify(struct btc_coexist *pBtCoexist, u8 type)
if (pBtCoexist->bManualControl)
return;
if (PS_MODE_ACTIVE == type)
if (type == PS_MODE_ACTIVE)
lpsType = BTC_LPS_DISABLE;
else
lpsType = BTC_LPS_ENABLE;
@ -1000,7 +1000,7 @@ void EXhalbtcoutsrc_MediaStatusNotify(struct btc_coexist *pBtCoexist, enum
if (pBtCoexist->bManualControl)
return;
if (RT_MEDIA_CONNECT == mediaStatus)
if (mediaStatus == RT_MEDIA_CONNECT)
mStatus = BTC_MEDIA_CONNECT;
else
mStatus = BTC_MEDIA_DISCONNECT;
@ -1026,11 +1026,11 @@ void EXhalbtcoutsrc_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 pktTy
if (pBtCoexist->bManualControl)
return;
if (PACKET_DHCP == pktType) {
if (pktType == PACKET_DHCP) {
packetType = BTC_PACKET_DHCP;
} else if (PACKET_EAPOL == pktType) {
} else if (pktType == PACKET_EAPOL) {
packetType = BTC_PACKET_EAPOL;
} else if (PACKET_ARP == pktType) {
} else if (pktType == PACKET_ARP) {
packetType = BTC_PACKET_ARP;
} else {
return;
@ -1114,13 +1114,13 @@ void EXhalbtcoutsrc_Periodical(struct btc_coexist *pBtCoexist)
void EXhalbtcoutsrc_SetAntNum(u8 type, u8 antNum)
{
if (BT_COEX_ANT_TYPE_PG == type) {
if (type == BT_COEX_ANT_TYPE_PG) {
GLBtCoexist.boardInfo.pgAntNum = antNum;
GLBtCoexist.boardInfo.btdmAntNum = antNum;
} else if (BT_COEX_ANT_TYPE_ANTDIV == type) {
} else if (type == BT_COEX_ANT_TYPE_ANTDIV) {
GLBtCoexist.boardInfo.btdmAntNum = antNum;
/* GLBtCoexist.boardInfo.btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT; */
} else if (BT_COEX_ANT_TYPE_DETECTED == type) {
} else if (type == BT_COEX_ANT_TYPE_DETECTED) {
GLBtCoexist.boardInfo.btdmAntNum = antNum;
/* GLBtCoexist.boardInfo.btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT; */
}

View file

@ -890,15 +890,14 @@ static u32 Array_kfreemap[] = {
void rtw_bb_rf_gain_offset(struct adapter *padapter)
{
u8 value = padapter->eeprompriv.EEPROMRFGainOffset;
u32 res, i = 0;
u32 *Array = Array_kfreemap;
u32 v1 = 0, v2 = 0, target = 0;
u32 i = 0;
if (value & BIT4) {
if (padapter->eeprompriv.EEPROMRFGainVal != 0xff) {
res = rtw_hal_read_rfreg(padapter, RF_PATH_A, 0x7f, 0xffffffff);
res &= 0xfff87fff;
/* res &= 0xfff87fff; */
rtw_hal_read_rfreg(padapter, RF_PATH_A, 0x7f, 0xffffffff);
for (i = 0; i < ARRAY_SIZE(Array_kfreemap); i += 2) {
v1 = Array[i];
v2 = Array[i+1];
@ -909,9 +908,7 @@ void rtw_bb_rf_gain_offset(struct adapter *padapter)
}
PHY_SetRFReg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, BIT18|BIT17|BIT16|BIT15, target);
/* res |= (padapter->eeprompriv.EEPROMRFGainVal & 0x0f)<< 15; */
/* rtw_hal_write_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, RF_GAIN_OFFSET_MASK, res); */
res = rtw_hal_read_rfreg(padapter, RF_PATH_A, 0x7f, 0xffffffff);
rtw_hal_read_rfreg(padapter, RF_PATH_A, 0x7f, 0xffffffff);
}
}
}

View file

@ -155,9 +155,9 @@ void ODM_CfoTracking(void *pDM_VOID)
/* 4 1.6 Big jump */
if (pCfoTrack->bAdjust) {
if (CFO_ave > CFO_TH_XTAL_LOW)
Adjust_Xtal = Adjust_Xtal+((CFO_ave-CFO_TH_XTAL_LOW)>>2);
Adjust_Xtal = Adjust_Xtal + ((CFO_ave - CFO_TH_XTAL_LOW) >> 2);
else if (CFO_ave < (-CFO_TH_XTAL_LOW))
Adjust_Xtal = Adjust_Xtal+((CFO_TH_XTAL_LOW-CFO_ave)>>2);
Adjust_Xtal = Adjust_Xtal + ((CFO_TH_XTAL_LOW - CFO_ave) >> 2);
}
/* 4 1.7 Adjust Crystal Cap. */

View file

@ -56,7 +56,7 @@ void odm_NHMBBInit(void *pDM_VOID)
{
struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
pDM_Odm->adaptivity_flag = 0;
pDM_Odm->adaptivity_flag = false;
pDM_Odm->tolerance_cnt = 3;
pDM_Odm->NHMLastTxOkcnt = 0;
pDM_Odm->NHMLastRxOkcnt = 0;

View file

@ -501,8 +501,7 @@ void Hal_GetEfuseDefinition(
switch (type) {
case TYPE_EFUSE_MAX_SECTION:
{
u8 *pMax_section;
pMax_section = pOut;
u8 *pMax_section = pOut;
if (efuseType == EFUSE_WIFI)
*pMax_section = EFUSE_MAX_SECTION_8723B;
@ -513,8 +512,7 @@ void Hal_GetEfuseDefinition(
case TYPE_EFUSE_REAL_CONTENT_LEN:
{
u16 *pu2Tmp;
pu2Tmp = pOut;
u16 *pu2Tmp = pOut;
if (efuseType == EFUSE_WIFI)
*pu2Tmp = EFUSE_REAL_CONTENT_LEN_8723B;
@ -525,8 +523,7 @@ void Hal_GetEfuseDefinition(
case TYPE_AVAILABLE_EFUSE_BYTES_BANK:
{
u16 *pu2Tmp;
pu2Tmp = pOut;
u16 *pu2Tmp = pOut;
if (efuseType == EFUSE_WIFI)
*pu2Tmp = (EFUSE_REAL_CONTENT_LEN_8723B-EFUSE_OOB_PROTECT_BYTES);
@ -537,8 +534,7 @@ void Hal_GetEfuseDefinition(
case TYPE_AVAILABLE_EFUSE_BYTES_TOTAL:
{
u16 *pu2Tmp;
pu2Tmp = pOut;
u16 *pu2Tmp = pOut;
if (efuseType == EFUSE_WIFI)
*pu2Tmp = (EFUSE_REAL_CONTENT_LEN_8723B-EFUSE_OOB_PROTECT_BYTES);
@ -549,8 +545,7 @@ void Hal_GetEfuseDefinition(
case TYPE_EFUSE_MAP_LEN:
{
u16 *pu2Tmp;
pu2Tmp = pOut;
u16 *pu2Tmp = pOut;
if (efuseType == EFUSE_WIFI)
*pu2Tmp = EFUSE_MAX_MAP_LEN;
@ -561,8 +556,7 @@ void Hal_GetEfuseDefinition(
case TYPE_EFUSE_PROTECT_BYTES_BANK:
{
u8 *pu1Tmp;
pu1Tmp = pOut;
u8 *pu1Tmp = pOut;
if (efuseType == EFUSE_WIFI)
*pu1Tmp = EFUSE_OOB_PROTECT_BYTES;
@ -573,8 +567,7 @@ void Hal_GetEfuseDefinition(
case TYPE_EFUSE_CONTENT_LEN_BANK:
{
u16 *pu2Tmp;
pu2Tmp = pOut;
u16 *pu2Tmp = pOut;
if (efuseType == EFUSE_WIFI)
*pu2Tmp = EFUSE_REAL_CONTENT_LEN_8723B;
@ -585,8 +578,7 @@ void Hal_GetEfuseDefinition(
default:
{
u8 *pu1Tmp;
pu1Tmp = pOut;
u8 *pu1Tmp = pOut;
*pu1Tmp = 0;
}
break;
@ -835,9 +827,8 @@ static void hal_ReadEFuse_BT(
}
if (offset < EFUSE_BT_MAX_SECTION) {
u16 addr;
u16 addr = offset * PGPKT_DATA_SIZE;
addr = offset * PGPKT_DATA_SIZE;
for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
/* Check word enable condition in the section */
if (!(wden & (0x01<<i))) {
@ -1196,10 +1187,9 @@ void rtl8723b_InitBeaconParameters(struct adapter *padapter)
{
struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
u16 val16;
u8 val8;
u8 val8 = DIS_TSF_UDT;
val8 = DIS_TSF_UDT;
val16 = val8 | (val8 << 8); /* port0 and port1 */
/* Enable prot0 beacon function for PSTDMA */
@ -1496,10 +1486,7 @@ s32 rtl8723b_InitLLTTable(struct adapter *padapter)
{
unsigned long start, passing_time;
u32 val32;
s32 ret;
ret = _FAIL;
s32 ret = _FAIL;
val32 = rtw_read32(padapter, REG_AUTO_LLT);
val32 |= BIT_AUTO_INIT_LLT;
@ -2273,9 +2260,8 @@ void rtl8723b_fill_fake_txdesc(
/* Encrypt the data frame if under security mode excepct null data. Suggested by CCW. */
/* */
if (bDataFrame) {
u32 EncAlg;
u32 EncAlg = padapter->securitypriv.dot11PrivacyAlgrthm;
EncAlg = padapter->securitypriv.dot11PrivacyAlgrthm;
switch (EncAlg) {
case _NO_PRIVACY_:
SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x0);
@ -2378,9 +2364,7 @@ static void hw_var_set_opmode(struct adapter *padapter, u8 variable, u8 *val)
static void hw_var_set_macaddr(struct adapter *padapter, u8 variable, u8 *val)
{
u8 idx = 0;
u32 reg_macid;
reg_macid = REG_MACID;
u32 reg_macid = REG_MACID;
for (idx = 0 ; idx < 6; idx++)
rtw_write8(GET_PRIMARY_ADAPTER(padapter), (reg_macid+idx), val[idx]);
@ -2389,9 +2373,7 @@ static void hw_var_set_macaddr(struct adapter *padapter, u8 variable, u8 *val)
static void hw_var_set_bssid(struct adapter *padapter, u8 variable, u8 *val)
{
u8 idx = 0;
u32 reg_bssid;
reg_bssid = REG_BSSID;
u32 reg_bssid = REG_BSSID;
for (idx = 0 ; idx < 6; idx++)
rtw_write8(padapter, (reg_bssid+idx), val[idx]);
@ -2399,9 +2381,7 @@ static void hw_var_set_bssid(struct adapter *padapter, u8 variable, u8 *val)
static void hw_var_set_bcn_func(struct adapter *padapter, u8 variable, u8 *val)
{
u32 bcn_ctrl_reg;
bcn_ctrl_reg = REG_BCN_CTRL;
u32 bcn_ctrl_reg = REG_BCN_CTRL;
if (*(u8 *)val)
rtw_write8(padapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
@ -2422,12 +2402,8 @@ static void hw_var_set_correct_tsf(struct adapter *padapter, u8 variable, u8 *va
{
u8 val8;
u64 tsf;
struct mlme_ext_priv *pmlmeext;
struct mlme_ext_info *pmlmeinfo;
pmlmeext = &padapter->mlmeextpriv;
pmlmeinfo = &pmlmeext->mlmext_info;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
tsf = pmlmeext->TSFValue-do_div(pmlmeext->TSFValue, (pmlmeinfo->bcn_interval*1024))-1024; /* us */
@ -2543,15 +2519,12 @@ static void hw_var_set_mlme_join(struct adapter *padapter, u8 variable, u8 *val)
u8 val8;
u16 val16;
u32 val32;
u8 RetryLimit;
u8 type;
struct mlme_priv *pmlmepriv;
u8 RetryLimit = 0x30;
u8 type = *(u8 *)val;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct eeprom_priv *pEEPROM;
RetryLimit = 0x30;
type = *(u8 *)val;
pmlmepriv = &padapter->mlmepriv;
pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
if (type == 0) { /* prepare to join */
@ -2850,12 +2823,11 @@ void SetHwReg8723B(struct adapter *padapter, u8 variable, u8 *val)
case HW_VAR_ACK_PREAMBLE:
{
u8 regTmp;
u8 regTmp = 0;
u8 bShortPreamble = *val;
/* Joseph marked out for Netgear 3500 TKIP channel 7 issue.(Temporarily) */
/* regTmp = (pHalData->nCur40MhzPrimeSC)<<5; */
regTmp = 0;
if (bShortPreamble)
regTmp |= 0x80;
rtw_write8(padapter, REG_RRSR+2, regTmp);
@ -3226,9 +3198,7 @@ void GetHwReg8723B(struct adapter *padapter, u8 variable, u8 *val)
*/
u8 SetHalDefVar8723B(struct adapter *padapter, enum hal_def_variable variable, void *pval)
{
u8 bResult;
bResult = _SUCCESS;
u8 bResult = _SUCCESS;
switch (variable) {
default:
@ -3244,9 +3214,7 @@ u8 SetHalDefVar8723B(struct adapter *padapter, enum hal_def_variable variable, v
*/
u8 GetHalDefVar8723B(struct adapter *padapter, enum hal_def_variable variable, void *pval)
{
u8 bResult;
bResult = _SUCCESS;
u8 bResult = _SUCCESS;
switch (variable) {
case HAL_DEF_MAX_RECVBUF_SZ:
@ -3281,9 +3249,8 @@ u8 GetHalDefVar8723B(struct adapter *padapter, enum hal_def_variable variable, v
case HW_DEF_RA_INFO_DUMP:
{
u8 mac_id = *(u8 *)pval;
u32 cmd;
u32 cmd = 0x40000100 | mac_id;
cmd = 0x40000100 | mac_id;
rtw_write32(padapter, REG_HMEBOX_DBG_2_8723B, cmd);
msleep(10);
rtw_read32(padapter, 0x2F0); // info 1

View file

@ -120,13 +120,10 @@ free_xmitbuf:
*/
s32 rtl8723bs_xmit_buf_handler(struct adapter *padapter)
{
struct xmit_priv *pxmitpriv;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
u8 queue_empty, queue_pending;
s32 ret;
pxmitpriv = &padapter->xmitpriv;
if (wait_for_completion_interruptible(&pxmitpriv->xmit_comp)) {
netdev_emerg(padapter->pnetdev,
"%s: down SdioXmitBufSema fail!\n", __func__);
@ -357,12 +354,9 @@ static s32 xmit_xmitframes(struct adapter *padapter, struct xmit_priv *pxmitpriv
*/
static s32 rtl8723bs_xmit_handler(struct adapter *padapter)
{
struct xmit_priv *pxmitpriv;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
s32 ret;
pxmitpriv = &padapter->xmitpriv;
if (wait_for_completion_interruptible(&pxmitpriv->SdioXmitStart)) {
netdev_emerg(padapter->pnetdev, "%s: SdioXmitStart fail!\n",
__func__);
@ -408,13 +402,9 @@ next:
int rtl8723bs_xmit_thread(void *context)
{
s32 ret;
struct adapter *padapter;
struct xmit_priv *pxmitpriv;
ret = _SUCCESS;
padapter = context;
pxmitpriv = &padapter->xmitpriv;
s32 ret = _SUCCESS;
struct adapter *padapter = context;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
allow_signal(SIGTERM);
@ -435,16 +425,13 @@ s32 rtl8723bs_mgnt_xmit(
)
{
s32 ret = _SUCCESS;
struct pkt_attrib *pattrib;
struct xmit_buf *pxmitbuf;
struct pkt_attrib *pattrib = &pmgntframe->attrib;
struct xmit_buf *pxmitbuf = pmgntframe->pxmitbuf;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
u8 *pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
u8 txdesc_size = TXDESC_SIZE;
pattrib = &pmgntframe->attrib;
pxmitbuf = pmgntframe->pxmitbuf;
rtl8723b_update_txdesc(pmgntframe, pmgntframe->buf_addr);
pxmitbuf->len = txdesc_size + pattrib->last_txcmdsz;
@ -557,15 +544,13 @@ s32 rtl8723bs_init_xmit_priv(struct adapter *padapter)
void rtl8723bs_free_xmit_priv(struct adapter *padapter)
{
struct xmit_priv *pxmitpriv;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct xmit_buf *pxmitbuf;
struct __queue *pqueue;
struct __queue *pqueue = &pxmitpriv->pending_xmitbuf_queue;
struct list_head *plist, *phead;
struct list_head tmplist;
pxmitpriv = &padapter->xmitpriv;
pqueue = &pxmitpriv->pending_xmitbuf_queue;
phead = get_list_head(pqueue);
INIT_LIST_HEAD(&tmplist);

View file

@ -209,7 +209,7 @@
#define RTL8723B_TRANS_END \
/* format */ \
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
{0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, 0, PWR_CMD_END, 0, 0},
{0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, 0, PWR_CMD_END, 0, 0},
extern struct wlan_pwr_cfg rtl8723B_power_on_flow[RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS];

View file

@ -86,7 +86,7 @@ struct sta_info {
uint qos_option;
u8 hwaddr[ETH_ALEN];
uint ieee8021x_blocked; /* 0: allowed, 1:blocked */
bool ieee8021x_blocked;
uint dot118021XPrivacy; /* aes, tkip... */
union Keytype dot11tkiptxmickey;
union Keytype dot11tkiprxmickey;

View file

@ -45,9 +45,8 @@ void rtw_os_recv_resource_free(struct recv_priv *precvpriv)
/* free os related resource in struct recv_buf */
void rtw_os_recvbuf_resource_free(struct adapter *padapter, struct recv_buf *precvbuf)
{
if (precvbuf->pskb) {
if (precvbuf->pskb)
dev_kfree_skb_any(precvbuf->pskb);
}
}
struct sk_buff *rtw_os_alloc_msdu_pkt(union recv_frame *prframe, u16 nSubframe_Length, u8 *pdata)
@ -160,21 +159,19 @@ void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup)
}
}
if (bgroup) {
if (bgroup)
key_type |= NL80211_KEYTYPE_GROUP;
} else {
else
key_type |= NL80211_KEYTYPE_PAIRWISE;
}
cfg80211_michael_mic_failure(padapter->pnetdev, (u8 *)&pmlmepriv->assoc_bssid[0], key_type, -1,
NULL, GFP_ATOMIC);
memset(&ev, 0x00, sizeof(ev));
if (bgroup) {
if (bgroup)
ev.flags |= IW_MICFAILURE_GROUP;
} else {
else
ev.flags |= IW_MICFAILURE_PAIRWISE;
}
ev.src_addr.sa_family = ARPHRD_ETHER;
memcpy(ev.src_addr.sa_data, &pmlmepriv->assoc_bssid[0], ETH_ALEN);

View file

@ -3,5 +3,4 @@ obj-$(CONFIG_FB_SM750) += sm750fb.o
sm750fb-objs := sm750.o sm750_hw.o sm750_accel.o sm750_cursor.o \
ddk750_chip.o ddk750_power.o ddk750_mode.o \
ddk750_display.o ddk750_swi2c.o ddk750_sii164.o \
ddk750_dvi.o ddk750_hwi2c.o
ddk750_display.o ddk750_swi2c.o

View file

@ -3,9 +3,6 @@ TODO:
- use kernel coding style
- refine the code and remove unused code
- Implement hardware acceleration for imageblit if image->depth > 1
- check on hardware effects of removal of USE_HW_I2C and USE_DVICHIP (these two
are supposed to be sample code which is given here if someone wants to
use those functionalities)
- must be ported to the atomic kms framework in the drm subsystem (which will
give you a basic fbdev driver for free)

View file

@ -14,8 +14,5 @@
#include "ddk750_chip.h"
#include "ddk750_display.h"
#include "ddk750_power.h"
#ifdef USE_HW_I2C
#include "ddk750_hwi2c.h"
#endif
#include "ddk750_swi2c.h"
#endif

View file

@ -3,7 +3,6 @@
#include "ddk750_chip.h"
#include "ddk750_display.h"
#include "ddk750_power.h"
#include "ddk750_dvi.h"
static void set_display_control(int ctrl, int disp_state)
{

View file

@ -1,62 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
#define USE_DVICHIP
#ifdef USE_DVICHIP
#include "ddk750_chip.h"
#include "ddk750_reg.h"
#include "ddk750_dvi.h"
#include "ddk750_sii164.h"
/*
* This global variable contains all the supported driver and its corresponding
* function API. Please set the function pointer to NULL whenever the function
* is not supported.
*/
static struct dvi_ctrl_device dcft_supported_dvi_controller[] = {
#ifdef DVI_CTRL_SII164
{
.init = sii164_init_chip,
.get_vendor_id = sii164_get_vendor_id,
.get_device_id = sii164GetDeviceID,
#ifdef SII164_FULL_FUNCTIONS
.reset_chip = sii164ResetChip,
.get_chip_string = sii164GetChipString,
.set_power = sii164SetPower,
.enable_hot_plug_detection = sii164EnableHotPlugDetection,
.is_connected = sii164IsConnected,
.check_interrupt = sii164CheckInterrupt,
.clear_interrupt = sii164ClearInterrupt,
#endif
},
#endif
};
int dvi_init(unsigned char edge_select,
unsigned char bus_select,
unsigned char dual_edge_clk_select,
unsigned char hsync_enable,
unsigned char vsync_enable,
unsigned char deskew_enable,
unsigned char deskew_setting,
unsigned char continuous_sync_enable,
unsigned char pll_filter_enable,
unsigned char pll_filter_value)
{
struct dvi_ctrl_device *current_dvi_ctrl;
current_dvi_ctrl = dcft_supported_dvi_controller;
if (current_dvi_ctrl->init) {
return current_dvi_ctrl->init(edge_select,
bus_select,
dual_edge_clk_select,
hsync_enable,
vsync_enable,
deskew_enable,
deskew_setting,
continuous_sync_enable,
pll_filter_enable,
pll_filter_value);
}
return -1; /* error */
}
#endif

View file

@ -1,57 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef DDK750_DVI_H__
#define DDK750_DVI_H__
/* dvi chip stuffs structros */
typedef long (*PFN_DVICTRL_INIT)(unsigned char edge_select,
unsigned char bus_select,
unsigned char dual_edge_clk_select,
unsigned char hsync_enable,
unsigned char vsync_enable,
unsigned char deskew_enable,
unsigned char deskew_setting,
unsigned char continuous_sync_enable,
unsigned char pll_filter_enable,
unsigned char pll_filter_value);
typedef void (*PFN_DVICTRL_RESETCHIP)(void);
typedef char* (*PFN_DVICTRL_GETCHIPSTRING)(void);
typedef unsigned short (*PFN_DVICTRL_GETVENDORID)(void);
typedef unsigned short (*PFN_DVICTRL_GETDEVICEID)(void);
typedef void (*PFN_DVICTRL_SETPOWER)(unsigned char power_up);
typedef void (*PFN_DVICTRL_HOTPLUGDETECTION)(unsigned char enable_hot_plug);
typedef unsigned char (*PFN_DVICTRL_ISCONNECTED)(void);
typedef unsigned char (*PFN_DVICTRL_CHECKINTERRUPT)(void);
typedef void (*PFN_DVICTRL_CLEARINTERRUPT)(void);
/* Structure to hold all the function pointer to the DVI Controller. */
struct dvi_ctrl_device {
PFN_DVICTRL_INIT init;
PFN_DVICTRL_RESETCHIP reset_chip;
PFN_DVICTRL_GETCHIPSTRING get_chip_string;
PFN_DVICTRL_GETVENDORID get_vendor_id;
PFN_DVICTRL_GETDEVICEID get_device_id;
PFN_DVICTRL_SETPOWER set_power;
PFN_DVICTRL_HOTPLUGDETECTION enable_hot_plug_detection;
PFN_DVICTRL_ISCONNECTED is_connected;
PFN_DVICTRL_CHECKINTERRUPT check_interrupt;
PFN_DVICTRL_CLEARINTERRUPT clear_interrupt;
};
#define DVI_CTRL_SII164
/* dvi functions prototype */
int dvi_init(unsigned char edge_select,
unsigned char bus_select,
unsigned char dual_edge_clk_select,
unsigned char hsync_enable,
unsigned char vsync_enable,
unsigned char deskew_enable,
unsigned char deskew_setting,
unsigned char continuous_sync_enable,
unsigned char pll_filter_enable,
unsigned char pll_filter_value);
#endif

View file

@ -1,247 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
#define USE_HW_I2C
#ifdef USE_HW_I2C
#include "ddk750_chip.h"
#include "ddk750_reg.h"
#include "ddk750_hwi2c.h"
#include "ddk750_power.h"
#define MAX_HWI2C_FIFO 16
#define HWI2C_WAIT_TIMEOUT 0xF0000
int sm750_hw_i2c_init(unsigned char bus_speed_mode)
{
unsigned int value;
/* Enable GPIO 30 & 31 as IIC clock & data */
value = peek32(GPIO_MUX);
value |= (GPIO_MUX_30 | GPIO_MUX_31);
poke32(GPIO_MUX, value);
/*
* Enable Hardware I2C power.
* TODO: Check if we need to enable GPIO power?
*/
sm750_enable_i2c(1);
/* Enable the I2C Controller and set the bus speed mode */
value = peek32(I2C_CTRL) & ~(I2C_CTRL_MODE | I2C_CTRL_EN);
if (bus_speed_mode)
value |= I2C_CTRL_MODE;
value |= I2C_CTRL_EN;
poke32(I2C_CTRL, value);
return 0;
}
void sm750_hw_i2c_close(void)
{
unsigned int value;
/* Disable I2C controller */
value = peek32(I2C_CTRL) & ~I2C_CTRL_EN;
poke32(I2C_CTRL, value);
/* Disable I2C Power */
sm750_enable_i2c(0);
/* Set GPIO 30 & 31 back as GPIO pins */
value = peek32(GPIO_MUX);
value &= ~GPIO_MUX_30;
value &= ~GPIO_MUX_31;
poke32(GPIO_MUX, value);
}
static long hw_i2c_wait_tx_done(void)
{
unsigned int timeout;
/* Wait until the transfer is completed. */
timeout = HWI2C_WAIT_TIMEOUT;
while (!(peek32(I2C_STATUS) & I2C_STATUS_TX) && (timeout != 0))
timeout--;
if (timeout == 0)
return -1;
return 0;
}
/*
* This function writes data to the i2c slave device registers.
*
* Parameters:
* addr - i2c Slave device address
* length - Total number of bytes to be written to the device
* buf - The buffer that contains the data to be written to the
* i2c device.
*
* Return Value:
* Total number of bytes those are actually written.
*/
static unsigned int hw_i2c_write_data(unsigned char addr,
unsigned int length,
unsigned char *buf)
{
unsigned char count, i;
unsigned int total_bytes = 0;
/* Set the Device Address */
poke32(I2C_SLAVE_ADDRESS, addr & ~0x01);
/*
* Write data.
* Note:
* Only 16 byte can be accessed per i2c start instruction.
*/
do {
/*
* Reset I2C by writing 0 to I2C_RESET register to
* clear the previous status.
*/
poke32(I2C_RESET, 0);
/* Set the number of bytes to be written */
if (length < MAX_HWI2C_FIFO)
count = length - 1;
else
count = MAX_HWI2C_FIFO - 1;
poke32(I2C_BYTE_COUNT, count);
/* Move the data to the I2C data register */
for (i = 0; i <= count; i++)
poke32(I2C_DATA0 + i, *buf++);
/* Start the I2C */
poke32(I2C_CTRL, peek32(I2C_CTRL) | I2C_CTRL_CTRL);
/* Wait until the transfer is completed. */
if (hw_i2c_wait_tx_done() != 0)
break;
/* Subtract length */
length -= (count + 1);
/* Total byte written */
total_bytes += (count + 1);
} while (length > 0);
return total_bytes;
}
/*
* This function reads data from the slave device and stores them
* in the given buffer
*
* Parameters:
* addr - i2c Slave device address
* length - Total number of bytes to be read
* buf - Pointer to a buffer to be filled with the data read
* from the slave device. It has to be the same size as the
* length to make sure that it can keep all the data read.
*
* Return Value:
* Total number of actual bytes read from the slave device
*/
static unsigned int hw_i2c_read_data(unsigned char addr,
unsigned int length,
unsigned char *buf)
{
unsigned char count, i;
unsigned int total_bytes = 0;
/* Set the Device Address */
poke32(I2C_SLAVE_ADDRESS, addr | 0x01);
/*
* Read data and save them to the buffer.
* Note:
* Only 16 byte can be accessed per i2c start instruction.
*/
do {
/*
* Reset I2C by writing 0 to I2C_RESET register to
* clear all the status.
*/
poke32(I2C_RESET, 0);
/* Set the number of bytes to be read */
if (length <= MAX_HWI2C_FIFO)
count = length - 1;
else
count = MAX_HWI2C_FIFO - 1;
poke32(I2C_BYTE_COUNT, count);
/* Start the I2C */
poke32(I2C_CTRL, peek32(I2C_CTRL) | I2C_CTRL_CTRL);
/* Wait until transaction done. */
if (hw_i2c_wait_tx_done() != 0)
break;
/* Save the data to the given buffer */
for (i = 0; i <= count; i++)
*buf++ = peek32(I2C_DATA0 + i);
/* Subtract length by 16 */
length -= (count + 1);
/* Number of bytes read. */
total_bytes += (count + 1);
} while (length > 0);
return total_bytes;
}
/*
* This function reads the slave device's register
*
* Parameters:
* deviceAddress - i2c Slave device address which register
* to be read from
* registerIndex - Slave device's register to be read
*
* Return Value:
* Register value
*/
unsigned char sm750_hw_i2c_read_reg(unsigned char addr, unsigned char reg)
{
unsigned char value = 0xFF;
if (hw_i2c_write_data(addr, 1, &reg) == 1)
hw_i2c_read_data(addr, 1, &value);
return value;
}
/*
* This function writes a value to the slave device's register
*
* Parameters:
* deviceAddress - i2c Slave device address which register
* to be written
* registerIndex - Slave device's register to be written
* data - Data to be written to the register
*
* Result:
* 0 - Success
* -1 - Fail
*/
int sm750_hw_i2c_write_reg(unsigned char addr,
unsigned char reg,
unsigned char data)
{
unsigned char value[2];
value[0] = reg;
value[1] = data;
if (hw_i2c_write_data(addr, 2, value) == 2)
return 0;
return -1;
}
#endif

View file

@ -1,12 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef DDK750_HWI2C_H__
#define DDK750_HWI2C_H__
/* hwi2c functions */
int sm750_hw_i2c_init(unsigned char bus_speed_mode);
void sm750_hw_i2c_close(void);
unsigned char sm750_hw_i2c_read_reg(unsigned char addr, unsigned char reg);
int sm750_hw_i2c_write_reg(unsigned char addr, unsigned char reg,
unsigned char data);
#endif

View file

@ -3,10 +3,10 @@
#define DDK750_POWER_H__
enum dpms {
crtDPMS_ON = 0x0,
crtDPMS_STANDBY = 0x1,
crtDPMS_SUSPEND = 0x2,
crtDPMS_OFF = 0x3,
CRT_DPMS_ON = 0x0,
CRT_DPMS_STANDBY = 0x1,
CRT_DPMS_SUSPEND = 0x2,
CRT_DPMS_OFF = 0x3,
};
#define set_DAC(off) { \

View file

@ -1,408 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
#define USE_DVICHIP
#ifdef USE_DVICHIP
#include "ddk750_sii164.h"
#include "ddk750_hwi2c.h"
/* I2C Address of each SII164 chip */
#define SII164_I2C_ADDRESS 0x70
/* Define this definition to use hardware i2c. */
#define USE_HW_I2C
#ifdef USE_HW_I2C
#define i2cWriteReg sm750_hw_i2c_write_reg
#define i2cReadReg sm750_hw_i2c_read_reg
#else
#define i2cWriteReg sm750_sw_i2c_write_reg
#define i2cReadReg sm750_sw_i2c_read_reg
#endif
/* SII164 Vendor and Device ID */
#define SII164_VENDOR_ID 0x0001
#define SII164_DEVICE_ID 0x0006
#ifdef SII164_FULL_FUNCTIONS
/* Name of the DVI Controller chip */
static char *gDviCtrlChipName = "Silicon Image SiI 164";
#endif
/*
* sii164_get_vendor_id
* This function gets the vendor ID of the DVI controller chip.
*
* Output:
* Vendor ID
*/
unsigned short sii164_get_vendor_id(void)
{
unsigned short vendorID;
vendorID = ((unsigned short)i2cReadReg(SII164_I2C_ADDRESS,
SII164_VENDOR_ID_HIGH) << 8) |
(unsigned short)i2cReadReg(SII164_I2C_ADDRESS,
SII164_VENDOR_ID_LOW);
return vendorID;
}
/*
* sii164GetDeviceID
* This function gets the device ID of the DVI controller chip.
*
* Output:
* Device ID
*/
unsigned short sii164GetDeviceID(void)
{
unsigned short deviceID;
deviceID = ((unsigned short)i2cReadReg(SII164_I2C_ADDRESS,
SII164_DEVICE_ID_HIGH) << 8) |
(unsigned short)i2cReadReg(SII164_I2C_ADDRESS,
SII164_DEVICE_ID_LOW);
return deviceID;
}
/*
* DVI.C will handle all SiI164 chip stuffs and try its best to make code
* minimal and useful
*/
/*
* sii164_init_chip
* This function initialize and detect the DVI controller chip.
*
* Input:
* edge_select - Edge Select:
* 0 = Input data is falling edge latched (falling
* edge latched first in dual edge mode)
* 1 = Input data is rising edge latched (rising
* edge latched first in dual edge mode)
* bus_select - Input Bus Select:
* 0 = Input data bus is 12-bits wide
* 1 = Input data bus is 24-bits wide
* dual_edge_clk_select - Dual Edge Clock Select
* 0 = Input data is single edge latched
* 1 = Input data is dual edge latched
* hsync_enable - Horizontal Sync Enable:
* 0 = HSYNC input is transmitted as fixed LOW
* 1 = HSYNC input is transmitted as is
* vsync_enable - Vertical Sync Enable:
* 0 = VSYNC input is transmitted as fixed LOW
* 1 = VSYNC input is transmitted as is
* deskew_enable - De-skewing Enable:
* 0 = De-skew disabled
* 1 = De-skew enabled
* deskew_setting - De-skewing Setting (increment of 260psec)
* 0 = 1 step --> minimum setup / maximum hold
* 1 = 2 step
* 2 = 3 step
* 3 = 4 step
* 4 = 5 step
* 5 = 6 step
* 6 = 7 step
* 7 = 8 step --> maximum setup / minimum hold
* continuous_sync_enable- SYNC Continuous:
* 0 = Disable
* 1 = Enable
* pll_filter_enable - PLL Filter Enable
* 0 = Disable PLL Filter
* 1 = Enable PLL Filter
* pll_filter_value - PLL Filter characteristics:
* 0~7 (recommended value is 4)
*
* Output:
* 0 - Success
* -1 - Fail.
*/
long sii164_init_chip(unsigned char edge_select,
unsigned char bus_select,
unsigned char dual_edge_clk_select,
unsigned char hsync_enable,
unsigned char vsync_enable,
unsigned char deskew_enable,
unsigned char deskew_setting,
unsigned char continuous_sync_enable,
unsigned char pll_filter_enable,
unsigned char pll_filter_value)
{
unsigned char config;
/* Initialize the i2c bus */
#ifdef USE_HW_I2C
/* Use fast mode. */
sm750_hw_i2c_init(1);
#else
sm750_sw_i2c_init(DEFAULT_I2C_SCL, DEFAULT_I2C_SDA);
#endif
/* Check if SII164 Chip exists */
if ((sii164_get_vendor_id() == SII164_VENDOR_ID) &&
(sii164GetDeviceID() == SII164_DEVICE_ID)) {
/*
* Initialize SII164 controller chip.
*/
/* Select the edge */
if (edge_select == 0)
config = SII164_CONFIGURATION_LATCH_FALLING;
else
config = SII164_CONFIGURATION_LATCH_RISING;
/* Select bus wide */
if (bus_select == 0)
config |= SII164_CONFIGURATION_BUS_12BITS;
else
config |= SII164_CONFIGURATION_BUS_24BITS;
/* Select Dual/Single Edge Clock */
if (dual_edge_clk_select == 0)
config |= SII164_CONFIGURATION_CLOCK_SINGLE;
else
config |= SII164_CONFIGURATION_CLOCK_DUAL;
/* Select HSync Enable */
if (hsync_enable == 0)
config |= SII164_CONFIGURATION_HSYNC_FORCE_LOW;
else
config |= SII164_CONFIGURATION_HSYNC_AS_IS;
/* Select VSync Enable */
if (vsync_enable == 0)
config |= SII164_CONFIGURATION_VSYNC_FORCE_LOW;
else
config |= SII164_CONFIGURATION_VSYNC_AS_IS;
i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
/*
* De-skew enabled with default 111b value.
* This fixes some artifacts problem in some mode on board 2.2.
* Somehow this fix does not affect board 2.1.
*/
if (deskew_enable == 0)
config = SII164_DESKEW_DISABLE;
else
config = SII164_DESKEW_ENABLE;
switch (deskew_setting) {
case 0:
config |= SII164_DESKEW_1_STEP;
break;
case 1:
config |= SII164_DESKEW_2_STEP;
break;
case 2:
config |= SII164_DESKEW_3_STEP;
break;
case 3:
config |= SII164_DESKEW_4_STEP;
break;
case 4:
config |= SII164_DESKEW_5_STEP;
break;
case 5:
config |= SII164_DESKEW_6_STEP;
break;
case 6:
config |= SII164_DESKEW_7_STEP;
break;
case 7:
config |= SII164_DESKEW_8_STEP;
break;
}
i2cWriteReg(SII164_I2C_ADDRESS, SII164_DESKEW, config);
/* Enable/Disable Continuous Sync. */
if (continuous_sync_enable == 0)
config = SII164_PLL_FILTER_SYNC_CONTINUOUS_DISABLE;
else
config = SII164_PLL_FILTER_SYNC_CONTINUOUS_ENABLE;
/* Enable/Disable PLL Filter */
if (pll_filter_enable == 0)
config |= SII164_PLL_FILTER_DISABLE;
else
config |= SII164_PLL_FILTER_ENABLE;
/* Set the PLL Filter value */
config |= ((pll_filter_value & 0x07) << 1);
i2cWriteReg(SII164_I2C_ADDRESS, SII164_PLL, config);
/* Recover from Power Down and enable output. */
config = i2cReadReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION);
config |= SII164_CONFIGURATION_POWER_NORMAL;
i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
return 0;
}
/* Return -1 if initialization fails. */
return -1;
}
/* below sii164 function is not necessary */
#ifdef SII164_FULL_FUNCTIONS
/*
* sii164ResetChip
* This function resets the DVI Controller Chip.
*/
void sii164ResetChip(void)
{
/* Power down */
sii164SetPower(0);
sii164SetPower(1);
}
/*
* sii164GetChipString
* This function returns a char string name of the current DVI Controller
* chip.
*
* It's convenient for application need to display the chip name.
*/
char *sii164GetChipString(void)
{
return gDviCtrlChipName;
}
/*
* sii164SetPower
* This function sets the power configuration of the DVI Controller Chip.
*
* Input:
* powerUp - Flag to set the power down or up
*/
void sii164SetPower(unsigned char powerUp)
{
unsigned char config;
config = i2cReadReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION);
if (powerUp == 1) {
/* Power up the chip */
config &= ~SII164_CONFIGURATION_POWER_MASK;
config |= SII164_CONFIGURATION_POWER_NORMAL;
i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
} else {
/* Power down the chip */
config &= ~SII164_CONFIGURATION_POWER_MASK;
config |= SII164_CONFIGURATION_POWER_DOWN;
i2cWriteReg(SII164_I2C_ADDRESS, SII164_CONFIGURATION, config);
}
}
/*
* sii164SelectHotPlugDetectionMode
* This function selects the mode of the hot plug detection.
*/
static
void sii164SelectHotPlugDetectionMode(enum sii164_hot_plug_mode hotPlugMode)
{
unsigned char detectReg;
detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) &
~SII164_DETECT_MONITOR_SENSE_OUTPUT_FLAG;
switch (hotPlugMode) {
case SII164_HOTPLUG_DISABLE:
detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_HIGH;
break;
case SII164_HOTPLUG_USE_MDI:
detectReg &= ~SII164_DETECT_INTERRUPT_MASK;
detectReg |= SII164_DETECT_INTERRUPT_BY_HTPLG_PIN;
detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_MDI;
break;
case SII164_HOTPLUG_USE_RSEN:
detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_RSEN;
break;
case SII164_HOTPLUG_USE_HTPLG:
detectReg |= SII164_DETECT_MONITOR_SENSE_OUTPUT_HTPLG;
break;
}
i2cWriteReg(SII164_I2C_ADDRESS, SII164_DETECT, detectReg);
}
/*
* sii164EnableHotPlugDetection
* This function enables the Hot Plug detection.
*
* enableHotPlug - Enable (=1) / disable (=0) Hot Plug detection
*/
void sii164EnableHotPlugDetection(unsigned char enableHotPlug)
{
unsigned char detectReg;
detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT);
/* Depending on each DVI controller, need to enable the hot plug based
* on each individual chip design.
*/
if (enableHotPlug != 0)
sii164SelectHotPlugDetectionMode(SII164_HOTPLUG_USE_MDI);
else
sii164SelectHotPlugDetectionMode(SII164_HOTPLUG_DISABLE);
}
/*
* sii164IsConnected
* Check if the DVI Monitor is connected.
*
* Output:
* 0 - Not Connected
* 1 - Connected
*/
unsigned char sii164IsConnected(void)
{
unsigned char hotPlugValue;
hotPlugValue = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) &
SII164_DETECT_HOT_PLUG_STATUS_MASK;
if (hotPlugValue == SII164_DETECT_HOT_PLUG_STATUS_ON)
return 1;
else
return 0;
}
/*
* sii164CheckInterrupt
* Checks if interrupt has occurred.
*
* Output:
* 0 - No interrupt
* 1 - Interrupt occurs
*/
unsigned char sii164CheckInterrupt(void)
{
unsigned char detectReg;
detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT) &
SII164_DETECT_MONITOR_STATE_MASK;
if (detectReg == SII164_DETECT_MONITOR_STATE_CHANGE)
return 1;
else
return 0;
}
/*
* sii164ClearInterrupt
* Clear the hot plug interrupt.
*/
void sii164ClearInterrupt(void)
{
unsigned char detectReg;
/* Clear the MDI interrupt */
detectReg = i2cReadReg(SII164_I2C_ADDRESS, SII164_DETECT);
i2cWriteReg(SII164_I2C_ADDRESS, SII164_DETECT,
detectReg | SII164_DETECT_MONITOR_STATE_CLEAR);
}
#endif
#endif

View file

@ -1,174 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef DDK750_SII164_H__
#define DDK750_SII164_H__
#define USE_DVICHIP
/* Hot Plug detection mode structure */
enum sii164_hot_plug_mode {
SII164_HOTPLUG_DISABLE = 0, /* Disable Hot Plug output bit
* (always high).
*/
SII164_HOTPLUG_USE_MDI, /* Use Monitor Detect Interrupt bit. */
SII164_HOTPLUG_USE_RSEN, /* Use Receiver Sense detect bit. */
SII164_HOTPLUG_USE_HTPLG /* Use Hot Plug detect bit. */
};
/* Silicon Image SiI164 chip prototype */
long sii164_init_chip(unsigned char edgeSelect,
unsigned char busSelect,
unsigned char dualEdgeClkSelect,
unsigned char hsyncEnable,
unsigned char vsyncEnable,
unsigned char deskewEnable,
unsigned char deskewSetting,
unsigned char continuousSyncEnable,
unsigned char pllFilterEnable,
unsigned char pllFilterValue);
unsigned short sii164_get_vendor_id(void);
unsigned short sii164GetDeviceID(void);
#ifdef SII164_FULL_FUNCTIONS
void sii164ResetChip(void);
char *sii164GetChipString(void);
void sii164SetPower(unsigned char powerUp);
void sii164EnableHotPlugDetection(unsigned char enableHotPlug);
unsigned char sii164IsConnected(void);
unsigned char sii164CheckInterrupt(void);
void sii164ClearInterrupt(void);
#endif
/*
* below register definition is used for
* Silicon Image SiI164 DVI controller chip
*/
/*
* Vendor ID registers
*/
#define SII164_VENDOR_ID_LOW 0x00
#define SII164_VENDOR_ID_HIGH 0x01
/*
* Device ID registers
*/
#define SII164_DEVICE_ID_LOW 0x02
#define SII164_DEVICE_ID_HIGH 0x03
/*
* Device Revision
*/
#define SII164_DEVICE_REVISION 0x04
/*
* Frequency Limitation registers
*/
#define SII164_FREQUENCY_LIMIT_LOW 0x06
#define SII164_FREQUENCY_LIMIT_HIGH 0x07
/*
* Power Down and Input Signal Configuration registers
*/
#define SII164_CONFIGURATION 0x08
/* Power down (PD) */
#define SII164_CONFIGURATION_POWER_DOWN 0x00
#define SII164_CONFIGURATION_POWER_NORMAL 0x01
#define SII164_CONFIGURATION_POWER_MASK 0x01
/* Input Edge Latch Select (EDGE) */
#define SII164_CONFIGURATION_LATCH_FALLING 0x00
#define SII164_CONFIGURATION_LATCH_RISING 0x02
/* Bus Select (BSEL) */
#define SII164_CONFIGURATION_BUS_12BITS 0x00
#define SII164_CONFIGURATION_BUS_24BITS 0x04
/* Dual Edge Clock Select (DSEL) */
#define SII164_CONFIGURATION_CLOCK_SINGLE 0x00
#define SII164_CONFIGURATION_CLOCK_DUAL 0x08
/* Horizontal Sync Enable (HEN) */
#define SII164_CONFIGURATION_HSYNC_FORCE_LOW 0x00
#define SII164_CONFIGURATION_HSYNC_AS_IS 0x10
/* Vertical Sync Enable (VEN) */
#define SII164_CONFIGURATION_VSYNC_FORCE_LOW 0x00
#define SII164_CONFIGURATION_VSYNC_AS_IS 0x20
/*
* Detection registers
*/
#define SII164_DETECT 0x09
/* Monitor Detect Interrupt (MDI) */
#define SII164_DETECT_MONITOR_STATE_CHANGE 0x00
#define SII164_DETECT_MONITOR_STATE_NO_CHANGE 0x01
#define SII164_DETECT_MONITOR_STATE_CLEAR 0x01
#define SII164_DETECT_MONITOR_STATE_MASK 0x01
/* Hot Plug detect Input (HTPLG) */
#define SII164_DETECT_HOT_PLUG_STATUS_OFF 0x00
#define SII164_DETECT_HOT_PLUG_STATUS_ON 0x02
#define SII164_DETECT_HOT_PLUG_STATUS_MASK 0x02
/* Receiver Sense (RSEN) */
#define SII164_DETECT_RECEIVER_SENSE_NOT_DETECTED 0x00
#define SII164_DETECT_RECEIVER_SENSE_DETECTED 0x04
/* Interrupt Generation Method (TSEL) */
#define SII164_DETECT_INTERRUPT_BY_RSEN_PIN 0x00
#define SII164_DETECT_INTERRUPT_BY_HTPLG_PIN 0x08
#define SII164_DETECT_INTERRUPT_MASK 0x08
/* Monitor Sense Output (MSEN) */
#define SII164_DETECT_MONITOR_SENSE_OUTPUT_HIGH 0x00
#define SII164_DETECT_MONITOR_SENSE_OUTPUT_MDI 0x10
#define SII164_DETECT_MONITOR_SENSE_OUTPUT_RSEN 0x20
#define SII164_DETECT_MONITOR_SENSE_OUTPUT_HTPLG 0x30
#define SII164_DETECT_MONITOR_SENSE_OUTPUT_FLAG 0x30
/*
* Skewing registers
*/
#define SII164_DESKEW 0x0A
/* General Purpose Input (CTL[3:1]) */
#define SII164_DESKEW_GENERAL_PURPOSE_INPUT_MASK 0x0E
/* De-skewing Enable bit (DKEN) */
#define SII164_DESKEW_DISABLE 0x00
#define SII164_DESKEW_ENABLE 0x10
/* De-skewing Setting (DK[3:1])*/
#define SII164_DESKEW_1_STEP 0x00
#define SII164_DESKEW_2_STEP 0x20
#define SII164_DESKEW_3_STEP 0x40
#define SII164_DESKEW_4_STEP 0x60
#define SII164_DESKEW_5_STEP 0x80
#define SII164_DESKEW_6_STEP 0xA0
#define SII164_DESKEW_7_STEP 0xC0
#define SII164_DESKEW_8_STEP 0xE0
/*
* User Configuration Data registers (CFG 7:0)
*/
#define SII164_USER_CONFIGURATION 0x0B
/*
* PLL registers
*/
#define SII164_PLL 0x0C
/* PLL Filter Value (PLLF) */
#define SII164_PLL_FILTER_VALUE_MASK 0x0E
/* PLL Filter Enable (PFEN) */
#define SII164_PLL_FILTER_DISABLE 0x00
#define SII164_PLL_FILTER_ENABLE 0x01
/* Sync Continuous (SCNT) */
#define SII164_PLL_FILTER_SYNC_CONTINUOUS_DISABLE 0x00
#define SII164_PLL_FILTER_SYNC_CONTINUOUS_ENABLE 0x80
#endif

View file

@ -120,12 +120,12 @@ static int lynxfb_ops_cursor(struct fb_info *info, struct fb_cursor *fbcursor)
sm750_hw_cursor_disable(cursor);
if (fbcursor->set & FB_CUR_SETSIZE)
sm750_hw_cursor_setSize(cursor,
sm750_hw_cursor_set_size(cursor,
fbcursor->image.width,
fbcursor->image.height);
if (fbcursor->set & FB_CUR_SETPOS)
sm750_hw_cursor_setPos(cursor,
sm750_hw_cursor_set_pos(cursor,
fbcursor->image.dx - info->var.xoffset,
fbcursor->image.dy - info->var.yoffset);
@ -141,14 +141,12 @@ static int lynxfb_ops_cursor(struct fb_info *info, struct fb_cursor *fbcursor)
((info->cmap.green[fbcursor->image.bg_color] & 0xfc00) >> 5) |
((info->cmap.blue[fbcursor->image.bg_color] & 0xf800) >> 11);
sm750_hw_cursor_setColor(cursor, fg, bg);
sm750_hw_cursor_set_color(cursor, fg, bg);
}
if (fbcursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETIMAGE)) {
sm750_hw_cursor_setData(cursor,
fbcursor->rop,
fbcursor->image.data,
fbcursor->mask);
sm750_hw_cursor_set_data(cursor, fbcursor->rop, fbcursor->image.data,
fbcursor->mask);
}
if (fbcursor->enable)
@ -394,9 +392,9 @@ static int lynxfb_ops_set_par(struct fb_info *info)
pr_err("bpp %d not supported\n", var->bits_per_pixel);
return ret;
}
ret = hw_sm750_crtc_setMode(crtc, var, fix);
ret = hw_sm750_crtc_set_mode(crtc, var, fix);
if (!ret)
ret = hw_sm750_output_setMode(output, var, fix);
ret = hw_sm750_output_set_mode(output, var, fix);
return ret;
}
@ -514,7 +512,7 @@ static int lynxfb_ops_check_var(struct fb_var_screeninfo *var,
return -ENOMEM;
}
return hw_sm750_crtc_checkMode(crtc, var);
return hw_sm750_crtc_check_mode(crtc, var);
}
static int lynxfb_ops_setcolreg(unsigned int regno,
@ -547,7 +545,7 @@ static int lynxfb_ops_setcolreg(unsigned int regno,
red >>= 8;
green >>= 8;
blue >>= 8;
ret = hw_sm750_setColReg(crtc, regno, red, green, blue);
ret = hw_sm750_set_col_reg(crtc, regno, red, green, blue);
goto exit;
}
@ -608,10 +606,10 @@ static int sm750fb_set_drv(struct lynxfb_par *par)
crtc->ywrapstep = 0;
output->proc_setBLANK = (sm750_dev->revid == SM750LE_REVISION_ID) ?
hw_sm750le_setBLANK : hw_sm750_setBLANK;
hw_sm750le_set_blank : hw_sm750_set_blank;
/* chip specific phase */
sm750_dev->accel.de_wait = (sm750_dev->revid == SM750LE_REVISION_ID) ?
hw_sm750le_deWait : hw_sm750_deWait;
hw_sm750le_de_wait : hw_sm750_de_wait;
switch (sm750_dev->dataflow) {
case sm750_simul_pri:
output->paths = sm750_pnc;

View file

@ -193,26 +193,26 @@ static inline unsigned long ps_to_hz(unsigned int psvalue)
int hw_sm750_map(struct sm750_dev *sm750_dev, struct pci_dev *pdev);
int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev);
void hw_sm750_initAccel(struct sm750_dev *sm750_dev);
int hw_sm750_deWait(void);
int hw_sm750le_deWait(void);
void hw_sm750_init_accel(struct sm750_dev *sm750_dev);
int hw_sm750_de_wait(void);
int hw_sm750le_de_wait(void);
int hw_sm750_output_setMode(struct lynxfb_output *output,
struct fb_var_screeninfo *var,
struct fb_fix_screeninfo *fix);
int hw_sm750_output_set_mode(struct lynxfb_output *output,
struct fb_var_screeninfo *var,
struct fb_fix_screeninfo *fix);
int hw_sm750_crtc_checkMode(struct lynxfb_crtc *crtc,
struct fb_var_screeninfo *var);
int hw_sm750_crtc_check_mode(struct lynxfb_crtc *crtc,
struct fb_var_screeninfo *var);
int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
struct fb_var_screeninfo *var,
struct fb_fix_screeninfo *fix);
int hw_sm750_crtc_set_mode(struct lynxfb_crtc *crtc,
struct fb_var_screeninfo *var,
struct fb_fix_screeninfo *fix);
int hw_sm750_setColReg(struct lynxfb_crtc *crtc, ushort index,
ushort red, ushort green, ushort blue);
int hw_sm750_set_col_reg(struct lynxfb_crtc *crtc, ushort index,
ushort red, ushort green, ushort blue);
int hw_sm750_setBLANK(struct lynxfb_output *output, int blank);
int hw_sm750le_setBLANK(struct lynxfb_output *output, int blank);
int hw_sm750_set_blank(struct lynxfb_output *output, int blank);
int hw_sm750le_set_blank(struct lynxfb_output *output, int blank);
int hw_sm750_pan_display(struct lynxfb_crtc *crtc,
const struct fb_var_screeninfo *var,
const struct fb_info *info);

View file

@ -57,13 +57,13 @@ void sm750_hw_cursor_disable(struct lynx_cursor *cursor)
poke32(HWC_ADDRESS, 0);
}
void sm750_hw_cursor_setSize(struct lynx_cursor *cursor, int w, int h)
void sm750_hw_cursor_set_size(struct lynx_cursor *cursor, int w, int h)
{
cursor->w = w;
cursor->h = h;
}
void sm750_hw_cursor_setPos(struct lynx_cursor *cursor, int x, int y)
void sm750_hw_cursor_set_pos(struct lynx_cursor *cursor, int x, int y)
{
u32 reg;
@ -72,7 +72,7 @@ void sm750_hw_cursor_setPos(struct lynx_cursor *cursor, int x, int y)
poke32(HWC_LOCATION, reg);
}
void sm750_hw_cursor_setColor(struct lynx_cursor *cursor, u32 fg, u32 bg)
void sm750_hw_cursor_set_color(struct lynx_cursor *cursor, u32 fg, u32 bg)
{
u32 reg = (fg << HWC_COLOR_12_2_RGB565_SHIFT) &
HWC_COLOR_12_2_RGB565_MASK;
@ -81,8 +81,8 @@ void sm750_hw_cursor_setColor(struct lynx_cursor *cursor, u32 fg, u32 bg)
poke32(HWC_COLOR_3, 0xffe0);
}
void sm750_hw_cursor_setData(struct lynx_cursor *cursor, u16 rop,
const u8 *pcol, const u8 *pmsk)
void sm750_hw_cursor_set_data(struct lynx_cursor *cursor, u16 rop,
const u8 *pcol, const u8 *pmsk)
{
int i, j, count, pitch, offset;
u8 color, mask, opr;
@ -131,8 +131,8 @@ void sm750_hw_cursor_setData(struct lynx_cursor *cursor, u16 rop,
}
}
void sm750_hw_cursor_setData2(struct lynx_cursor *cursor, u16 rop,
const u8 *pcol, const u8 *pmsk)
void sm750_hw_cursor_set_data2(struct lynx_cursor *cursor, u16 rop,
const u8 *pcol, const u8 *pmsk)
{
int i, j, count, pitch, offset;
u8 color, mask;

View file

@ -5,11 +5,11 @@
/* hw_cursor_xxx works for voyager,718 and 750 */
void sm750_hw_cursor_enable(struct lynx_cursor *cursor);
void sm750_hw_cursor_disable(struct lynx_cursor *cursor);
void sm750_hw_cursor_setSize(struct lynx_cursor *cursor, int w, int h);
void sm750_hw_cursor_setPos(struct lynx_cursor *cursor, int x, int y);
void sm750_hw_cursor_setColor(struct lynx_cursor *cursor, u32 fg, u32 bg);
void sm750_hw_cursor_setData(struct lynx_cursor *cursor, u16 rop,
const u8 *data, const u8 *mask);
void sm750_hw_cursor_setData2(struct lynx_cursor *cursor, u16 rop,
void sm750_hw_cursor_set_size(struct lynx_cursor *cursor, int w, int h);
void sm750_hw_cursor_set_pos(struct lynx_cursor *cursor, int x, int y);
void sm750_hw_cursor_set_color(struct lynx_cursor *cursor, u32 fg, u32 bg);
void sm750_hw_cursor_set_data(struct lynx_cursor *cursor, u16 rop,
const u8 *data, const u8 *mask);
void sm750_hw_cursor_set_data2(struct lynx_cursor *cursor, u16 rop,
const u8 *data, const u8 *mask);
#endif

View file

@ -55,9 +55,8 @@ int hw_sm750_map(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
pr_err("mmio failed\n");
ret = -EFAULT;
goto exit;
} else {
pr_info("mmio virtual addr = %p\n", sm750_dev->pvReg);
}
pr_info("mmio virtual addr = %p\n", sm750_dev->pvReg);
sm750_dev->accel.dprBase = sm750_dev->pvReg + DE_BASE_ADDR_TYPE1;
sm750_dev->accel.dpPortBase = sm750_dev->pvReg + DE_PORT_ADDR_TYPE1;
@ -84,9 +83,8 @@ int hw_sm750_map(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
pr_err("Map video memory failed\n");
ret = -EFAULT;
goto exit;
} else {
pr_info("video memory vaddr = %p\n", sm750_dev->pvMem);
}
pr_info("video memory vaddr = %p\n", sm750_dev->pvMem);
exit:
return ret;
}
@ -175,14 +173,14 @@ int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
/* init 2d engine */
if (!sm750_dev->accel_off)
hw_sm750_initAccel(sm750_dev);
hw_sm750_init_accel(sm750_dev);
return 0;
}
int hw_sm750_output_setMode(struct lynxfb_output *output,
struct fb_var_screeninfo *var,
struct fb_fix_screeninfo *fix)
int hw_sm750_output_set_mode(struct lynxfb_output *output,
struct fb_var_screeninfo *var,
struct fb_fix_screeninfo *fix)
{
int ret;
enum disp_output disp_set;
@ -221,8 +219,8 @@ int hw_sm750_output_setMode(struct lynxfb_output *output,
return ret;
}
int hw_sm750_crtc_checkMode(struct lynxfb_crtc *crtc,
struct fb_var_screeninfo *var)
int hw_sm750_crtc_check_mode(struct lynxfb_crtc *crtc,
struct fb_var_screeninfo *var)
{
struct sm750_dev *sm750_dev;
struct lynxfb_par *par = container_of(crtc, struct lynxfb_par, crtc);
@ -247,9 +245,9 @@ int hw_sm750_crtc_checkMode(struct lynxfb_crtc *crtc,
}
/* set the controller's mode for @crtc charged with @var and @fix parameters */
int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
struct fb_var_screeninfo *var,
struct fb_fix_screeninfo *fix)
int hw_sm750_crtc_set_mode(struct lynxfb_crtc *crtc,
struct fb_var_screeninfo *var,
struct fb_fix_screeninfo *fix)
{
int ret, fmt;
u32 reg;
@ -372,8 +370,8 @@ exit:
return ret;
}
int hw_sm750_setColReg(struct lynxfb_crtc *crtc, ushort index, ushort red,
ushort green, ushort blue)
int hw_sm750_set_col_reg(struct lynxfb_crtc *crtc, ushort index, ushort red,
ushort green, ushort blue)
{
static unsigned int add[] = { PANEL_PALETTE_RAM, CRT_PALETTE_RAM };
@ -382,7 +380,7 @@ int hw_sm750_setColReg(struct lynxfb_crtc *crtc, ushort index, ushort red,
return 0;
}
int hw_sm750le_setBLANK(struct lynxfb_output *output, int blank)
int hw_sm750le_set_blank(struct lynxfb_output *output, int blank)
{
int dpms, crtdb;
@ -423,7 +421,7 @@ int hw_sm750le_setBLANK(struct lynxfb_output *output, int blank)
return 0;
}
int hw_sm750_setBLANK(struct lynxfb_output *output, int blank)
int hw_sm750_set_blank(struct lynxfb_output *output, int blank)
{
unsigned int dpms, pps, crtdb;
@ -476,7 +474,7 @@ int hw_sm750_setBLANK(struct lynxfb_output *output, int blank)
return 0;
}
void hw_sm750_initAccel(struct sm750_dev *sm750_dev)
void hw_sm750_init_accel(struct sm750_dev *sm750_dev)
{
u32 reg;
@ -506,7 +504,7 @@ void hw_sm750_initAccel(struct sm750_dev *sm750_dev)
sm750_dev->accel.de_init(&sm750_dev->accel);
}
int hw_sm750le_deWait(void)
int hw_sm750le_de_wait(void)
{
int i = 0x10000000;
unsigned int mask = DE_STATE2_DE_STATUS_BUSY | DE_STATE2_DE_FIFO_EMPTY |
@ -523,7 +521,7 @@ int hw_sm750le_deWait(void)
return -1;
}
int hw_sm750_deWait(void)
int hw_sm750_de_wait(void)
{
int i = 0x10000000;
unsigned int mask = SYSTEM_CTRL_DE_STATUS_BUSY |

View file

@ -71,6 +71,7 @@ static int snd_bcm2835_ctl_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct bcm2835_chip *chip = snd_kcontrol_chip(kcontrol);
struct snd_ctl_elem_info info;
int val, *valp;
int changed = 0;
@ -84,6 +85,11 @@ static int snd_bcm2835_ctl_put(struct snd_kcontrol *kcontrol,
return -EINVAL;
val = ucontrol->value.integer.value[0];
snd_bcm2835_ctl_info(kcontrol, &info);
if (val < info.value.integer.min || val > info.value.integer.max)
return -EINVAL;
mutex_lock(&chip->audio_mutex);
if (val != *valp) {
*valp = val;

View file

@ -533,17 +533,15 @@ static int ctrl_set_image_effect(struct bcm2835_mmal_dev *dev,
control = &dev->component[COMP_CAMERA]->control;
ret = vchiq_mmal_port_parameter_set(
dev->instance, control,
MMAL_PARAMETER_IMAGE_EFFECT_PARAMETERS,
&imagefx, sizeof(imagefx));
ret = vchiq_mmal_port_parameter_set(dev->instance, control,
MMAL_PARAMETER_IMAGE_EFFECT_PARAMETERS,
&imagefx, sizeof(imagefx));
if (ret)
goto exit;
ret = vchiq_mmal_port_parameter_set(
dev->instance, control,
MMAL_PARAMETER_COLOUR_EFFECT,
&dev->colourfx, sizeof(dev->colourfx));
ret = vchiq_mmal_port_parameter_set(dev->instance, control,
MMAL_PARAMETER_COLOUR_EFFECT,
&dev->colourfx, sizeof(dev->colourfx));
}
exit: