Lines Matching refs:board

24 int ibcac(struct gpib_board *board, int sync, int fallback_to_async)  in ibcac()  argument
26 int status = ibstatus(board); in ibcac()
43 retval = board->interface->take_control(board, sync); in ibcac()
47 retval = board->interface->take_control(board, 0); in ibcac()
49 board->interface->update_status(board, 0); in ibcac()
66 static int check_for_command_acceptors(struct gpib_board *board) in check_for_command_acceptors() argument
70 if (board->interface->skip_check_for_command_acceptors) in check_for_command_acceptors()
72 if (!board->interface->line_status) in check_for_command_acceptors()
77 lines = board->interface->line_status(board); in check_for_command_acceptors()
101 int ibcmd(struct gpib_board *board, u8 *buf, size_t length, size_t *bytes_written) in ibcmd() argument
108 status = ibstatus(board); in ibcmd()
113 os_start_timer(board, board->usec_timeout); in ibcmd()
115 ret = ibcac(board, 1, 1); in ibcmd()
117 ret = check_for_command_acceptors(board); in ibcmd()
119 ret = board->interface->command(board, buf, length, bytes_written); in ibcmd()
122 os_remove_timer(board); in ibcmd()
124 if (io_timed_out(board)) in ibcmd()
136 int ibgts(struct gpib_board *board) in ibgts() argument
138 int status = ibstatus(board); in ibgts()
144 retval = board->interface->go_to_standby(board); /* go to standby */ in ibgts()
146 board->interface->update_status(board, 0); in ibgts()
151 static int autospoll_wait_should_wake_up(struct gpib_board *board) in autospoll_wait_should_wake_up() argument
155 mutex_lock(&board->big_gpib_mutex); in autospoll_wait_should_wake_up()
157 retval = board->master && board->autospollers > 0 && in autospoll_wait_should_wake_up()
158 !atomic_read(&board->stuck_srq) && in autospoll_wait_should_wake_up()
159 test_and_clear_bit(SRQI_NUM, &board->status); in autospoll_wait_should_wake_up()
161 mutex_unlock(&board->big_gpib_mutex); in autospoll_wait_should_wake_up()
167 struct gpib_board *board = board_void; in autospoll_thread() local
170 dev_dbg(board->gpib_dev, "entering autospoll thread\n"); in autospoll_thread()
173 wait_event_interruptible(board->wait, in autospoll_thread()
175 autospoll_wait_should_wake_up(board)); in autospoll_thread()
176 dev_dbg(board->gpib_dev, "autospoll wait satisfied\n"); in autospoll_thread()
180 mutex_lock(&board->big_gpib_mutex); in autospoll_thread()
182 if (board->autospollers <= 0 || board->master == 0) { in autospoll_thread()
183 mutex_unlock(&board->big_gpib_mutex); in autospoll_thread()
186 mutex_unlock(&board->big_gpib_mutex); in autospoll_thread()
188 if (try_module_get(board->provider_module)) { in autospoll_thread()
189 retval = autopoll_all_devices(board); in autospoll_thread()
190 module_put(board->provider_module); in autospoll_thread()
192 dev_err(board->gpib_dev, "try_module_get() failed!\n"); in autospoll_thread()
195 dev_err(board->gpib_dev, "stuck SRQ\n"); in autospoll_thread()
197 atomic_set(&board->stuck_srq, 1); // XXX could be better in autospoll_thread()
198 set_bit(SRQI_NUM, &board->status); in autospoll_thread()
204 int ibonline(struct gpib_board *board) in ibonline() argument
208 if (board->online) in ibonline()
210 if (!board->interface) in ibonline()
212 retval = gpib_allocate_board(board); in ibonline()
216 board->dev = NULL; in ibonline()
217 board->local_ppoll_mode = 0; in ibonline()
218 retval = board->interface->attach(board, &board->config); in ibonline()
220 board->interface->detach(board); in ibonline()
228 board->autospoll_task = kthread_run(&autospoll_thread, board, in ibonline()
229 "gpib%d_autospoll_kthread", board->minor); in ibonline()
230 retval = IS_ERR(board->autospoll_task); in ibonline()
232 dev_err(board->gpib_dev, "failed to create autospoll thread\n"); in ibonline()
233 board->interface->detach(board); in ibonline()
237 board->online = 1; in ibonline()
238 dev_dbg(board->gpib_dev, "board online\n"); in ibonline()
244 int iboffline(struct gpib_board *board) in iboffline() argument
248 if (board->online == 0) in iboffline()
250 if (!board->interface) in iboffline()
253 if (board->autospoll_task && !IS_ERR(board->autospoll_task)) { in iboffline()
254 retval = kthread_stop(board->autospoll_task); in iboffline()
256 dev_err(board->gpib_dev, "kthread_stop returned %i\n", retval); in iboffline()
257 board->autospoll_task = NULL; in iboffline()
260 board->interface->detach(board); in iboffline()
261 gpib_deallocate_board(board); in iboffline()
262 board->online = 0; in iboffline()
263 dev_dbg(board->gpib_dev, "board offline\n"); in iboffline()
276 int iblines(const struct gpib_board *board, short *lines) in iblines() argument
281 if (!board->interface->line_status) in iblines()
283 retval = board->interface->line_status(board); in iblines()
303 int ibrd(struct gpib_board *board, u8 *buf, size_t length, int *end_flag, size_t *nbytes) in ibrd() argument
314 if (board->master) { in ibrd()
315 retval = ibgts(board); in ibrd()
324 os_start_timer(board, board->usec_timeout); in ibrd()
327 ret = board->interface->read(board, buf, length - *nbytes, end_flag, &bytes_read); in ibrd()
337 os_remove_timer(board); in ibrd()
350 int ibrpp(struct gpib_board *board, u8 *result) in ibrpp() argument
354 os_start_timer(board, board->usec_timeout); in ibrpp()
355 retval = ibcac(board, 1, 1); in ibrpp()
359 retval = board->interface->parallel_poll(board, result); in ibrpp()
361 os_remove_timer(board); in ibrpp()
365 int ibppc(struct gpib_board *board, u8 configuration) in ibppc() argument
368 board->interface->parallel_poll_configure(board, configuration); in ibppc()
369 board->parallel_poll_configuration = configuration; in ibppc()
374 int ibrsv2(struct gpib_board *board, u8 status_byte, int new_reason_for_service) in ibrsv2() argument
376 int board_status = ibstatus(board); in ibrsv2()
385 if (board->interface->serial_poll_response2) { in ibrsv2()
386 board->interface->serial_poll_response2(board, status_byte, new_reason_for_service); in ibrsv2()
388 } else if (board->interface->serial_poll_response && in ibrsv2()
390 board->interface->serial_poll_response(board, status_byte); in ibrsv2()
407 int ibsic(struct gpib_board *board, unsigned int usec_duration) in ibsic() argument
409 if (board->master == 0) in ibsic()
417 dev_dbg(board->gpib_dev, "sending interface clear, delay = %ius\n", usec_duration); in ibsic()
418 board->interface->interface_clear(board, 1); in ibsic()
420 board->interface->interface_clear(board, 0); in ibsic()
425 int ibrsc(struct gpib_board *board, int request_control) in ibrsc() argument
429 if (!board->interface->request_system_control) in ibrsc()
432 retval = board->interface->request_system_control(board, request_control); in ibrsc()
437 board->master = request_control != 0; in ibrsc()
446 int ibsre(struct gpib_board *board, int enable) in ibsre() argument
448 if (board->master == 0) in ibsre()
451 board->interface->remote_enable(board, enable); /* set or clear REN */ in ibsre()
463 int ibpad(struct gpib_board *board, unsigned int addr) in ibpad() argument
468 board->pad = addr; in ibpad()
469 if (board->online) in ibpad()
470 board->interface->primary_address(board, board->pad); in ibpad()
471 dev_dbg(board->gpib_dev, "set primary addr to %i\n", board->pad); in ibpad()
481 int ibsad(struct gpib_board *board, int addr) in ibsad() argument
485 board->sad = addr; in ibsad()
486 if (board->online) { in ibsad()
487 if (board->sad >= 0) in ibsad()
488 board->interface->secondary_address(board, board->sad, 1); in ibsad()
490 board->interface->secondary_address(board, 0, 0); in ibsad()
492 dev_dbg(board->gpib_dev, "set secondary addr to %i\n", board->sad); in ibsad()
502 int ibeos(struct gpib_board *board, int eos, int eosflags) in ibeos() argument
509 retval = board->interface->enable_eos(board, eos, eosflags & BIN); in ibeos()
511 board->interface->disable_eos(board); in ibeos()
517 int ibstatus(struct gpib_board *board) in ibstatus() argument
519 return general_ibstatus(board, NULL, 0, 0, NULL); in ibstatus()
522 int general_ibstatus(struct gpib_board *board, const struct gpib_status_queue *device, in general_ibstatus() argument
528 if (board->private_data) { in general_ibstatus()
529 status = board->interface->update_status(board, clear_mask); in general_ibstatus()
536 if (iblines(board, &line_status) == 0) { in general_ibstatus()
560 if (num_gpib_events(&board->event_queue)) in general_ibstatus()
569 struct gpib_board *board; member
580 wake_up_interruptible(&winfo->board->wait); in wait_timeout()
585 winfo->board = NULL; in init_wait_info()
593 struct gpib_board *board = winfo->board; in wait_satisfied() local
596 if (mutex_lock_interruptible(&board->big_gpib_mutex)) in wait_satisfied()
599 temp_status = general_ibstatus(board, status_queue, 0, 0, desc); in wait_satisfied()
601 mutex_unlock(&board->big_gpib_mutex); in wait_satisfied()
639 int ibwait(struct gpib_board *board, int wait_mask, int clear_mask, int set_mask, in ibwait() argument
649 status_queue = get_gpib_status_queue(board, desc->pad, desc->sad); in ibwait()
652 *status = general_ibstatus(board, status_queue, clear_mask, set_mask, desc); in ibwait()
656 mutex_unlock(&board->big_gpib_mutex); in ibwait()
659 winfo.board = board; in ibwait()
663 if (wait_event_interruptible(board->wait, wait_satisfied(&winfo, status_queue, in ibwait()
665 dev_dbg(board->gpib_dev, "wait interrupted\n"); in ibwait()
672 if (mutex_lock_interruptible(&board->big_gpib_mutex)) in ibwait()
677 general_ibstatus(board, status_queue, *status & clear_mask, set_mask, NULL); in ibwait()
694 int ibwrt(struct gpib_board *board, u8 *buf, size_t cnt, int send_eoi, size_t *bytes_written) in ibwrt() argument
702 if (board->master) { in ibwrt()
703 retval = ibgts(board); in ibwrt()
707 os_start_timer(board, board->usec_timeout); in ibwrt()
708 ret = board->interface->write(board, buf, cnt, send_eoi, bytes_written); in ibwrt()
710 if (io_timed_out(board)) in ibwrt()
713 os_remove_timer(board); in ibwrt()