Vietnamese (machine translation)

Lưu ý

Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.

Bản gốc:

Linux for S/390 and zSeries

Người dịch:

Google Translate (machine translation)

Phiên bản gốc:

8541d8f725c6

Cảnh báo

Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.

Linux cho S/390 và zSeries

Hỗ trợ thiết bị chung (CDS) Các thói quen hỗ trợ I/O của trình điều khiển thiết bị

tác giả:
  • Ingo Adlung

  • Cornelia Huck

Bản quyền, IBM Corp. 1999-2002

Giới thiệu

Tài liệu này mô tả các quy trình hỗ trợ thiết bị phổ biến dành cho Linux/390. Khác với các kiến trúc phần cứng khác, ESA/390 đã xác định một hệ thống thống nhất Phương pháp truy cập I/O. Điều này mang lại sự nhẹ nhõm cho các trình điều khiển thiết bị khi họ không phải đối phó với các loại xe buýt khác nhau, bỏ phiếu và ngắt xử lý, xử lý ngắt được chia sẻ và không chia sẻ, DMA so với cổng I/O (PIO) và các tính năng phần cứng khác. Tuy nhiên, điều này ngụ ý rằng hoặc mọi trình điều khiển thiết bị đều cần triển khai I/O phần cứng chính chức năng đính kèm hoặc hệ điều hành cung cấp một phương pháp thống nhất để truy cập vào phần cứng, cung cấp tất cả các chức năng mỗi trình điều khiển thiết bị sẽ phải tự cung cấp.

Tài liệu này không có ý định giải thích kiến trúc phần cứng ESA/390 trong mọi chi tiết. Thông tin này có thể được lấy từ Nguyên tắc ESA/390 Hướng dẫn vận hành (Mẫu IBM. Số SA22-7201).

Để xây dựng hỗ trợ thiết bị chung cho giao diện I/O ESA/390, lớp chức năng được giới thiệu cung cấp các phương thức truy cập I/O chung cho phần cứng.

Lớp hỗ trợ thiết bị chung bao gồm các thủ tục hỗ trợ I/O được xác định bên dưới. Một số trong số chúng triển khai các giao diện trình điều khiển thiết bị Linux phổ biến, trong khi một số trong số đó dành riêng cho nền tảng ESA/390.

Lưu ý:

Để viết driver cho S/390, bạn cũng cần nhìn vào giao diện được mô tả trong S/390 driver model interfaces.

Lưu ý khi chuyển trình điều khiển từ 2.4:

Những thay đổi chính là:

  • Các chức năng sử dụng ccw_device thay vì irq (kênh phụ).

  • Tất cả các trình điều khiển phải xác định ccw_driver (xem Giao diện mô hình trình điều khiển S/390) và liên kết chức năng.

  • request_irq()free_irq() không còn được trình điều khiển thực hiện nữa.

  • oper_handler (loại) được thay thế bằng các hàm thăm dò() và set_online() của ccw_driver.

  • Not_oper_handler được (loại) thay thế bằng Remove()set_offline() chức năng của ccw_driver.

  • Lớp thiết bị kênh đã biến mất.

  • Trình xử lý ngắt phải được điều chỉnh để sử dụng ccw_device làm đối số. Hơn nữa, họ không trả về devstat mà là irb.

  • Trước khi bắt đầu io, các tùy chọn phải được đặt qua ccw_device_set_options().

  • Thay vì gọi read_dev_chars()/read_conf_data(), trình điều khiển gặp sự cố chương trình kênh và tự xử lý ngắt.

ccw_device_get_ciw()

nhận lệnh từ dữ liệu giác quan mở rộng.

ccw_device_start(), ccw_device_start_timeout(), ccw_device_start_key(), ccw_device_start_key_timeout()

bắt đầu một yêu cầu I/O.

ccw_device_resume()

tiếp tục thực hiện chương trình kênh.

ccw_device_halt()

chấm dứt yêu cầu I/O hiện tại được xử lý trên thiết bị.

do_IRQ()

thói quen ngắt chung. Hàm này được gọi bởi mục nhập ngắt thường lệ bất cứ khi nào một ngắt I/O được đưa vào hệ thống. do_IRQ() thường trình xác định trạng thái ngắt và gọi thiết bị cụ thể trình xử lý ngắt theo các quy tắc (cờ) được xác định trong yêu cầu I/O bắt đầu bằng do_IO().

