TTY IOCTL 助手

unsigned int tty_chars_in_buffer(struct tty_struct *tty)

待處理字元

引數

struct tty_struct *tty

終端

返回值

裝置私有輸出佇列中的資料位元組數。如果沒有提供私有方法,則假定裝置上沒有佇列。

unsigned int tty_write_room(struct tty_struct *tty)

寫入佇列空間

引數

struct tty_struct *tty

終端

返回值

當前可以排隊到此裝置的位元組數。結果應被視為保證,並且驅動程式提供的數值在後續縮小幅度上不能超過寫入的位元組數。如果沒有提供方法,則始終返回 2K,並且可能會丟失資料,因為沒有流量控制。

void tty_driver_flush_buffer(struct tty_struct *tty)

丟棄內部緩衝區

引數

struct tty_struct *tty

終端

描述

丟棄此裝置的內部輸出緩衝區。如果沒有提供方法,則緩衝區無法進行硬體重新整理,或者沒有驅動程式端的緩衝區。

void tty_unthrottle(struct tty_struct *tty)

流量控制

引數

struct tty_struct *tty

終端

描述

指示 tty 可以繼續向下堆疊傳輸資料。使用 tty_struct->termios_rwsem 來防止並行 throttle/unthrottle,並確保驅動程式在此處實現軟體流量控制時可以一致地引用其自己的 termios 資料。

但是,驅動程式應記住,堆疊可以發出 throttle,然後更改流量控制方法,然後 unthrottle。

bool tty_throttle_safe(struct tty_struct *tty)

流量控制

引數

struct tty_struct *tty

終端

描述

指示 tty 應停止向下堆疊傳輸資料。tty_throttle_safe() 僅在 tty->flow_changeTTY_THROTTLE_SAFE 時才會嘗試 throttle。防止由於在 throttle 之前評估的因素而導致 throttle 有條件時,由於競爭條件而意外 throttle。

返回值

如果 tty 被 throttle(或已被 throttle),則為 true

bool tty_unthrottle_safe(struct tty_struct *tty)

流量控制

引數

struct tty_struct *tty

終端

描述

tty_unthrottle() 類似,但僅在 tty->flow_changeTTY_UNTHROTTLE_SAFE 時才會嘗試 unthrottle。防止由於在 unthrottle 之前評估的因素而導致 unthrottle 有條件時,由於競爭條件而意外 unthrottle。

返回值

如果 tty 被 unthrottle(或已被 unthrottle),則為 true

void tty_wait_until_sent(struct tty_struct *tty, long timeout)

等待 I/O 完成

引數

struct tty_struct *tty

我們正在等待的 tty

long timeout

我們將等待多久

描述

等待 tty 驅動程式中待處理的字元到達線路,或等待超時發生(例如,由於流量控制)。

鎖定:無

void tty_termios_copy_hw(struct ktermios *new, const struct ktermios *old)

複製硬體設定

引數

struct ktermios *new

新 termios

const struct ktermios *old

舊 termios

描述

將硬體特定的終端設定位從 old termios 結構傳播到 new 結構。這用於硬體不支援重新配置的情況,或者作為僅支援最小重新配置的一些情況下的助手。

bool tty_termios_hw_change(const struct ktermios *a, const struct ktermios *b)

檢查設定更改

引數

const struct ktermios *a

termios

const struct ktermios *b

要比較的 termios

描述

檢查影響啞裝置的任何位是否在兩個 termios 結構之間發生了更改,或者是否需要速度更改。

返回值

如果需要更改,則為 true

unsigned char tty_get_char_size(unsigned int cflag)

獲取字元大小

引數

unsigned int cflag

termios cflag 值

返回值

取決於 cflagCSIZE 設定的字元大小(以位為單位)

unsigned char tty_get_frame_size(unsigned int cflag)

獲取幀大小

引數

unsigned int cflag

termios cflag 值

描述

根據 cflagCSIZECSTOPBPARENB 設定獲取幀的大小(以位為單位)。結果是字元大小、起始位和停止位(每個一位)、第二個停止位(如果設定)以及奇偶校驗位(如果設定)的總和。

返回值

取決於 cflag 設定的幀的大小(以位為單位)。

int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)

更新 termios 值

引數

struct tty_struct *tty

要更新的 tty

struct ktermios *new_termios

所需的新值

描述

對在此 tty 上設定的 termios 值執行更新。主 pty 的 termios 永遠不應設定。

鎖定:tty_struct->termios_rwsem

int set_termios(struct tty_struct *tty, void __user *arg, int opt)

設定 tty 的 termios 值

引數

struct tty_struct *tty

終端裝置

void __user *arg

使用者資料

int opt

選項資訊

描述

在實際進行更改之前,使用助手函式準備 termios 資料並執行必要的其他函式,然後使用 tty_set_termios()

鎖定:呼叫的函式採用 tty_struct->ldisc_semtty_struct->termios_rwsem

返回值

成功時為 0,否則為錯誤

int set_sgttyb(struct tty_struct *tty, struct sgttyb __user *sgttyb)

設定舊式終端值

引數

struct tty_struct *tty

tty 結構

struct sgttyb __user *sgttyb

指向舊式終端結構的指標

描述

從舊式 BSD 終端資訊結構更新終端。

鎖定:tty_struct->termios_rwsem

返回值

成功時為 0,否則為錯誤

int tty_change_softcar(struct tty_struct *tty, bool enable)

載波更改 ioctl 助手

引數

struct tty_struct *tty

要更新的 tty

bool enable

啟用/停用 CLOCAL

描述

執行 CLOCAL 狀態的更改,並呼叫驅動程式層使其可見。

鎖定:tty_struct->termios_rwsem

返回值

成功時為 0,否則為錯誤

int tty_mode_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)

模式相關的 ioctl

引數

struct tty_struct *tty

ioctl 的 tty

unsigned int cmd

命令

unsigned long arg

ioctl 引數

描述

執行非線路規程特定的模式控制 ioctl。這旨在由線路規程呼叫,以確保它們提供一致的模式設定。

speed_t tty_get_baud_rate(const struct tty_struct *tty)

獲取 tty 位元率

引數

const struct tty_struct *tty

要查詢的 tty

返回值

此終端的波特率(整數)

描述

鎖定:呼叫方必須持有 termios 鎖。