PARPORT介面文件¶
- 時間戳:
<2000-02-24 13:30:20 twaugh>
此處描述以下函式
- 全域性函式:
parport_register_driver parport_unregister_driver parport_enumerate parport_register_device parport_unregister_device parport_claim parport_claim_or_block parport_release parport_yield parport_yield_blocking parport_wait_peripheral parport_poll_peripheral parport_wait_event parport_negotiate parport_read parport_write parport_open parport_close parport_device_id parport_device_coords parport_find_class parport_find_device parport_set_timeout
埠函式(可以被底層驅動程式覆蓋)
- SPP:
port->ops->read_data port->ops->write_data port->ops->read_status port->ops->read_control port->ops->write_control port->ops->frob_control port->ops->enable_irq port->ops->disable_irq port->ops->data_forward port->ops->data_reverse
- EPP:
port->ops->epp_write_data port->ops->epp_read_data port->ops->epp_write_addr port->ops->epp_read_addr
- ECP:
port->ops->ecp_write_data port->ops->ecp_read_data port->ops->ecp_write_addr
- 其他:
port->ops->nibble_read_data port->ops->byte_read_data port->ops->compat_write_data
parport子系統包括 parport (核心埠共享程式碼) 和各種底層驅動程式,它們實際執行埠訪問。每個底層驅動程式處理特定風格的埠(PC、Amiga等)。
裝置驅動程式作者的parport介面可以分解為全域性函式和埠函式。
全域性函式主要用於裝置驅動程式和parport子系統之間的通訊:獲取可用埠列表、宣告埠以供獨佔使用等等。它們還包括用於執行可在任何支援IEEE 1284的架構上工作的標準事情的 generic 函式。
埠函式由底層驅動程式提供,儘管核心parport模組為某些例程提供通用defaults。埠函式可以分為三組:SPP、EPP和ECP。
SPP(標準並行埠)函式修改所謂的 SPP 暫存器:資料、狀態和控制。硬體可能實際上沒有完全相同的暫存器,但PC有,並且此介面是根據常見的PC實現建模的。其他底層驅動程式可能能夠模擬大多數功能。
EPP(增強並行埠)函式用於在IEEE 1284 EPP模式下讀取和寫入,ECP(擴充套件功能埠)函式用於IEEE 1284 ECP模式。(BECP呢?有人關心嗎?)
對EPP和/或ECP傳輸的硬體輔助可能可用也可能不可用,如果可用,則可能使用也可能不使用。如果未使用硬體,則傳輸將由軟體驅動。為了處理僅勉強支援IEEE 1284的外圍裝置,提供了低階驅動程式特定功能,用於更改“fudge factors”。
全域性函式¶
parport_register_driver - 將裝置驅動程式註冊到parport¶
概要¶
#include <linux/parport.h>
struct parport_driver {
const char *name;
void (*attach) (struct parport *);
void (*detach) (struct parport *);
struct parport_driver *next;
};
int parport_register_driver (struct parport_driver *driver);
描述¶
為了在檢測到並行埠時收到通知,應呼叫parport_register_driver。當底層驅動程式載入時,您的驅動程式將立即收到已檢測到的所有埠以及每個新埠的通知。
struct parport_driver 包含驅動程式的文字名稱,指向處理新埠的函式的指標,以及指向處理由於底層驅動程式解除安裝而消失的埠的函式的指標。埠只有在未使用時(即,沒有設備註冊在它們上)才會被分離。
給attach/detach的 struct parport * 引數的可見部分是
struct parport
{
struct parport *next; /* next parport in list */
const char *name; /* port's name */
unsigned int modes; /* bitfield of hardware modes */
struct parport_device_info probe_info;
/* IEEE1284 info */
int number; /* parport index */
struct parport_operations *ops;
...
};
該結構還有其他成員,但不應觸控它們。
modes 成員總結了底層硬體的功能。它由可以按位或在一起的標誌組成
PARPORT_MODE_PCSPP
IBM PC暫存器可用,即作用於資料、控制和狀態暫存器的函式可能直接寫入硬體。
PARPORT_MODE_TRISTATE
資料驅動程式可以關閉。這允許資料線用於反向(外圍裝置到主機)傳輸。
PARPORT_MODE_COMPAT
硬體可以輔助相容模式(印表機)傳輸,即compat_write_block。
PARPORT_MODE_EPP
硬體可以輔助EPP傳輸。
PARPORT_MODE_ECP
硬體可以輔助ECP傳輸。
PARPORT_MODE_DMA
硬體可以使用DMA,因此您可能希望將ISA DMA可定址記憶體(即,使用kmalloc和GFP_DMA標誌分配的記憶體)傳遞給底層驅動程式,以便利用它。
modes 中可能還有其他標誌。
modes 的內容僅供參考。例如,如果硬體能夠進行DMA,並且PARPORT_MODE_DMA在 modes 中,則並不一定意味著DMA將在可能的情況下始終使用。同樣,能夠輔助ECP傳輸的硬體不一定會被使用。
返回值¶
成功時為零,否則為錯誤程式碼。
錯誤¶
無。(它會失敗嗎?為什麼要返回int?)
示例¶
static void lp_attach (struct parport *port)
{
...
private = kmalloc (...);
dev[count++] = parport_register_device (...);
...
}
static void lp_detach (struct parport *port)
{
...
}
static struct parport_driver lp_driver = {
"lp",
lp_attach,
lp_detach,
NULL /* always put NULL here */
};
int lp_init (void)
{
...
if (parport_register_driver (&lp_driver)) {
/* Failed; nothing we can do. */
return -EIO;
}
...
}
參見¶
parport_unregister_driver, parport_register_device, parport_enumerate
parport_unregister_driver - 告訴parport忘記此驅動程式¶
概要¶
#include <linux/parport.h>
struct parport_driver {
const char *name;
void (*attach) (struct parport *);
void (*detach) (struct parport *);
struct parport_driver *next;
};
void parport_unregister_driver (struct parport_driver *driver);
描述¶
這告訴parport不要通知裝置驅動程式新的埠或埠消失。不登出屬於該驅動程式的已註冊裝置:必須為每個裝置使用parport_unregister_device。
示例¶
void cleanup_module (void)
{
...
/* Stop notifications. */
parport_unregister_driver (&lp_driver);
/* Unregister devices. */
for (i = 0; i < NUM_DEVS; i++)
parport_unregister_device (dev[i]);
...
}
參見¶
parport_register_driver, parport_enumerate
parport_enumerate - 檢索並行埠列表(已棄用)¶
概要¶
#include <linux/parport.h>
struct parport *parport_enumerate (void);
描述¶
檢索此機器的有效並行埠列表中的第一個。可以使用返回的 struct parport * 的 struct parport *next 元素找到連續的並行埠。如果 next 為NULL,則列表中沒有更多並行埠。列表中的埠數不會超過PARPORT_MAX。
返回值¶
描述機器的有效並行埠的 struct parport * ,如果沒有,則為NULL。
錯誤¶
此函式可以返回NULL,以指示沒有可用的並行埠。
示例¶
int detect_device (void)
{
struct parport *port;
for (port = parport_enumerate ();
port != NULL;
port = port->next) {
/* Try to detect a device on the port... */
...
}
}
...
}
註釋¶
parport_enumerate 已棄用; 應改為使用 parport_register_driver。
參見¶
parport_register_driver, parport_unregister_driver
parport_register_device - 註冊以使用埠¶
概要¶
#include <linux/parport.h>
typedef int (*preempt_func) (void *handle);
typedef void (*wakeup_func) (void *handle);
typedef int (*irq_func) (int irq, void *handle, struct pt_regs *);
struct pardevice *parport_register_device(struct parport *port,
const char *name,
preempt_func preempt,
wakeup_func wakeup,
irq_func irq,
int flags,
void *handle);
描述¶
使用此函式在並行埠 (port) 上註冊裝置驅動程式。完成此操作後,您將能夠使用 parport_claim 和 parport_release 以使用該埠。
(name) 引數是在 /proc 檔案系統中顯示的裝置的名稱。該字串在裝置的整個生命週期內(直到呼叫 parport_unregister_device)都必須有效。
此函式將在您的驅動程式中註冊三個回撥:preempt、wakeup 和 irq。這些中的每一個都可以為 NULL,以指示您不想要回調。
呼叫 preempt 函式時,是因為另一個驅動程式希望使用並行埠。如果並行埠還不能釋放,preempt 函式應返回非零值 -- 如果返回零,則埠將丟失給另一個驅動程式,並且必須在使用前重新宣告該埠。
一旦另一個驅動程式釋放了該埠並且沒有其他驅動程式宣告它,就會呼叫 wakeup 函式。您可以從 wakeup 函式中宣告並行埠(在這種情況下,保證宣告會成功),或者如果您現在不需要它,則選擇不宣告。
如果在您的驅動程式宣告的並行埠上發生中斷,則將呼叫 irq 函式。(在此處寫一些關於共享中斷的內容。)
handle 是指向驅動程式特定資料的指標,並傳遞給回撥函式。
flags 可以是以下標誌的按位組合
標誌
意義
PARPORT_DEV_EXCL
該裝置根本無法共享並行埠。僅在絕對必要時才使用它。
typedef實際上沒有定義 -- 它們僅顯示是為了使函式原型更易於閱讀。
返回的 struct pardevice 的可見部分是
struct pardevice {
struct parport *port; /* Associated port */
void *private; /* Device driver's 'handle' */
...
};
返回值¶
struct pardevice *:已註冊的並行埠裝置的控制代碼,可用於 parport_claim, parport_release 等。
錯誤¶
返回值為 NULL 表示在該埠上註冊裝置時出現問題。
示例¶
static int preempt (void *handle)
{
if (busy_right_now)
return 1;
must_reclaim_port = 1;
return 0;
}
static void wakeup (void *handle)
{
struct toaster *private = handle;
struct pardevice *dev = private->dev;
if (!dev) return; /* avoid races */
if (want_port)
parport_claim (dev);
}
static int toaster_detect (struct toaster *private, struct parport *port)
{
private->dev = parport_register_device (port, "toaster", preempt,
wakeup, NULL, 0,
private);
if (!private->dev)
/* Couldn't register with parport. */
return -EIO;
must_reclaim_port = 0;
busy_right_now = 1;
parport_claim_or_block (private->dev);
...
/* Don't need the port while the toaster warms up. */
busy_right_now = 0;
...
busy_right_now = 1;
if (must_reclaim_port) {
parport_claim_or_block (private->dev);
must_reclaim_port = 0;
}
...
}
參見¶
parport_unregister_device, parport_claim
parport_unregister_device - 完成使用埠¶
概要
#include <linux/parport.h>
void parport_unregister_device (struct pardevice *dev);
描述¶
此函式與 parport_register_device 相反。使用 parport_unregister_device 後,dev 不再是有效的裝置控制代碼。
您不應登出當前已宣告的裝置,儘管如果您這樣做,它將自動釋放。
示例¶
...
kfree (dev->private); /* before we lose the pointer */
parport_unregister_device (dev);
...
參見¶
parport_unregister_driver
parport_claim, parport_claim_or_block - 為裝置宣告並行埠¶
概要¶
#include <linux/parport.h>
int parport_claim (struct pardevice *dev);
int parport_claim_or_block (struct pardevice *dev);
描述¶
這些函式嘗試獲取在 dev 上註冊的並行埠的控制權。parport_claim 不會阻塞,但 parport_claim_or_block 可能會阻塞。(在此處放置一些關於可中斷或非中斷阻塞的內容。)
您不應嘗試宣告您已經宣告的埠。
返回值¶
返回值為零表示該埠已成功宣告,並且呼叫者現在擁有並行埠。
如果 parport_claim_or_block 在成功返回之前阻塞,則返回值為正數。
錯誤¶
-EAGAIN |
該埠目前不可用,但另一次宣告嘗試可能會成功。 |
參見¶
parport_release
parport_release - 釋放並行埠¶
概要¶
#include <linux/parport.h>
void parport_release (struct pardevice *dev);
描述¶
一旦聲明瞭並行埠裝置,就可以使用 parport_release 釋放它。它不會失敗,但您不應釋放您不擁有的裝置。
示例¶
static size_t write (struct pardevice *dev, const void *buf,
size_t len)
{
...
written = dev->port->ops->write_ecp_data (dev->port, buf,
len);
parport_release (dev);
...
}
參見¶
change_mode, parport_claim, parport_claim_or_block, parport_yield
parport_yield, parport_yield_blocking - 臨時釋放並行埠¶
概要¶
#include <linux/parport.h>
int parport_yield (struct pardevice *dev)
int parport_yield_blocking (struct pardevice *dev);
描述¶
當驅動程式控制並行埠時,它可能允許另一個驅動程式臨時 borrow 它。parport_yield 不會阻塞; parport_yield_blocking 可能會阻塞。
返回值¶
返回值為零表示呼叫者仍擁有該埠,並且呼叫未阻塞。
從 parport_yield_blocking 返回正值表示呼叫者仍然擁有該埠並且呼叫已阻塞。
返回值為 -EAGAIN 表示呼叫者不再擁有該埠,並且必須在使用前重新宣告它。
錯誤¶
-EAGAIN |
已放棄並行埠的所有權。 |
參見¶
parport_release
parport_wait_peripheral - 等待狀態線,最多35毫秒¶
概要¶
#include <linux/parport.h>
int parport_wait_peripheral (struct parport *port,
unsigned char mask,
unsigned char val);
描述¶
等待掩碼中的狀態線與 val 中的值匹配。
返回值¶
-EINTR |
訊號掛起 |
0 |
掩碼中的狀態線在 val 中具有值 |
1 |
等待時超時(已過去35毫秒) |
參見¶
parport_poll_peripheral
parport_poll_peripheral - 等待狀態線,單位為微秒¶
概要¶
#include <linux/parport.h>
int parport_poll_peripheral (struct parport *port,
unsigned char mask,
unsigned char val,
int usec);
描述¶
等待掩碼中的狀態線與 val 中的值匹配。
返回值¶
-EINTR |
訊號掛起 |
0 |
掩碼中的狀態線在 val 中具有值 |
1 |
等待時超時(已經過usec微秒) |
參見¶
parport_wait_peripheral
parport_wait_event - 等待埠上的事件¶
概要¶
#include <linux/parport.h>
int parport_wait_event (struct parport *port, signed long timeout)
描述¶
等待埠上的事件(例如中斷)。超時時間以 jiffies 為單位。
返回值¶
0 |
成功 |
<0 |
錯誤(儘快退出) |
>0 |
超時 |
parport_negotiate - 執行 IEEE 1284 協商¶
概要¶
#include <linux/parport.h>
int parport_negotiate (struct parport *, int mode);
描述¶
執行 IEEE 1284 協商。
返回值¶
0 |
握手成功; IEEE 1284 外設和模式可用 |
-1 |
握手失敗; 外圍裝置不相容(或不存在) |
1 |
握手成功; IEEE 1284 外設存在但模式不可用 |
另請參閱¶
parport_read, parport_write
parport_read - 從裝置讀取資料¶
概要¶
#include <linux/parport.h>
ssize_t parport_read (struct parport *, void *buf, size_t len);
描述¶
以當前 IEEE 1284 傳輸模式從裝置讀取資料。這僅適用於支援反向資料傳輸的模式。
返回值¶
如果為負數,則為錯誤程式碼;否則為傳輸的位元組數。
另請參閱¶
parport_write, parport_negotiate
parport_write - 將資料寫入裝置¶
概要¶
#include <linux/parport.h>
ssize_t parport_write (struct parport *, const void *buf, size_t len);
描述¶
以當前 IEEE 1284 傳輸模式將資料寫入裝置。這僅適用於支援正向資料傳輸的模式。
返回值¶
如果為負數,則為錯誤程式碼;否則為傳輸的位元組數。
另請參閱¶
parport_read, parport_negotiate
parport_open - 註冊用於特定裝置編號的裝置¶
概要¶
#include <linux/parport.h>
struct pardevice *parport_open (int devnum, const char *name,
int (*pf) (void *),
void (*kf) (void *),
void (*irqf) (int, void *,
struct pt_regs *),
int flags, void *handle);
描述¶
這類似於 parport_register_device,但採用裝置編號而不是指向 struct parport 的指標。
返回值¶
參見 parport_register_device。如果 devnum 沒有關聯的裝置,則返回 NULL。
另請參閱¶
parport_register_device
parport_close - 登出用於特定裝置編號的裝置¶
概要¶
#include <linux/parport.h>
void parport_close (struct pardevice *dev);
描述¶
這是 parport_unregister_device 對應 parport_open 的等效項。
另請參閱¶
parport_unregister_device, parport_open
parport_device_id - 獲取 IEEE 1284 裝置 ID¶
概要¶
#include <linux/parport.h>
ssize_t parport_device_id (int devnum, char *buffer, size_t len);
描述¶
獲取與給定裝置關聯的 IEEE 1284 裝置 ID。
返回值¶
如果為負數,則為錯誤程式碼;否則,包含裝置 ID 的緩衝區中的位元組數。 裝置 ID 的格式如下
[length][ID]
前兩個位元組指示整個裝置 ID 的包含長度,並且採用大端位元組序。 ID 是以下形式的成對序列
key:value;
注意¶
許多裝置的 IEEE 1284 裝置 ID 格式錯誤。
另請參閱¶
parport_find_class, parport_find_device
parport_device_coords - 將裝置編號轉換為裝置座標¶
概要¶
#include <linux/parport.h>
int parport_device_coords (int devnum, int *parport, int *mux,
int *daisy);
描述¶
在裝置編號(從零開始)和裝置座標(埠、多路複用器、菊花鏈地址)之間轉換。
返回值¶
成功時為零,在這種情況下,座標為 (*parport, *mux, *daisy)。
另請參閱¶
parport_open, parport_device_id
parport_find_class - 按類別查詢裝置¶
概要¶
#include <linux/parport.h>
typedef enum {
PARPORT_CLASS_LEGACY = 0, /* Non-IEEE1284 device */
PARPORT_CLASS_PRINTER,
PARPORT_CLASS_MODEM,
PARPORT_CLASS_NET,
PARPORT_CLASS_HDC, /* Hard disk controller */
PARPORT_CLASS_PCMCIA,
PARPORT_CLASS_MEDIA, /* Multimedia device */
PARPORT_CLASS_FDC, /* Floppy disk controller */
PARPORT_CLASS_PORTS,
PARPORT_CLASS_SCANNER,
PARPORT_CLASS_DIGCAM,
PARPORT_CLASS_OTHER, /* Anything else */
PARPORT_CLASS_UNSPEC, /* No CLS field in ID */
PARPORT_CLASS_SCSIADAPTER
} parport_device_class;
int parport_find_class (parport_device_class cls, int from);
描述¶
按類別查詢裝置。 搜尋從裝置編號 from+1 開始。
返回值¶
該類別中下一個裝置的裝置編號,如果不存在此類裝置,則為 -1。
注意¶
示例用法
int devnum = -1;
while ((devnum = parport_find_class (PARPORT_CLASS_DIGCAM, devnum)) != -1) {
struct pardevice *dev = parport_open (devnum, ...);
...
}
另請參閱¶
parport_find_device, parport_open, parport_device_id
parport_find_device - 按類別查詢裝置¶
概要¶
#include <linux/parport.h>
int parport_find_device (const char *mfg, const char *mdl, int from);
描述¶
按供應商和型號查詢裝置。 搜尋從裝置編號 from+1 開始。
返回值¶
與規範匹配的下一個裝置的裝置編號,如果不存在此類裝置,則為 -1。
注意¶
示例用法
int devnum = -1;
while ((devnum = parport_find_device ("IOMEGA", "ZIP+", devnum)) != -1) {
struct pardevice *dev = parport_open (devnum, ...);
...
}
另請參閱¶
parport_find_class, parport_open, parport_device_id
parport_set_timeout - 設定不活動超時¶
概要¶
#include <linux/parport.h>
long parport_set_timeout (struct pardevice *dev, long inactivity);
描述¶
設定註冊裝置的不活動超時(以 jiffies 為單位)。 返回先前的超時時間。
返回值¶
先前的超時時間(以 jiffies 為單位)。
注意¶
由於外圍裝置的延遲,parport 的一些 port->ops 函式可能需要時間。 在外圍裝置在 inactivity jiffies 內沒有響應之後,將發生超時並且阻塞函式將返回。
0 jiffies 的超時是一種特殊情況:該函式必須儘可能地在不阻塞或將硬體留在未知狀態的情況下執行操作。 例如,如果從中斷處理程式中執行埠操作,則應使用 0 jiffies 的超時。
一旦為註冊裝置設定了超時,超時將保持在設定的值,直到再次設定。
另請參閱¶
port->ops->xxx_read/write_yyy
埠函式¶
port->ops 結構(struct parport_operations)中的函式由負責該埠的底層驅動程式提供。
port->ops->read_data - 讀取資料暫存器¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
unsigned char (*read_data) (struct parport *port);
...
};
描述¶
如果 port->modes 包含 PARPORT_MODE_TRISTATE 標誌並且控制暫存器中的 PARPORT_CONTROL_DIRECTION 位已設定,則返回資料引腳上的值。 如果 port->modes 包含 PARPORT_MODE_TRISTATE 標誌並且 PARPORT_CONTROL_DIRECTION 位未設定,則返回值 _可能_ 是寫入資料暫存器的最後一個值。 否則,返回值未定義。
另請參閱¶
write_data, read_status, write_control
port->ops->write_data - 寫入資料暫存器¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
void (*write_data) (struct parport *port, unsigned char d);
...
};
描述¶
寫入資料暫存器。 可能有副作用(例如 STROBE 脈衝)。
另請參閱¶
read_data, read_status, write_control
port->ops->read_status - 讀取狀態暫存器¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
unsigned char (*read_status) (struct parport *port);
...
};
描述¶
從狀態暫存器讀取。 這是一個位掩碼
PARPORT_STATUS_ERROR(印表機故障,“nFault”)
PARPORT_STATUS_SELECT(線上,“Select”)
PARPORT_STATUS_PAPEROUT(無紙,“PError”)
PARPORT_STATUS_ACK(握手,“nAck”)
PARPORT_STATUS_BUSY(忙,“Busy”)
可能設定了其他位。
另請參閱¶
read_data, write_data, write_control
port->ops->read_control - 讀取控制暫存器¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
unsigned char (*read_control) (struct parport *port);
...
};
描述¶
返回寫入控制暫存器的最後一個值(來自 write_control 或 frob_control)。 不執行埠訪問。
另請參閱¶
read_data, write_data, read_status, write_control
port->ops->write_control - 寫入控制暫存器¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
void (*write_control) (struct parport *port, unsigned char s);
...
};
描述¶
寫入控制暫存器。 這是一個位掩碼
_______
- PARPORT_CONTROL_STROBE (nStrobe)
_______
- PARPORT_CONTROL_AUTOFD (nAutoFd)
_____
- PARPORT_CONTROL_INIT (nInit)
_________
- PARPORT_CONTROL_SELECT (nSelectIn)
另請參閱¶
read_data, write_data, read_status, frob_control
port->ops->frob_control - 寫入控制暫存器位¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
unsigned char (*frob_control) (struct parport *port,
unsigned char mask,
unsigned char val);
...
};
描述¶
這等效於從控制暫存器讀取、遮蔽 mask 中的位、與 val 中的位進行異或,並將結果寫入控制暫存器。
由於某些埠不允許從控制埠讀取,因此會維護其內容的軟體副本,因此 frob_control 實際上只是一個埠訪問。
另請參閱¶
read_data, write_data, read_status, write_control
port->ops->enable_irq - 啟用中斷生成¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
void (*enable_irq) (struct parport *port);
...
};
描述¶
指示並行埠硬體在適當的時候生成中斷,儘管那些時刻是特定於架構的。 對於 PC 架構,中斷通常在 nAck 的上升沿生成。
另請參閱¶
disable_irq
port->ops->disable_irq - 停用中斷生成¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
void (*disable_irq) (struct parport *port);
...
};
描述¶
指示並行埠硬體不生成中斷。 中斷本身未遮蔽。
另請參閱¶
enable_irq
port->ops->data_forward - 啟用資料驅動程式¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
void (*data_forward) (struct parport *port);
...
};
描述¶
啟用資料線驅動程式,用於 8 位主機到外圍裝置通訊。
另請參閱¶
data_reverse
port->ops->data_reverse - 將緩衝區設定為三態¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
void (*data_reverse) (struct parport *port);
...
};
描述¶
如果 port->modes 設定了 PARPORT_MODE_TRISTATE 位,則將資料匯流排置於高阻抗狀態。
另請參閱¶
data_forward
port->ops->epp_write_data - 寫入 EPP 資料¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*epp_write_data) (struct parport *port, const void *buf,
size_t len, int flags);
...
};
描述¶
以 EPP 模式寫入資料,並返回寫入的位元組數。
flags 引數可以是一個或多個以下內容,按位或運算在一起
PARPORT_EPP_FAST |
使用快速傳輸。 某些晶片提供 16 位和 32 位暫存器。 但是,如果傳輸超時,則返回值可能不可靠。 |
另請參閱¶
epp_read_data, epp_write_addr, epp_read_addr
port->ops->epp_read_data - 讀取 EPP 資料¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*epp_read_data) (struct parport *port, void *buf,
size_t len, int flags);
...
};
描述¶
以 EPP 模式讀取資料,並返回讀取的位元組數。
flags 引數可以是一個或多個以下內容,按位或運算在一起
PARPORT_EPP_FAST |
使用快速傳輸。 某些晶片提供 16 位和 32 位暫存器。 但是,如果傳輸超時,則返回值可能不可靠。 |
另請參閱¶
epp_write_data, epp_write_addr, epp_read_addr
port->ops->epp_write_addr - 寫入 EPP 地址¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*epp_write_addr) (struct parport *port,
const void *buf, size_t len, int flags);
...
};
描述¶
寫入 EPP 地址(每個 8 位),並返回寫入的數量。
flags 引數可以是一個或多個以下內容,按位或運算在一起
PARPORT_EPP_FAST |
使用快速傳輸。 某些晶片提供 16 位和 32 位暫存器。 但是,如果傳輸超時,則返回值可能不可靠。 |
(PARPORT_EPP_FAST 對於此函式是否有意義?)
另請參閱¶
epp_write_data, epp_read_data, epp_read_addr
port->ops->epp_read_addr - 讀取 EPP 地址¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*epp_read_addr) (struct parport *port, void *buf,
size_t len, int flags);
...
};
描述¶
讀取 EPP 地址(每個 8 位),並返回讀取的數量。
flags 引數可以是一個或多個以下內容,按位或運算在一起
PARPORT_EPP_FAST |
使用快速傳輸。 某些晶片提供 16 位和 32 位暫存器。 但是,如果傳輸超時,則返回值可能不可靠。 |
(PARPORT_EPP_FAST 對於此函式是否有意義?)
另請參閱¶
epp_write_data, epp_read_data, epp_write_addr
port->ops->ecp_write_data - 寫入 ECP 資料塊¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*ecp_write_data) (struct parport *port,
const void *buf, size_t len, int flags);
...
};
描述¶
寫入 ECP 資料塊。 flags 引數被忽略。
返回值¶
寫入的位元組數。
另請參閱¶
ecp_read_data, ecp_write_addr
port->ops->ecp_read_data - 讀取 ECP 資料塊¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*ecp_read_data) (struct parport *port,
void *buf, size_t len, int flags);
...
};
描述¶
讀取 ECP 資料塊。 flags 引數被忽略。
返回值¶
讀取的位元組數。 注意:FIFO 中可能存在更多未讀資料。 是否有一種方法可以阻止 FIFO 以防止這種情況發生?
另請參閱¶
ecp_write_block, ecp_write_addr
port->ops->ecp_write_addr - 寫入 ECP 地址塊¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*ecp_write_addr) (struct parport *port,
const void *buf, size_t len, int flags);
...
};
描述¶
寫入 ECP 地址塊。 flags 引數被忽略。
返回值¶
寫入的位元組數。
注意¶
這可能會使用 FIFO,如果是這樣,則在 FIFO 為空之前不會返回。
另請參閱¶
ecp_read_data, ecp_write_data
port->ops->nibble_read_data - 以半位元組模式讀取資料塊¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*nibble_read_data) (struct parport *port,
void *buf, size_t len, int flags);
...
};
描述¶
以半位元組模式讀取資料塊。 flags 引數被忽略。
返回值¶
讀取的完整位元組數。
參見¶
byte_read_data, compat_write_data
port->ops->byte_read_data - 以位元組模式讀取資料塊¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*byte_read_data) (struct parport *port,
void *buf, size_t len, int flags);
...
};
描述¶
以位元組模式讀取資料塊。flags 引數將被忽略。
返回值¶
讀取的位元組數。
參見¶
nibble_read_data, compat_write_data
port->ops->compat_write_data - 以相容模式寫入資料塊¶
概要¶
#include <linux/parport.h>
struct parport_operations {
...
size_t (*compat_write_data) (struct parport *port,
const void *buf, size_t len, int flags);
...
};
描述¶
以相容模式寫入資料塊。flags 引數將被忽略。
返回值¶
寫入的位元組數。
參見¶
nibble_read_data, byte_read_data