Các chương tiếp theo mô tả các hàm khác ngoài do_IRQ() chi tiết hơn. Giao diện do_IRQ() không được mô tả vì nó được gọi từ Linux/390 chỉ xử lý ngắt cấp độ đầu tiên và không bao gồm trình điều khiển thiết bị giao diện có thể gọi được. Thay vào đó, mô tả chức năng của do_IO() cũng mô tả đầu vào cho trình xử lý ngắt cụ thể của thiết bị.

Lưu ý:

Tất cả các giải thích cũng áp dụng cho kiến trúc 64 bit s390x.

Hỗ trợ thiết bị chung (CDS) cho trình điều khiển thiết bị Linux/390

Thông tin chung

Các chương sau mô tả các thủ tục giao diện liên quan đến I/O Hỗ trợ thiết bị phổ biến Linux/390 (CDS) cung cấp để cho phép thiết bị cụ thể triển khai trình điều khiển trên nền tảng phần cứng IBM ESA/390. Những giao diện đó có ý định cung cấp chức năng theo yêu cầu của mọi trình điều khiển thiết bị triển khai để cho phép điều khiển một thiết bị phần cứng cụ thể trên ESA/390 nền tảng. Một số quy trình giao diện dành riêng cho Linux/390 và một số trong số chúng cũng có thể được tìm thấy trên các triển khai nền tảng Linux khác. Các nguyên mẫu hàm khác, khai báo dữ liệu và định nghĩa macro có thể được tìm thấy trong tệp tiêu đề C cụ thể của kiến ​​trúc linux/arch/s390/include/asm/irq.h.

Tổng quan về các khái niệm giao diện CDS

Khác với các nền tảng phần cứng khác, kiến trúc ESA/390 không xác định các đường ngắt được quản lý bởi bộ điều khiển ngắt và hệ thống bus cụ thể điều đó có thể hoặc không thể cho phép các ngắt được chia sẻ, xử lý DMA, v.v. Thay vào đó, Kiến trúc ESA/390 đã triển khai cái gọi là hệ thống con kênh, hệ thống đó cung cấp một cái nhìn thống nhất về các thiết bị được gắn vật lý vào hệ thống. Mặc dù nền tảng phần cứng ESA/390 biết về rất nhiều loại khác nhau các tệp đính kèm ngoại vi như thiết bị đĩa (hay còn gọi là DASD), băng từ, thông tin liên lạc bộ điều khiển, v.v. tất cả chúng đều có thể được truy cập bằng một phương thức truy cập được xác định rõ ràng và họ đang trình bày việc hoàn thành I/O theo một cách thống nhất: sự gián đoạn I/O. Mỗi một thiết bị duy nhất được xác định duy nhất trong hệ thống bằng một kênh con, trong đó kiến trúc ESA/390 cho phép gắn các thiết bị 64k.

Tuy nhiên, Linux lần đầu tiên được xây dựng trên kiến trúc PC Intel, với hai xếp tầng 8259 bộ điều khiển ngắt khả trình (PIC), cho phép thực hiện tối đa 15 dòng ngắt khác nhau. Tất cả các thiết bị gắn liền với một hệ thống như vậy chia sẻ 15 mức ngắt đó. Các thiết bị được gắn vào hệ thống bus ISA phải không chia sẻ các mức ngắt (còn gọi là IRQ), vì bus ISA dựa trên cạnh được kích hoạt ngắt quãng. MCA, EISA, PCI và các hệ thống bus khác dựa trên mức độ được kích hoạt ngắt và do đó cho phép chia sẻ IRQ. Tuy nhiên, nếu nhiều thiết bị trình bày trạng thái phần cứng của họ bằng cùng một IRQ (được chia sẻ), hệ điều hành phải gọi mọi trình điều khiển thiết bị đã đăng ký trên IRQ này để xác định trình điều khiển thiết bị sở hữu thiết bị gây ra ngắt.

Lên tới kernel 2.4, Linux/390 được sử dụng để cung cấp giao diện thông qua IRQ (kênh con). Để sử dụng nội bộ lớp I/O chung, những lớp này vẫn còn đó. Tuy nhiên, trình điều khiển thiết bị chỉ nên sử dụng giao diện gọi điện mới thông qua ccw_device.

