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:
- 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/.
Đặt lại bộ điều khiển API¶
Giới thiệu¶
Bộ điều khiển đặt lại là bộ phận trung tâm điều khiển tín hiệu đặt lại thành nhiều thiết bị ngoại vi. Bộ điều khiển đặt lại API được chia thành hai phần: ZZ0000ZZ (ZZ0001ZZ), cho phép trình điều khiển ngoại vi yêu cầu điều khiển qua các tín hiệu đầu vào đặt lại của chúng và ZZ0002ZZ (ZZ0003ZZ), được trình điều khiển sử dụng để đặt lại thiết bị điều khiển đăng ký các điều khiển đặt lại của chúng để cung cấp chúng cho người tiêu dùng.
Trong khi một số đơn vị phần cứng của bộ điều khiển đặt lại cũng thực hiện khởi động lại hệ thống chức năng, trình xử lý khởi động lại nằm ngoài phạm vi của bộ điều khiển đặt lại API.
Thuật ngữ¶
Bộ điều khiển đặt lại API sử dụng các thuật ngữ này với ý nghĩa cụ thể:
Đặt lại dòng
- Đường đặt lại vật lý mang tín hiệu đặt lại từ bộ điều khiển đặt lại
đơn vị phần cứng đến một mô-đun ngoại vi.
Đặt lại quyền kiểm soát
- Phương pháp điều khiển xác định trạng thái của một hoặc nhiều dòng đặt lại.
Thông thường nhất đây là một bit trong không gian thanh ghi bộ điều khiển thiết lập lại hoặc cho phép kiểm soát trực tiếp trạng thái vật lý của dòng đặt lại hoặc tự xóa và có thể được sử dụng để kích hoạt xung được xác định trước trên dòng thiết lập lại. Trong các điều khiển đặt lại phức tạp hơn, một hành động kích hoạt có thể khởi chạy một chuỗi xung được tính thời gian cẩn thận trên nhiều đường đặt lại.
Đặt lại bộ điều khiển
- Một mô-đun phần cứng cung cấp một số điều khiển thiết lập lại để điều khiển một
số dòng thiết lập lại.
Đặt lại người tiêu dùng
- Mô-đun ngoại vi hoặc IC bên ngoài được đặt lại bằng tín hiệu trên
dòng thiết lập lại.
Giao diện trình điều khiển tiêu dùng¶
Giao diện này cung cấp API tương tự như khung đồng hồ kernel. Trình điều khiển tiêu dùng sử dụng các thao tác nhận và đặt để lấy và phát hành thiết lập lại điều khiển. Các chức năng được cung cấp để xác nhận và xác nhận lại các dòng thiết lập lại được kiểm soát, kích hoạt các xung đặt lại hoặc để truy vấn trạng thái dòng đặt lại.
Khi yêu cầu đặt lại các điều khiển, người tiêu dùng có thể sử dụng tên tượng trưng cho đầu vào đặt lại, được ánh xạ tới điều khiển đặt lại thực tế trên thiết lập lại hiện có thiết bị điều khiển bằng lõi.
Phiên bản sơ khai của API này được cung cấp khi khung bộ điều khiển thiết lập lại được không được sử dụng để giảm thiểu nhu cầu sử dụng ifdefs.
Đặt lại được chia sẻ và độc quyền¶
Bộ điều khiển đặt lại API cung cấp tính năng hủy xác nhận tham chiếu và
khẳng định hoặc kiểm soát trực tiếp, độc quyền.
Sự khác biệt giữa các điều khiển đặt lại được chia sẻ và độc quyền được thực hiện tại thời điểm
điều khiển đặt lại được yêu cầu, thông qua devm_reset_control_get_shared() hoặc
thông qua devm_reset_control_get_exclusive().
Lựa chọn này xác định hành vi của các cuộc gọi API được thực hiện bằng thiết lập lại
kiểm soát.
Việc đặt lại được chia sẻ hoạt động tương tự như đồng hồ trong khung đồng hồ hạt nhân. Họ cung cấp việc xác nhận lại được tính tham chiếu, trong đó chỉ có xác nhận lại đầu tiên, làm tăng số tham chiếu xác nhận lại lên một và xác nhận cuối cùng làm giảm số tham chiếu xác nhận lại về 0, có một vật lý tác dụng lên dòng reset.
Mặt khác, việc đặt lại độc quyền đảm bảo khả năng kiểm soát trực tiếp. Nghĩa là, một xác nhận làm cho dòng đặt lại được xác nhận ngay lập tức và một xác nhận lại khiến dòng đặt lại được xác nhận lại ngay lập tức.
Xác nhận và xác nhận lại¶
Trình điều khiển tiêu dùng sử dụng reset_control_assert() và reset_control_deassert()
chức năng xác nhận và xác nhận lại các dòng thiết lập lại.
Đối với các điều khiển đặt lại được chia sẻ, lệnh gọi đến hai chức năng phải được cân bằng.
Lưu ý rằng vì nhiều người tiêu dùng có thể đang sử dụng điều khiển đặt lại được chia sẻ nên có
không đảm bảo rằng việc gọi reset_control_assert() trên điều khiển đặt lại được chia sẻ
thực sự sẽ khiến dòng đặt lại được xác nhận.
Trình điều khiển của người tiêu dùng sử dụng các điều khiển đặt lại được chia sẻ sẽ cho rằng dòng đặt lại
có thể được giữ lại xác nhận mọi lúc.
API chỉ đảm bảo rằng dòng đặt lại không thể được xác nhận miễn là có bất kỳ
người tiêu dùng đã yêu cầu nó được xác nhận lại.
Kích hoạt¶
Trình điều khiển của người tiêu dùng sử dụng reset_control_reset() để kích hoạt xung đặt lại trên
điều khiển thiết lập lại tự xác nhận.
Nói chung, những thiết lập lại này không thể được chia sẻ giữa nhiều người tiêu dùng, vì
yêu cầu xung từ bất kỳ trình điều khiển tiêu dùng nào sẽ thiết lập lại tất cả các kết nối
thiết bị ngoại vi.
Bộ điều khiển đặt lại API cho phép yêu cầu các điều khiển đặt lại tự xác nhận như
được chia sẻ, nhưng đối với những yêu cầu đó chỉ yêu cầu kích hoạt đầu tiên mới tạo ra xung thực tế
được phát hành trên dòng thiết lập lại.
Tất cả các lệnh gọi tiếp theo đến chức năng này sẽ không có hiệu lực cho đến khi tất cả người tiêu dùng có
được gọi là reset_control_rearm().
Đối với các điều khiển đặt lại được chia sẻ, lệnh gọi đến hai chức năng phải được cân bằng.
Điều này cho phép các thiết bị chỉ yêu cầu thiết lập lại lần đầu tại bất kỳ thời điểm nào trước khi
trình điều khiển được thăm dò hoặc tiếp tục để chia sẻ dòng thiết lập lại xung.
Truy vấn¶
Chỉ một số bộ điều khiển đặt lại hỗ trợ truy vấn trạng thái hiện tại của việc đặt lại
dòng, thông qua reset_control_status().
Nếu được hỗ trợ, hàm này sẽ trả về giá trị dương khác 0 nếu giá trị đã cho
dòng thiết lập lại được xác nhận.
Hàm reset_control_status() không chấp nhận
ZZ0000ZZ xử lý làm tham số đầu vào của nó.
Đặt lại tùy chọn¶
Thông thường các thiết bị ngoại vi yêu cầu đường đặt lại trên một số nền tảng nhưng không yêu cầu trên các nền tảng khác.
Đối với điều này, các điều khiển đặt lại có thể được yêu cầu dưới dạng tùy chọn bằng cách sử dụng
devm_reset_control_get_Optional_exclusive() hoặc
devm_reset_control_get_Optional_shared().
Các hàm này trả về một con trỏ NULL thay vì lỗi khi được yêu cầu
điều khiển đặt lại không được chỉ định trong cây thiết bị.
Việc truyền con trỏ NULL tới các hàm reset_control sẽ khiến chúng trả về
lặng lẽ không có lỗi.
Đặt lại mảng điều khiển¶
Một số trình điều khiển cần xác nhận một loạt dòng đặt lại không theo thứ tự cụ thể.
devm_reset_control_array_get() trả về một điều khiển điều khiển đặt lại mờ đục có thể
được sử dụng để xác nhận, xác nhận lại hoặc kích hoạt tất cả các điều khiển đặt lại được chỉ định cùng một lúc.
Điều khiển đặt lại API không đảm bảo thứ tự mà cá nhân
các điều khiển trong đó được xử lý.
Đặt lại giao diện trình điều khiển bộ điều khiển¶
Trình điều khiển cho các mô-đun bộ điều khiển thiết lập lại cung cấp chức năng cần thiết để xác nhận hoặc xác nhận lại các tín hiệu đặt lại, để kích hoạt xung đặt lại trên đường đặt lại hoặc để truy vấn trạng thái hiện tại của nó. Tất cả các chức năng là tùy chọn.
Khởi tạo¶
Trình điều khiển điền vào cấu trúc ZZ0000ZZ và đăng ký nó với
reset_controller_register() trong chức năng thăm dò của họ.
Chức năng thực tế được triển khai trong các hàm gọi lại thông qua cấu trúc
ZZ0001ZZ.
Tham khảo API¶
Bộ điều khiển đặt lại API được ghi lại ở đây thành hai phần: ZZ0000ZZ và ZZ0001ZZ.
Đặt lại API tiêu dùng¶
Người tiêu dùng đặt lại có thể điều khiển dòng đặt lại bằng cách sử dụng tay cầm điều khiển đặt lại mờ đục,
có thể lấy được từ devm_reset_control_get_exclusive() hoặc
devm_reset_control_get_shared().
Với điều khiển đặt lại, người tiêu dùng có thể gọi reset_control_assert() và
reset_control_deassert(), kích hoạt xung đặt lại bằng cách sử dụng reset_control_reset() hoặc
truy vấn trạng thái dòng đặt lại bằng cách sử dụng reset_control_status().
Đặt lại trình điều khiển bộ điều khiển API¶
Trình điều khiển bộ điều khiển đặt lại có nhiệm vụ thực hiện các chức năng cần thiết trong
một cấu trúc hằng số tĩnh ZZ0000ZZ, phân bổ và điền vào
một cấu trúc ZZ0001ZZ và đăng ký nó bằng cách sử dụng
devm_reset_controller_register().