TTY 緩衝區¶
在這裡,我們記錄了用於處理 tty 緩衝區及其翻轉的函式。驅動程式應該透過以下函式之一填充緩衝區,然後翻轉緩衝區,以便將資料傳遞給行規程以進行進一步處理。
翻轉緩衝區管理¶
引數
struct tty_port *porttty 埠
u8 **chars字元寫入區域的返回指標
size_t size所需大小
描述
在緩衝區中準備一個空間塊來儲存資料。
這用於需要它們自己的塊複製例程到緩衝區中的驅動程式。不保證緩衝區是 DMA 目標!
返回
可用長度和緩衝區指標 (chars) 到現在已分配並計為準備好用於正常字元的空間。
-
size_t tty_ldisc_receive_buf(struct tty_ldisc *ld, const u8 *p, const u8 *f, size_t count)¶
將資料轉發到行規程
引數
struct tty_ldisc *ld用於處理輸入的行規程
const u8 *p字元緩衝區
const u8 *fTTY_NORMAL、TTY_BREAK等標誌緩衝區size_t count要處理的位元組數
描述
除了flush_to_ldisc()之外的呼叫者需要排除 kworker 併發使用行規程,請參閱 paste_selection()。
返回
處理的位元組數。
引數
struct tty_port *port要推送的 tty 埠
描述
將終端翻轉緩衝區的推送排隊到行規程。可以從 IRQ/原子上下文中呼叫。
如果佇列忙於翻轉,則該工作將被擱置並在以後重試。
-
size_t tty_insert_flip_string_fixed_flag(struct tty_port *port, const u8 *chars, u8 flag, size_t size)¶
將字元新增到 tty 緩衝區
引數
struct tty_port *porttty 埠
const u8 *chars字元
u8 flag每個字元的標誌值
size_t size大小
描述
將一系列位元組排隊到 tty 緩衝中。所有傳遞的字元都標有提供的標誌。
返回
新增的數量。
-
size_t tty_insert_flip_string_flags(struct tty_port *port, const u8 *chars, const u8 *flags, size_t size)¶
將字元新增到 tty 緩衝區
引數
struct tty_port *porttty 埠
const u8 *chars字元
const u8 *flags標誌位元組
size_t size大小
描述
將一系列位元組排隊到 tty 緩衝中。對於每個字元,flags 陣列指示字元的狀態。
返回
新增的數量。
引數
struct tty_port *porttty 埠
u8 ch字元
u8 flag標誌位元組
描述
將單個位元組 ch 排隊到 tty 緩衝中,帶有可選標誌。
其他函式¶
引數
struct tty_port *port擁有翻轉緩衝區的 tty 埠
返回
驅動程式可以在不達到緩衝區限制的情況下寫入的位元組數。
注意
這不保證有記憶體可用於寫入返回的位元組數(如果需要記憶體保證,請使用tty_prepare_flip_string()進行預分配)。
引數
struct tty_port *port要更改的 tty 埠
int limit要設定的記憶體限制
描述
更改 tty 緩衝區記憶體限制。
必須在使用其他 tty 緩衝區函式之前呼叫。
緩衝區鎖定¶
這些僅在特殊情況下使用。避免使用它們。
引數
struct tty_port *port擁有翻轉緩衝區的 tty 埠
描述
透過排除緩衝區工作和任何待處理的重新整理使用翻轉緩衝區,保證安全使用tty_ldisc_ops.receive_buf()方法。資料可以繼續從驅動程式端併發新增到翻轉緩衝區。
內部函式¶
引數
struct tty_port *port要從中釋放的 tty 埠
描述
刪除 tty 上掛起的所有緩衝區,無論是在佇列中還是在空閒環中。當 tty 不再使用時必須呼叫。
引數
struct tty_port *porttty 埠
size_t size所需大小(字元)
描述
分配一個新的 tty 緩衝區以容納所需數量的字元。我們將緩衝區四捨五入為 256 個字元塊,以獲得更好的分配行為。
返回
如果記憶體不足或分配將超過每個裝置的佇列,則為NULL。
引數
struct tty_port *port擁有緩衝區的 tty 埠
struct tty_buffer *b要釋放的緩衝區
描述
釋放 tty 緩衝區,或根據我們的內部策略將其新增到空閒列表中。
-
void tty_buffer_flush(struct tty_struct *tty, struct tty_ldisc *ld)¶
重新整理已滿的 tty 緩衝區
引數
struct tty_struct *tty要重新整理的 tty
struct tty_ldisc *ld可選 ldisc 指標(必須引用)
描述
重新整理所有包含接收資料的緩衝區。如果 ld != NULL,則重新整理 ldisc 輸入緩衝區。
鎖定:獲取緩衝區鎖以確保單執行緒翻轉緩衝區“使用者”。
引數
struct tty_port *porttty 埠
size_t size所需大小
bool flags緩衝區必須儲存標誌以及字元資料
描述
為 tty 緩衝區提供至少 size 位元組的線性空間。
如果當前緩衝區編碼為TTY_NORMAL(因此沒有標誌緩衝區)並且新緩衝區需要標誌緩衝區,則將更改為新緩衝區。
返回
我們設法找到的大小。
-
void flush_to_ldisc(struct work_struct *work)¶
將資料從緩衝區重新整理到 ldisc
引數
struct work_struct *work從工作佇列傳遞的 tty 結構。
描述
此例程從軟體中斷中呼叫,以將資料從緩衝區鏈重新整理到行規程。
receive_buf() 方法對於每個 tty 例項都是單執行緒的。
鎖定:獲取緩衝區鎖以確保單執行緒翻轉緩衝區“使用者”。
-
int tty_insert_flip_string_and_push_buffer(struct tty_port *port, const u8 *chars, size_t size)¶
將字元新增到 tty 緩衝區並推送
引數
struct tty_port *porttty 埠
const u8 *chars字元
size_t size大小
描述
該函式結合了 tty_insert_flip_string() 和 tty_flip_buffer_push(),但正確地保持 port->lock 除外。
僅供內部使用(當前由 pty 使用)。
返回
新增的數量。
引數
struct tty_port *port要初始化的 tty 埠
描述
設定 tty 裝置的緩衝區管理的初始狀態。必須在使用其他 tty 緩衝區函式之前呼叫。