Trong quá trình khởi động, hệ thống Linux/390 sẽ kiểm tra các thiết bị ngoại vi. Mỗi trong số các thiết bị đó được xác định duy nhất bởi một kênh con được gọi là ESA/390 hệ thống con kênh. Mặc dù số kênh con là do hệ thống tạo ra, mỗi số kênh con cũng có thuộc tính do người dùng xác định, được gọi là số thiết bị. Cả số kênh con và số thiết bị đều không thể vượt quá 65535. Trong sysfs khởi tạo, thông tin về loại thiết bị điều khiển và loại thiết bị ngụ ý các lệnh I/O cụ thể (các từ lệnh kênh - CCW) để vận hành thiết bị được tập hợp. Trình điều khiển thiết bị có thể truy xuất bộ phần cứng này thông tin trong bước khởi tạo để nhận dạng các thiết bị mà chúng hỗ trợ sử dụng thông tin được lưu trong struct ccw_device được cung cấp cho họ. Phương pháp này ngụ ý rằng Linux/390 không yêu cầu thăm dò miễn phí (không phải được trang bị) các dòng yêu cầu ngắt (IRQ) để điều khiển các thiết bị của nó. Ở đâu nếu có, trình điều khiển thiết bị có thể sử dụng vấn đề READ DEVICE CHARACTERISTICS ccw để truy xuất các đặc điểm của thiết bị trong quy trình trực tuyến của nó.

Để cho phép khởi tạo I/O dễ dàng, lớp CDS cung cấp một Giao diện ccw_device_start() sử dụng chương trình kênh cụ thể của thiết bị (một hoặc nhiều CCW) khi đầu vào thiết lập các khối điều khiển cụ thể theo kiến trúc được yêu cầu và khởi tạo một yêu cầu I/O thay mặt cho trình điều khiển thiết bị. các Quy trình ccw_device_start() cho phép chỉ định xem nó có mong đợi lớp CDS hay không để thông báo cho trình điều khiển thiết bị về mọi gián đoạn mà nó quan sát được hoặc trạng thái cuối cùng chỉ. Xem ccw_device_start() để biết thêm chi tiết. Trình điều khiển thiết bị không bao giờ được phát hành ESA/390 I/O tự ra lệnh nhưng thay vào đó phải sử dụng giao diện Linux/390 CDS.

Để hủy yêu cầu I/O đang chạy trong thời gian dài, lớp CDS cung cấp hàm ccw_device_halt(). Một số thiết bị yêu cầu ban đầu phải cấp HALT Lệnh SUBCHANNEL (HSCH) mà không có yêu cầu I/O đang chờ xử lý. Chức năng này là cũng được bao phủ bởi ccw_device_halt().

get_ciw() - lấy thông tin lệnh từ

Cuộc gọi này cho phép trình điều khiển thiết bị nhận thông tin về các lệnh được hỗ trợ từ dữ liệu SenseID mở rộng.

cấu trúc ciw *

ccw_device_get_ciw(struct ccw_device *cdev, __u32 cmd);

ccw_device_get_ciw() trả về:

NULL

Không có dữ liệu mở rộng, không tìm thấy thiết bị hoặc lệnh không hợp lệ.

!NULL

Lệnh được yêu cầu.

ccw_device_start() - Bắt đầu yêu cầu I/O

Các quy trình ccw_device_start() là bộ xử lý ngoại vi yêu cầu I/O. Tất cả Yêu cầu I/O của trình điều khiển thiết bị phải được đưa ra bằng cách sử dụng quy trình này. Trình điều khiển thiết bị không được tự mình đưa ra các lệnh I/O ESA/390. Thay vào đó là ccw_device_start() thường lệ cung cấp tất cả các giao diện cần thiết để điều khiển các thiết bị tùy ý.

Mô tả này cũng bao gồm thông tin trạng thái được truyền tới thiết bị trình xử lý ngắt của trình điều khiển vì điều này liên quan đến các quy tắc (cờ) được xác định với yêu cầu I/O liên quan khi gọi ccw_device_start().

int ccw_device_start(struct ccw_device *cdev,

cấu trúc ccw1 *cpa, intparm dài không dấu, __u8 lpm, cờ dài không dấu);

int ccw_device_start_timeout(struct ccw_device *cdev,

cấu trúc ccw1 *cpa, intparm dài không dấu, __u8 lpm, cờ dài không dấu, int hết hạn);

