本文整理汇总了C++中tty_driver_flush_buffer函数的典型用法代码示例。如果您正苦于以下问题:C++ tty_driver_flush_buffer函数的具体用法?C++ tty_driver_flush_buffer怎么用?C++ tty_driver_flush_buffer使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了tty_driver_flush_buffer函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: st_tty_open
/*
* functions called from TTY layer
*/
static int st_tty_open(struct tty_struct *tty)
{
int err = 0;
struct st_data_s *st_gdata;
pr_info("%s ", __func__);
st_kim_ref(&st_gdata, 0);
st_gdata->tty = tty;
tty->disc_data = st_gdata;
/* don't do an wakeup for now */
clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
/* mem already allocated
*/
tty->receive_room = 65536;
/* Flush any pending characters in the driver and discipline. */
tty_ldisc_flush(tty);
tty_driver_flush_buffer(tty);
/*
* signal to UIM via KIM that -
* installation of N_TI_WL ldisc is complete
*/
st_kim_complete(st_gdata->kim_data);
pr_debug("done %s", __func__);
return err;
}
示例2: x25_asy_open_tty
static int x25_asy_open_tty(struct tty_struct *tty)
{
struct x25_asy *sl = tty->disc_data;
int err;
if (tty->ops->write == NULL)
return -EOPNOTSUPP;
/* */
if (sl && sl->magic == X25_ASY_MAGIC)
return -EEXIST;
/* */
sl = x25_asy_alloc();
if (sl == NULL)
return -ENFILE;
sl->tty = tty;
tty->disc_data = sl;
tty->receive_room = 65536;
tty_driver_flush_buffer(tty);
tty_ldisc_flush(tty);
/* */
sl->dev->type = ARPHRD_X25;
/* */
err = x25_asy_open(sl->dev);
if (err)
return err;
/* */
return 0;
}
示例3: x25_asy_open_tty
static int x25_asy_open_tty(struct tty_struct *tty)
{
struct x25_asy *sl;
int err;
if (tty->ops->write == NULL)
return -EOPNOTSUPP;
/* OK. Find a free X.25 channel to use. */
sl = x25_asy_alloc();
if (sl == NULL)
return -ENFILE;
sl->tty = tty;
tty->disc_data = sl;
tty->receive_room = 65536;
tty_driver_flush_buffer(tty);
tty_ldisc_flush(tty);
/* Restore default settings */
sl->dev->type = ARPHRD_X25;
/* Perform the low-level X.25 async init */
err = x25_asy_open(sl->dev);
if (err)
return err;
/* Done. We have linked the TTY line to a channel. */
return 0;
}
示例4: hci_uart_tty_open
/* hci_uart_tty_open
*
* Called when line discipline changed to HCI_UART.
*
* Arguments:
* tty pointer to tty info structure
* Return Value:
* 0 if success, otherwise error code
*/
static int hci_uart_tty_open(struct tty_struct *tty)
{
struct hci_uart *hu;
BT_DBG("tty %p", tty);
/* Error if the tty has no write op instead of leaving an exploitable
hole */
if (tty->ops->write == NULL)
return -EOPNOTSUPP;
hu = kzalloc(sizeof(struct hci_uart), GFP_KERNEL);
if (!hu) {
BT_ERR("Can't allocate control structure");
return -ENFILE;
}
tty->disc_data = hu;
hu->tty = tty;
tty->receive_room = 65536;
/* disable alignment support by default */
hu->alignment = 1;
hu->padding = 0;
INIT_WORK(&hu->init_ready, hci_uart_init_work);
INIT_WORK(&hu->write_work, hci_uart_write_work);
/* Flush any pending characters in the driver */
tty_driver_flush_buffer(tty);
return 0;
}
示例5: x25_asy_open_tty
static int x25_asy_open_tty(struct tty_struct *tty)
{
struct x25_asy *sl = tty->disc_data;
int err;
if (tty->ops->write == NULL)
return -EOPNOTSUPP;
/* First make sure we're not already connected. */
if (sl && sl->magic == X25_ASY_MAGIC)
return -EEXIST;
/* OK. Find a free X.25 channel to use. */
sl = x25_asy_alloc();
if (sl == NULL)
return -ENFILE;
sl->tty = tty;
tty->disc_data = sl;
tty->receive_room = 65536;
tty_driver_flush_buffer(tty);
tty_ldisc_flush(tty);
/* Restore default settings */
sl->dev->type = ARPHRD_X25;
/* Perform the low-level X.25 async init */
err = x25_asy_open(sl->dev);
if (err)
return err;
/* Done. We have linked the TTY line to a channel. */
return sl->dev->base_addr;
}
示例6: hci_uart_tty_open
/* hci_uart_tty_open
*
* Called when line discipline changed to HCI_UART.
*
* Arguments:
* tty pointer to tty info structure
* Return Value:
* 0 if success, otherwise error code
*/
static int hci_uart_tty_open(struct tty_struct *tty)
{
struct hci_uart *hu = (void *) tty->disc_data;
BT_DBG("tty %p", tty);
if (hu)
return -EEXIST;
if (!(hu = kzalloc(sizeof(struct hci_uart), GFP_KERNEL))) {
BT_ERR("Can't allocate control structure");
return -ENFILE;
}
tty->disc_data = hu;
hu->tty = tty;
tty->receive_room = 65536;
spin_lock_init(&hu->rx_lock);
/* Flush any pending characters in the driver and line discipline. */
/* FIXME: why is this needed. Note don't use ldisc_ref here as the
open path is before the ldisc is referencable */
if (tty->ldisc->ops->flush_buffer)
tty->ldisc->ops->flush_buffer(tty);
tty_driver_flush_buffer(tty);
return 0;
}
示例7: stp_uart_tty_open
/* stp_uart_tty_open
*
* Called when line discipline changed to HCI_UART.
*
* Arguments:
* tty pointer to tty info structure
* Return Value:
* 0 if success, otherwise error code
*/
static int stp_uart_tty_open(struct tty_struct *tty)
{
UART_DBG_FUNC("stp_uart_tty_opentty: %p\n", tty);
tty->receive_room = 65536;
tty->low_latency = 1;
/* Flush any pending characters in the driver and line discipline. */
/* FIXME: why is this needed. Note don't use ldisc_ref here as the
open path is before the ldisc is referencable */
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,29)
/* definition changed!! */
if (tty->ldisc->ops->flush_buffer) {
tty->ldisc->ops->flush_buffer(tty);
}
#else
if (tty->ldisc.ops->flush_buffer) {
tty->ldisc.ops->flush_buffer(tty);
}
#endif
tty_driver_flush_buffer(tty);
// init_MUTEX(&buf_mtx);
//// spin_lock_init(&buf_lock);
rd_idx = wr_idx = 0;
stp_tty = tty;
mtk_wcn_stp_register_if_tx(STP_UART_IF_TX, mtk_wcn_uart_tx);
return 0;
}
示例8: ps_tty_close
/**
* Prototype : ps_tty_close
* Description : called by tty uart when close tty uart from octty
* input : tty -> have opened tty
* output : not
* Calls :
* Called By :
*
* History :
* 1.Date : 2012/11/05
* Author : wx144390
* Modification : Created function
*
*/
STATIC void ps_tty_close(struct tty_struct *tty)
{
struct ps_core_s *ps_core_d = NULL;
PS_PRINT_INFO("%s: entered!!!\n", __func__);
if ((NULL == tty)||(NULL == tty->disc_data))
{
PS_PRINT_ERR("tty or tty->disc_data is NULL\n");
return;
}
ps_core_d = tty->disc_data;
/* Flush any pending characters in the driver and discipline. */
tty_ldisc_flush(tty);
tty_driver_flush_buffer(tty);
ps_core_d->tty = NULL;
/* signal to complate that N_HW_BFG ldisc is un-installed */
ps_tty_complete(ps_core_d->pm_data, TTY_LDISC_UNINSTALL);
PS_PRINT_INFO("uninstall complete done!\n");
ps_kfree_skb(ps_core_d, TX_HIGH_QUEUE);
ps_kfree_skb(ps_core_d, TX_LOW_QUEUE);
PS_PRINT_INFO("free tx sbk buf done!\n");
}
示例9: n_xbee_open
/*
* The following routines are called from above (user space/tty).
*/
static int n_xbee_open(struct tty_struct *tty) {
// Don't allow more than one tty to be attached
if( main_tty != NULL )
return -EPERM;
if (!try_module_get(THIS_MODULE))
return -ENODEV;
if (tty->ops->stop)
tty->ops->stop(tty);
main_tty = tty;
printk(KERN_ALERT "Attached to a tty!\n\n");
tty_driver_flush_buffer(tty);
tty_ldisc_flush(tty);
// For kernels < 3.10 it needs to be set
tty->receive_room = 4096;
/*priv->rbuff = kmalloc(XBEE_MAXFRAME, GFP_KERNEL);
priv->rcount = 0;
priv->frame_status = UNFRAMED;
priv->frame_len = 0;*/
return 0;
}
示例10: tty_ldisc_hangup
void tty_ldisc_hangup(struct tty_struct *tty)
{
struct tty_ldisc *ld;
int reset = tty->driver->flags & TTY_DRIVER_RESET_TERMIOS;
int err = 0;
/*
* FIXME! What are the locking issues here? This may me overdoing
* things... This question is especially important now that we've
* removed the irqlock.
*/
ld = tty_ldisc_ref(tty);
if (ld != NULL) {
/* We may have no line discipline at this point */
if (ld->ops->flush_buffer)
ld->ops->flush_buffer(tty);
tty_driver_flush_buffer(tty);
if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
ld->ops->write_wakeup)
ld->ops->write_wakeup(tty);
if (ld->ops->hangup)
ld->ops->hangup(tty);
tty_ldisc_deref(ld);
}
/*
* FIXME: Once we trust the LDISC code better we can wait here for
* ldisc completion and fix the driver call race
*/
wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
wake_up_interruptible_poll(&tty->read_wait, POLLIN);
/*
* Shutdown the current line discipline, and reset it to
* N_TTY if need be.
*
* Avoid racing set_ldisc or tty_ldisc_release
*/
mutex_lock(&tty->ldisc_mutex);
tty_ldisc_halt(tty);
/* At this point we have a closed ldisc and we want to
reopen it. We could defer this to the next open but
it means auditing a lot of other paths so this is
a FIXME */
if (tty->ldisc) { /* Not yet closed */
if (reset == 0) {
tty_ldisc_reinit(tty, tty->termios->c_line);
err = tty_ldisc_open(tty, tty->ldisc);
}
/* If the re-open fails or we reset then go to N_TTY. The
N_TTY open cannot fail */
if (reset || err) {
tty_ldisc_reinit(tty, N_TTY);
WARN_ON(tty_ldisc_open(tty, tty->ldisc));
}
tty_ldisc_enable(tty);
}
mutex_unlock(&tty->ldisc_mutex);
if (reset)
tty_reset_termios(tty);
}
示例11: isig
static inline void isig(int sig, struct tty_struct *tty, int flush)
{
if (tty->pgrp)
kill_pgrp(tty->pgrp, sig, 1);
if (flush || !L_NOFLSH(tty)) {
n_tty_flush_buffer(tty);
tty_driver_flush_buffer(tty);
}
}
示例12: st_tty_flush_buffer
static void st_tty_flush_buffer(struct tty_struct *tty)
{
struct st_data_s *st_gdata = tty->disc_data;
pr_debug("%s ", __func__);
kfree_skb(st_gdata->tx_skb);
st_gdata->tx_skb = NULL;
tty_driver_flush_buffer(tty);
return;
}
示例13: n_tracerouter_close
/**
* n_tracerouter_close() - close connection
* @tty: terminal device to the ldisc.
*
* Called when a software entity wants to close a connection.
*/
static void n_tracerouter_close(struct tty_struct *tty)
{
struct tracerouter_data *tptr = tty->disc_data;
mutex_lock(&routelock);
WARN_ON(tptr->kref_tty != tr_data->kref_tty);
tty_driver_flush_buffer(tty);
tty_kref_put(tr_data->kref_tty);
tr_data->kref_tty = NULL;
tr_data->opencalled = 0;
tty->disc_data = NULL;
mutex_unlock(&routelock);
}
示例14: ps_change_uart_baud_rate
/**
* Prototype : ps_change_uart_baud_rate
* Description : change arm platform uart baud rate to secend
* baud rate for high baud rate when download patch
* input : ps_core_d
* output : no
* Calls :
* Called By :
*
* History :
* 1.Date : 2012/11/05
* Author : wx144390
* Modification : Created function
*
*/
int32 ps_change_uart_baud_rate(int64 baud_rate, uint8 enable_flowctl)
{
struct ps_plat_s *ps_plat_d = NULL;
struct ps_core_s *ps_core_d;
uint64 timeleft = 0;
PS_PRINT_INFO("%s\n", __func__);
ps_get_plat_reference(&ps_plat_d);
if (unlikely(NULL == ps_plat_d))
{
PS_PRINT_ERR("ps_plat_d is NULL\n");
return -EINVAL;
}
ps_core_d = ps_plat_d->core_data;
if (likely(NULL != ps_core_d->tty))
{
tty_ldisc_flush(ps_core_d->tty);
tty_driver_flush_buffer(ps_core_d->tty);
}
if (!IS_ERR_OR_NULL(ps_core_d->tty))
{
if (tty_chars_in_buffer(ps_core_d->tty))
{
PS_PRINT_INFO("uart tx buf is not empty\n");
}
}
INIT_COMPLETION(ps_plat_d->ldisc_reconfiged);
ps_plat_d->flow_cntrl = enable_flowctl;
ps_plat_d->baud_rate = baud_rate;
ps_plat_d->ldisc_install = TTY_LDISC_RECONFIG;
PS_PRINT_INFO("ldisc_install = %d\n", TTY_LDISC_RECONFIG);
sysfs_notify(g_sysfs_hi110x_bfgx, NULL, "install");
timeleft = wait_for_completion_timeout(&ps_plat_d->ldisc_reconfiged, msecs_to_jiffies(HISI_LDISC_TIME));
if (!timeleft)
{
PS_PRINT_ERR("hisi bfgx ldisc reconfig timeout\n");
CHR_EXCEPTION(CHR_GNSS_DRV(CHR_GNSS_DRV_EVENT_PLAT, CHR_PLAT_DRV_ERROR_CFG_UART));
return -EINVAL;
}
PS_PRINT_SUC("hisi bfgx ldisc reconfig succ\n");
return 0;
}
示例15: st_tty_close
static void st_tty_close(struct tty_struct *tty)
{
unsigned char i = ST_MAX_CHANNELS;
unsigned long flags = 0;
struct st_data_s *st_gdata = tty->disc_data;
pr_info("%s ", __func__);
/* TODO:
* if a protocol has been registered & line discipline
* un-installed for some reason - what should be done ?
*/
spin_lock_irqsave(&st_gdata->lock, flags);
for (i = 0; i < ST_MAX_CHANNELS; i++) {
if (st_gdata->is_registered[i] == true)
pr_err("%d not un-registered", i);
st_gdata->list[i] = NULL;
st_gdata->is_registered[i] = false;
}
st_gdata->protos_registered = 0;
spin_unlock_irqrestore(&st_gdata->lock, flags);
/*
* signal to UIM via KIM that -
* N_TI_WL ldisc is un-installed
*/
st_kim_complete(st_gdata->kim_data);
st_gdata->tty = NULL;
/* Flush any pending characters in the driver and discipline. */
tty_ldisc_flush(tty);
tty_driver_flush_buffer(tty);
spin_lock_irqsave(&st_gdata->lock, flags);
/* empty out txq and tx_waitq */
skb_queue_purge(&st_gdata->txq);
skb_queue_purge(&st_gdata->tx_waitq);
/* reset the TTY Rx states of ST */
st_gdata->rx_count = 0;
st_gdata->rx_state = ST_W4_PACKET_TYPE;
kfree_skb(st_gdata->rx_skb);
st_gdata->rx_skb = NULL;
spin_unlock_irqrestore(&st_gdata->lock, flags);
pm_runtime_put_noidle(st_gdata->tty_dev);
if (!pm_runtime_suspended(st_gdata->tty_dev))
__pm_runtime_idle(st_gdata->tty_dev, 0);
pr_debug("%s: done ", __func__);
}