//! PS/2 Keyboard Driver //! //! Spawned by the ps2-bus driver once the controller is initialized and port 1 //! has passed its interface test and device reset. The bus driver hands us our //! device HID as argv[1]; we use it to locate our own device descriptor. const std = @import("std"); const runtime = @import("runtime"); const ps2 = @import("ps2-library.zig"); const device = runtime.device; fn writeLine(comptime fmt: []const u8, arguments: anytype) void { var line: [128]u8 = undefined; _ = runtime.system.write(std.fmt.bufPrint(&line, fmt, arguments) catch return); } pub fn main() void { const hid = runtime.argument(1); if (hid.len == 0) { _ = runtime.system.write("system/drivers/ps2-bus/keyboard: no HID argument\n"); return; } writeLine("system/drivers/ps2-bus/keyboard: starting for hid {s}\n", .{hid}); const buffer = runtime.allocator().alloc(device.DeviceDescriptor, 64) catch { _ = runtime.system.write("system/drivers/ps2-bus/keyboard: out of memory\n"); return; }; if (device.findDeviceDescriptorByHid(buffer, hid) == null) { writeLine("system/drivers/ps2-bus/keyboard: no device for hid {s}\n", .{hid}); return; } // The 8042 ports (0x60/0x64) and this keyboard's IRQ1 both live on the same // PNP0303 node, which the ps2-bus driver exclusively owns — so the keyboard is // served through the bus and does not claim the controller itself. _ = runtime.system.write("system/drivers/ps2-bus/keyboard: served by ps2-bus (controller owned by bus)\n"); _ = runtime.system.write("system/drivers/ps2-bus/keyboard: ok\n"); while (true) runtime.system.sleep(1000); } pub const panic = runtime.panic; comptime { _ = &runtime.start._start; }