int ccw_device_start_key(struct ccw_device *cdev,

cấu trúc ccw1 *cpa, intparm dài không dấu, __u8 lpm, __u8 phím, cờ dài không dấu);

int ccw_device_start_key_timeout(struct ccw_device *cdev,

cấu trúc ccw1 *cpa, intparm dài không dấu, __u8 lpm, __u8 phím, cờ dài không dấu, int hết hạn);

Các giá trị cờ có thể có là:

điều này ngụ ý chương trình kênh có thể trở nên sửa đổi

DOIO_SUPPRESS_INTER không gọi trình xử lý ở trạng thái trung gian

Tham số cpa trỏ đến định dạng đầu tiên 1 CCW của chương trình kênh:

cấu trúc ccw1 {

__u8 cmd_code;/* mã lệnh / __u8 cờ; / cờ, như địa chỉ IDA, v.v. / __u16 tính; / số byte */ __u32 cda; /*địa chỉ dữ liệu */

} __attribute__ ((đóng gói,căn chỉnh(8)));

với các giá trị cờ CCW sau được xác định:

CCW_FLAG_SLI ngăn chặn độ dài không chính xác CCW_FLAG_SKIP bỏ qua CCW_FLAG_PCI PCI Địa chỉ gián tiếp CCW_FLAG_IDA CCW_FLAG_SUSPEND đình chỉ ===============================================

Thông qua ccw_device_set_options(), trình điều khiển thiết bị có thể chỉ định những điều sau tùy chọn cho thiết bị:


Hàm ccw_device_start() trả về:

một trạng thái đang chờ xử lý trên thiết bị.

-ENODEV cdev không hợp lệ, thiết bị không hoạt động hoặc ccw_device bị hỏng

không trực tuyến.


Khi yêu cầu I/O hoàn tất, bộ xử lý ngắt cấp đầu tiên CDS sẽ tích lũy trạng thái trong cấu trúc irb và sau đó gọi trình xử lý ngắt thiết bị. Trường intparm sẽ chứa giá trị mà trình điều khiển thiết bị đã liên kết với một yêu cầu I/O cụ thể. Nếu trạng thái thiết bị đang chờ xử lý được nhận dạng, intparm sẽ được đặt thành 0 (không). Điều này có thể xảy ra trong quá trình khởi tạo I/O hoặc bị trì hoãn bằng một thông báo trạng thái cảnh báo. Trong mọi trường hợp, trạng thái này không liên quan đến yêu cầu I/O hiện tại (cuối cùng). Trong trường hợp thông báo trạng thái bị trì hoãn thì không có gì đặc biệt ngắt sẽ xuất hiện để cho biết việc hoàn thành I/O khi yêu cầu I/O được thực hiện chưa bao giờ bắt đầu, mặc dù ccw_device_start() đã trả về khi hoàn tất thành công.

Irb có thể chứa giá trị lỗi và trình điều khiển thiết bị nên kiểm tra điều này đầu tiên:

-EIO lớp I/O chung đã chấm dứt yêu cầu do trạng thái lỗi

Nếu cờ cảm giác đồng thời trong từ trạng thái mở rộng (esw) trong irb là set, trường erw.scnt trong esw mô tả số lượng thiết bị cụ thể byte cảm nhận có sẵn trong từ điều khiển mở rộng irb->scsw.ecw[]. Không có thiết bị cần phải có cảm biến của chính trình điều khiển thiết bị.

Trình xử lý ngắt thiết bị có thể sử dụng các định nghĩa sau để điều tra nguồn kiểm tra đơn vị chính được mã hóa theo byte 0:

Tùy thuộc vào trạng thái thiết bị, nhiều giá trị trong số đó có thể được đặt cùng nhau. Vui lòng tham khảo tài liệu cụ thể của thiết bị để biết chi tiết.

Trường irb->scsw.cstat cung cấp trạng thái kênh con (tích lũy):

Kiểm tra chương trình SCHN_STAT_PROG_CHECK Kiểm tra bảo vệ SCHN_STAT_PROT_CHECK Kiểm tra dữ liệu kênh SCHN_STAT_CHN_DATA_CHK Kiểm tra điều khiển kênh SCHN_STAT_CHN_CTRL_CHK Kiểm tra điều khiển giao diện SCHN_STAT_INTF_CTRL_CHK Kiểm tra xích SCHN_STAT_CHAIN_CHECK ==========================================================

Trường irb->scsw.dstat cung cấp trạng thái thiết bị (tích lũy):

Đầu bộ điều khiển DEV_STAT_CU_END DEV_STAT_BUSY bận Đầu kênh DEV_STAT_CHN_END Đầu thiết bị DEV_STAT_DEV_END Kiểm tra đơn vị DEV_STAT_UNIT_CHECK Ngoại lệ đơn vị DEV_STAT_UNIT_EXCEP ========================================

Vui lòng xem sách hướng dẫn Nguyên tắc vận hành ESA/390 để biết chi tiết về ý nghĩa cờ riêng lẻ.

Ghi chú sử dụng:

ccw_device_start() phải được gọi là bị vô hiệu hóa và khóa thiết bị ccw được giữ.

Trình điều khiển thiết bị được phép thực hiện cuộc gọi ccw_device_start() tiếp theo từ trong trình xử lý ngắt của nó rồi. Không cần thiết phải lên lịch nửa dưới, trừ khi quy trình khôi phục lỗi chạy dài không xác định hoặc những nhu cầu tương tự cần được lên lịch. Trong quá trình xử lý I/O, Linux/390 chung Hỗ trợ trình điều khiển thiết bị I/O đã có được khóa IRQ, tức là trình xử lý không được cố lấy lại nó khi gọi ccw_device_start() nếu không chúng ta sẽ kết thúc bằng tình thế bế tắc!

Nếu trình điều khiển thiết bị dựa vào yêu cầu I/O để hoàn thành trước khi bắt đầu tiếp theo, nó có thể giảm chi phí xử lý I/O bằng cách xâu chuỗi lệnh I/O NoOp CCW_CMD_NOOP đến cuối chuỗi CCW đã gửi. Điều này sẽ buộc Channel-End và trạng thái Kết thúc thiết bị sẽ được hiển thị cùng nhau, với một lần ngắt. Tuy nhiên, điều này nên được sử dụng cẩn thận vì nó ngụ ý rằng kênh sẽ vẫn được duy trì. bận, không thể xử lý yêu cầu I/O cho các thiết bị khác trên cùng một thiết bị kênh. Vì vậy, ví dụ: lệnh đọc không bao giờ nên sử dụng kỹ thuật này, vì dù sao thì kết quả cũng sẽ được trình bày bằng một ngắt duy nhất.

Để giảm thiểu chi phí I/O, trình điều khiển thiết bị nên sử dụng DOIO_REPORT_ALL chỉ khi thiết bị có thể báo cáo ngắt trung gian thông tin trước khi kết thúc thiết bị mà trình điều khiển thiết bị cần khẩn trương dựa vào. Trong này trường hợp tất cả các gián đoạn I/O được trình bày cho trình điều khiển thiết bị cho đến khi hoàn thành trạng thái được công nhận.

Nếu một thiết bị có thể phục hồi từ các lỗi I/O xuất hiện không đồng bộ, nó có thể thực hiện I/O chồng chéo bằng cờ DOIO_EARLY_NOTIFICATION. Trong khi một số các thiết bị luôn báo cáo đầu kênh và đầu thiết bị cùng nhau, bằng một bị ngắt, một số khác thể hiện trạng thái chính (cuối kênh) khi kênh bị ngắt. sẵn sàng cho yêu cầu I/O tiếp theo và trạng thái thứ cấp (cuối thiết bị) khi dữ liệu việc truyền tải đã được hoàn thành tại thiết bị.

Cờ trên cho phép khai thác tính năng này, ví dụ: cho các thiết bị liên lạc có thể xử lý dữ liệu bị mất trên mạng để cho phép xử lý I/O nâng cao.

Trừ khi hệ thống con kênh bất kỳ lúc nào có trạng thái gián đoạn thứ cấp, khai thác tính năng này sẽ chỉ gây ra các ngắt trạng thái chính. được trình bày cho trình điều khiển thiết bị trong khi I/O chồng chéo được thực hiện. Khi một trạng thái thứ cấp không có lỗi (trạng thái cảnh báo) được hiển thị, điều này cho biết hoàn thành thành công cho tất cả các yêu cầu ccw_device_start() chồng chéo có được ban hành kể từ trạng thái thứ cấp (cuối cùng) cuối cùng.

Các chương trình kênh có ý định đặt cờ tạm dừng trên từ lệnh kênh (CCW) phải bắt đầu thao tác I/O với tùy chọn DOIO_ALLOW_SUSPEND hoặc cờ tạm dừng sẽ gây ra việc kiểm tra chương trình kênh. Vào thời điểm chương trình kênh bị treo, một ngắt trung gian sẽ được tạo ra bởi kênh hệ thống con.

ccw_device_resume() - Tiếp tục thực hiện chương trình kênh

Nếu trình điều khiển thiết bị chọn tạm dừng việc thực hiện chương trình kênh hiện tại bằng cách thiết lập cờ tạm dừng CCW trên một CCW cụ thể, việc thực thi chương trình kênh bị đình chỉ. Để tiếp tục thực hiện chương trình kênh, lớp CIO cung cấp quy trình ccw_device_resume().

int ccw_device_resume(struct ccw_device *cdev);

cdev

ccw_device hoạt động tiếp tục được yêu cầu cho

Hàm ccw_device_resume() trả về:

-ENODEV cdev kênh con không hợp lệ hoặc không hoạt động -EINVAL chức năng tiếp tục không áp dụng

-ENOTCONN không có yêu cầu I/O nào đang chờ hoàn thành

Ghi chú sử dụng:

Vui lòng xem ghi chú sử dụng ccw_device_start() để biết thêm chi tiết về chương trình kênh bị đình chỉ.

ccw_device_halt() - Dừng xử lý yêu cầu I/O

Đôi khi trình điều khiển thiết bị có thể cần khả năng dừng quá trình xử lý một chương trình kênh chạy dài hoặc thiết bị có thể yêu cầu phát hành lần đầu lệnh I/O dừng kênh con (HSCH). Vì những mục đích đó, ccw_device_halt() lệnh được cung cấp.

ccw_device_halt() phải được gọi là bị vô hiệu hóa và khóa thiết bị ccw được giữ.

int ccw_device_halt(struct ccw_device *cdev,

intparm dài không dấu);

Hàm ccw_device_halt() trả về:

Ghi chú sử dụng:

Trình điều khiển thiết bị có thể viết chương trình kênh không bao giờ kết thúc bằng cách viết kênh chương trình mà ở phần cuối của nó sẽ lặp lại phần đầu của nó bằng cách chuyển vào lệnh kênh (TIC) (CCW_CMD_TIC). Thông thường việc này được thực hiện bởi mạng trình điều khiển thiết bị bằng cách đặt cờ PCI CCW (CCW_FLAG_PCI). Một khi CCW này được đã thực thi một ngắt được điều khiển bằng chương trình (PCI) được tạo ra. Trình điều khiển thiết bị sau đó có thể thực hiện một hành động thích hợp. Trước khi gián đoạn một khoản nợ đọng đọc cho thiết bị mạng (có hoặc không có cờ PCI) a ccw_device_halt() được yêu cầu để kết thúc hoạt động đang chờ xử lý.

ccw_device_clear() - Chấm dứt xử lý yêu cầu I/O

Để chấm dứt tất cả quá trình xử lý I/O tại kênh con, kênh con rõ ràng Lệnh (CSCH) được sử dụng. Nó có thể được phát hành thông qua ccw_device_clear().

ccw_device_clear() phải được gọi là bị vô hiệu hóa và khóa thiết bị ccw được giữ.

int ccw_device_clear(struct ccw_device *cdev, intparm dài chưa dấu);

Hàm ccw_device_clear() trả về:

0

yêu cầu được khởi tạo thành công

-ENODEV

cdev không hợp lệ

-EINVAL

Thiết bị không hoạt động hoặc thiết bị ccw không trực tuyến.

Các thói quen hỗ trợ khác

Chương này mô tả các thủ tục khác nhau được sử dụng trong thiết bị Linux/390 môi trường lập trình điều khiển.

get_ccwdev_lock()

Lấy địa chỉ của khóa cụ thể của thiết bị. Điều này sau đó được sử dụng trong lệnh gọi spin_lock() / spin_unlock().

__u8 ccw_device_get_path_mask(struct ccw_device *cdev);

Lấy mặt nạ của đường dẫn hiện có cho cdev.