Skip to content

Commit 9be1a3f

Browse files
committed
std.os.uefi: use std.os.uefi.cc instead of .C as calling convention
I tested this and this definitely compiles and these changes were done programmatically but if there's still anything wrong it shouldn't be hard to fix. With this change it's going to be very easy to make further adjustments to the calling conventions of all these external UEFI functions. Closes ziglang#16309
1 parent 49ac816 commit 9be1a3f

25 files changed

+183
-151
lines changed

lib/std/os/uefi.zig

+6
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ pub var system_table: *tables.SystemTable = undefined;
2323
/// A handle to an event structure.
2424
pub const Event = *opaque {};
2525

26+
/// The calling convention used for all external functions part of the UEFI API.
27+
pub const cc = switch (@import("builtin").target.cpu.arch) {
28+
.x86_64 => .Win64,
29+
else => .C,
30+
};
31+
2632
pub const MacAddress = extern struct {
2733
address: [32]u8,
2834
};

lib/std/os/uefi/protocols/absolute_pointer_protocol.zig

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ const uefi = std.os.uefi;
33
const Event = uefi.Event;
44
const Guid = uefi.Guid;
55
const Status = uefi.Status;
6+
const cc = uefi.cc;
67

78
/// Protocol for touchscreens
89
pub const AbsolutePointerProtocol = extern struct {
9-
_reset: *const fn (*const AbsolutePointerProtocol, bool) callconv(.C) Status,
10-
_get_state: *const fn (*const AbsolutePointerProtocol, *AbsolutePointerState) callconv(.C) Status,
10+
_reset: *const fn (*const AbsolutePointerProtocol, bool) callconv(cc) Status,
11+
_get_state: *const fn (*const AbsolutePointerProtocol, *AbsolutePointerState) callconv(cc) Status,
1112
wait_for_input: Event,
1213
mode: *AbsolutePointerMode,
1314

lib/std/os/uefi/protocols/block_io_protocol.zig

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const std = @import("std");
22
const uefi = std.os.uefi;
33
const Status = uefi.Status;
4+
const cc = uefi.cc;
45

56
pub const EfiBlockMedia = extern struct {
67
/// The current media ID. If the media changes, this value is changed.
@@ -44,10 +45,10 @@ pub const BlockIoProtocol = extern struct {
4445
revision: u64,
4546
media: *EfiBlockMedia,
4647

47-
_reset: *const fn (*BlockIoProtocol, extended_verification: bool) callconv(.C) Status,
48-
_read_blocks: *const fn (*BlockIoProtocol, media_id: u32, lba: u64, buffer_size: usize, buf: [*]u8) callconv(.C) Status,
49-
_write_blocks: *const fn (*BlockIoProtocol, media_id: u32, lba: u64, buffer_size: usize, buf: [*]u8) callconv(.C) Status,
50-
_flush_blocks: *const fn (*BlockIoProtocol) callconv(.C) Status,
48+
_reset: *const fn (*BlockIoProtocol, extended_verification: bool) callconv(cc) Status,
49+
_read_blocks: *const fn (*BlockIoProtocol, media_id: u32, lba: u64, buffer_size: usize, buf: [*]u8) callconv(cc) Status,
50+
_write_blocks: *const fn (*BlockIoProtocol, media_id: u32, lba: u64, buffer_size: usize, buf: [*]u8) callconv(cc) Status,
51+
_flush_blocks: *const fn (*BlockIoProtocol) callconv(cc) Status,
5152

5253
/// Resets the block device hardware.
5354
pub fn reset(self: *Self, extended_verification: bool) Status {

lib/std/os/uefi/protocols/edid_override_protocol.zig

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ const uefi = std.os.uefi;
33
const Guid = uefi.Guid;
44
const Handle = uefi.Handle;
55
const Status = uefi.Status;
6+
const cc = uefi.cc;
67

78
/// Override EDID information
89
pub const EdidOverrideProtocol = extern struct {
9-
_get_edid: *const fn (*const EdidOverrideProtocol, Handle, *EdidOverrideProtocolAttributes, *usize, *?[*]u8) callconv(.C) Status,
10+
_get_edid: *const fn (*const EdidOverrideProtocol, Handle, *EdidOverrideProtocolAttributes, *usize, *?[*]u8) callconv(cc) Status,
1011

1112
/// Returns policy information and potentially a replacement EDID for the specified video output device.
1213
pub fn getEdid(

lib/std/os/uefi/protocols/file_protocol.zig

+11-10
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@ const io = std.io;
44
const Guid = uefi.Guid;
55
const Time = uefi.Time;
66
const Status = uefi.Status;
7+
const cc = uefi.cc;
78

89
pub const FileProtocol = extern struct {
910
revision: u64,
10-
_open: *const fn (*const FileProtocol, **const FileProtocol, [*:0]const u16, u64, u64) callconv(.C) Status,
11-
_close: *const fn (*const FileProtocol) callconv(.C) Status,
12-
_delete: *const fn (*const FileProtocol) callconv(.C) Status,
13-
_read: *const fn (*const FileProtocol, *usize, [*]u8) callconv(.C) Status,
14-
_write: *const fn (*const FileProtocol, *usize, [*]const u8) callconv(.C) Status,
15-
_get_position: *const fn (*const FileProtocol, *u64) callconv(.C) Status,
16-
_set_position: *const fn (*const FileProtocol, u64) callconv(.C) Status,
17-
_get_info: *const fn (*const FileProtocol, *align(8) const Guid, *const usize, [*]u8) callconv(.C) Status,
18-
_set_info: *const fn (*const FileProtocol, *align(8) const Guid, usize, [*]const u8) callconv(.C) Status,
19-
_flush: *const fn (*const FileProtocol) callconv(.C) Status,
11+
_open: *const fn (*const FileProtocol, **const FileProtocol, [*:0]const u16, u64, u64) callconv(cc) Status,
12+
_close: *const fn (*const FileProtocol) callconv(cc) Status,
13+
_delete: *const fn (*const FileProtocol) callconv(cc) Status,
14+
_read: *const fn (*const FileProtocol, *usize, [*]u8) callconv(cc) Status,
15+
_write: *const fn (*const FileProtocol, *usize, [*]const u8) callconv(cc) Status,
16+
_get_position: *const fn (*const FileProtocol, *u64) callconv(cc) Status,
17+
_set_position: *const fn (*const FileProtocol, u64) callconv(cc) Status,
18+
_get_info: *const fn (*const FileProtocol, *align(8) const Guid, *const usize, [*]u8) callconv(cc) Status,
19+
_set_info: *const fn (*const FileProtocol, *align(8) const Guid, usize, [*]const u8) callconv(cc) Status,
20+
_flush: *const fn (*const FileProtocol) callconv(cc) Status,
2021

2122
pub const SeekError = error{SeekError};
2223
pub const GetSeekPosError = error{GetSeekPosError};

lib/std/os/uefi/protocols/graphics_output_protocol.zig

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ const std = @import("std");
22
const uefi = std.os.uefi;
33
const Guid = uefi.Guid;
44
const Status = uefi.Status;
5+
const cc = uefi.cc;
56

67
/// Graphics output
78
pub const GraphicsOutputProtocol = extern struct {
8-
_query_mode: *const fn (*const GraphicsOutputProtocol, u32, *usize, **GraphicsOutputModeInformation) callconv(.C) Status,
9-
_set_mode: *const fn (*const GraphicsOutputProtocol, u32) callconv(.C) Status,
10-
_blt: *const fn (*const GraphicsOutputProtocol, ?[*]GraphicsOutputBltPixel, GraphicsOutputBltOperation, usize, usize, usize, usize, usize, usize, usize) callconv(.C) Status,
9+
_query_mode: *const fn (*const GraphicsOutputProtocol, u32, *usize, **GraphicsOutputModeInformation) callconv(cc) Status,
10+
_set_mode: *const fn (*const GraphicsOutputProtocol, u32) callconv(cc) Status,
11+
_blt: *const fn (*const GraphicsOutputProtocol, ?[*]GraphicsOutputBltPixel, GraphicsOutputBltOperation, usize, usize, usize, usize, usize, usize, usize) callconv(cc) Status,
1112
mode: *GraphicsOutputProtocolMode,
1213

1314
/// Returns information for an available graphics mode that the graphics device and the set of active video output devices supports.

lib/std/os/uefi/protocols/hii_database_protocol.zig

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ const uefi = std.os.uefi;
33
const Guid = uefi.Guid;
44
const Status = uefi.Status;
55
const hii = uefi.protocols.hii;
6+
const cc = uefi.cc;
67

78
/// Database manager for HII-related data structures.
89
pub const HIIDatabaseProtocol = extern struct {
910
_new_package_list: Status, // TODO
10-
_remove_package_list: *const fn (*const HIIDatabaseProtocol, hii.HIIHandle) callconv(.C) Status,
11-
_update_package_list: *const fn (*const HIIDatabaseProtocol, hii.HIIHandle, *const hii.HIIPackageList) callconv(.C) Status,
12-
_list_package_lists: *const fn (*const HIIDatabaseProtocol, u8, ?*const Guid, *usize, [*]hii.HIIHandle) callconv(.C) Status,
13-
_export_package_lists: *const fn (*const HIIDatabaseProtocol, ?hii.HIIHandle, *usize, *hii.HIIPackageList) callconv(.C) Status,
11+
_remove_package_list: *const fn (*const HIIDatabaseProtocol, hii.HIIHandle) callconv(cc) Status,
12+
_update_package_list: *const fn (*const HIIDatabaseProtocol, hii.HIIHandle, *const hii.HIIPackageList) callconv(cc) Status,
13+
_list_package_lists: *const fn (*const HIIDatabaseProtocol, u8, ?*const Guid, *usize, [*]hii.HIIHandle) callconv(cc) Status,
14+
_export_package_lists: *const fn (*const HIIDatabaseProtocol, ?hii.HIIHandle, *usize, *hii.HIIPackageList) callconv(cc) Status,
1415
_register_package_notify: Status, // TODO
1516
_unregister_package_notify: Status, // TODO
1617
_find_keyboard_layouts: Status, // TODO

lib/std/os/uefi/protocols/hii_popup_protocol.zig

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ const uefi = std.os.uefi;
33
const Guid = uefi.Guid;
44
const Status = uefi.Status;
55
const hii = uefi.protocols.hii;
6+
const cc = uefi.cc;
67

78
/// Display a popup window
89
pub const HIIPopupProtocol = extern struct {
910
revision: u64,
10-
_create_popup: *const fn (*const HIIPopupProtocol, HIIPopupStyle, HIIPopupType, hii.HIIHandle, u16, ?*HIIPopupSelection) callconv(.C) Status,
11+
_create_popup: *const fn (*const HIIPopupProtocol, HIIPopupStyle, HIIPopupType, hii.HIIHandle, u16, ?*HIIPopupSelection) callconv(cc) Status,
1112

1213
/// Displays a popup window.
1314
pub fn createPopup(self: *const HIIPopupProtocol, style: HIIPopupStyle, popup_type: HIIPopupType, handle: hii.HIIHandle, msg: u16, user_selection: ?*HIIPopupSelection) Status {

lib/std/os/uefi/protocols/ip6_config_protocol.zig

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ const uefi = std.os.uefi;
33
const Guid = uefi.Guid;
44
const Event = uefi.Event;
55
const Status = uefi.Status;
6+
const cc = uefi.cc;
67

78
pub const Ip6ConfigProtocol = extern struct {
8-
_set_data: *const fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, usize, *const anyopaque) callconv(.C) Status,
9-
_get_data: *const fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, *usize, ?*const anyopaque) callconv(.C) Status,
10-
_register_data_notify: *const fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, Event) callconv(.C) Status,
11-
_unregister_data_notify: *const fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, Event) callconv(.C) Status,
9+
_set_data: *const fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, usize, *const anyopaque) callconv(cc) Status,
10+
_get_data: *const fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, *usize, ?*const anyopaque) callconv(cc) Status,
11+
_register_data_notify: *const fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, Event) callconv(cc) Status,
12+
_unregister_data_notify: *const fn (*const Ip6ConfigProtocol, Ip6ConfigDataType, Event) callconv(cc) Status,
1213

1314
pub fn setData(self: *const Ip6ConfigProtocol, data_type: Ip6ConfigDataType, data_size: usize, data: *const anyopaque) Status {
1415
return self._set_data(self, data_type, data_size, data);

lib/std/os/uefi/protocols/ip6_protocol.zig

+10-9
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@ const Status = uefi.Status;
66
const MacAddress = uefi.protocols.MacAddress;
77
const ManagedNetworkConfigData = uefi.protocols.ManagedNetworkConfigData;
88
const SimpleNetworkMode = uefi.protocols.SimpleNetworkMode;
9+
const cc = uefi.cc;
910

1011
pub const Ip6Protocol = extern struct {
11-
_get_mode_data: *const fn (*const Ip6Protocol, ?*Ip6ModeData, ?*ManagedNetworkConfigData, ?*SimpleNetworkMode) callconv(.C) Status,
12-
_configure: *const fn (*const Ip6Protocol, ?*const Ip6ConfigData) callconv(.C) Status,
13-
_groups: *const fn (*const Ip6Protocol, bool, ?*const Ip6Address) callconv(.C) Status,
14-
_routes: *const fn (*const Ip6Protocol, bool, ?*const Ip6Address, u8, ?*const Ip6Address) callconv(.C) Status,
15-
_neighbors: *const fn (*const Ip6Protocol, bool, *const Ip6Address, ?*const MacAddress, u32, bool) callconv(.C) Status,
16-
_transmit: *const fn (*const Ip6Protocol, *Ip6CompletionToken) callconv(.C) Status,
17-
_receive: *const fn (*const Ip6Protocol, *Ip6CompletionToken) callconv(.C) Status,
18-
_cancel: *const fn (*const Ip6Protocol, ?*Ip6CompletionToken) callconv(.C) Status,
19-
_poll: *const fn (*const Ip6Protocol) callconv(.C) Status,
12+
_get_mode_data: *const fn (*const Ip6Protocol, ?*Ip6ModeData, ?*ManagedNetworkConfigData, ?*SimpleNetworkMode) callconv(cc) Status,
13+
_configure: *const fn (*const Ip6Protocol, ?*const Ip6ConfigData) callconv(cc) Status,
14+
_groups: *const fn (*const Ip6Protocol, bool, ?*const Ip6Address) callconv(cc) Status,
15+
_routes: *const fn (*const Ip6Protocol, bool, ?*const Ip6Address, u8, ?*const Ip6Address) callconv(cc) Status,
16+
_neighbors: *const fn (*const Ip6Protocol, bool, *const Ip6Address, ?*const MacAddress, u32, bool) callconv(cc) Status,
17+
_transmit: *const fn (*const Ip6Protocol, *Ip6CompletionToken) callconv(cc) Status,
18+
_receive: *const fn (*const Ip6Protocol, *Ip6CompletionToken) callconv(cc) Status,
19+
_cancel: *const fn (*const Ip6Protocol, ?*Ip6CompletionToken) callconv(cc) Status,
20+
_poll: *const fn (*const Ip6Protocol) callconv(cc) Status,
2021

2122
/// Gets the current operational settings for this instance of the EFI IPv6 Protocol driver.
2223
pub fn getModeData(self: *const Ip6Protocol, ip6_mode_data: ?*Ip6ModeData, mnp_config_data: ?*ManagedNetworkConfigData, snp_mode_data: ?*SimpleNetworkMode) Status {

lib/std/os/uefi/protocols/ip6_service_binding_protocol.zig

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ const uefi = std.os.uefi;
33
const Handle = uefi.Handle;
44
const Guid = uefi.Guid;
55
const Status = uefi.Status;
6+
const cc = uefi.cc;
67

78
pub const Ip6ServiceBindingProtocol = extern struct {
8-
_create_child: *const fn (*const Ip6ServiceBindingProtocol, *?Handle) callconv(.C) Status,
9-
_destroy_child: *const fn (*const Ip6ServiceBindingProtocol, Handle) callconv(.C) Status,
9+
_create_child: *const fn (*const Ip6ServiceBindingProtocol, *?Handle) callconv(cc) Status,
10+
_destroy_child: *const fn (*const Ip6ServiceBindingProtocol, Handle) callconv(cc) Status,
1011

1112
pub fn createChild(self: *const Ip6ServiceBindingProtocol, handle: *?Handle) Status {
1213
return self._create_child(self, handle);

lib/std/os/uefi/protocols/loaded_image_protocol.zig

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const Status = uefi.Status;
66
const SystemTable = uefi.tables.SystemTable;
77
const MemoryType = uefi.tables.MemoryType;
88
const DevicePathProtocol = uefi.protocols.DevicePathProtocol;
9+
const cc = uefi.cc;
910

1011
pub const LoadedImageProtocol = extern struct {
1112
revision: u32,
@@ -20,7 +21,7 @@ pub const LoadedImageProtocol = extern struct {
2021
image_size: u64,
2122
image_code_type: MemoryType,
2223
image_data_type: MemoryType,
23-
_unload: *const fn (*const LoadedImageProtocol, Handle) callconv(.C) Status,
24+
_unload: *const fn (*const LoadedImageProtocol, Handle) callconv(cc) Status,
2425

2526
/// Unloads an image from memory.
2627
pub fn unload(self: *const LoadedImageProtocol, handle: Handle) Status {

lib/std/os/uefi/protocols/managed_network_protocol.zig

+9-8
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@ const Status = uefi.Status;
66
const Time = uefi.Time;
77
const SimpleNetworkMode = uefi.protocols.SimpleNetworkMode;
88
const MacAddress = uefi.protocols.MacAddress;
9+
const cc = uefi.cc;
910

1011
pub const ManagedNetworkProtocol = extern struct {
11-
_get_mode_data: *const fn (*const ManagedNetworkProtocol, ?*ManagedNetworkConfigData, ?*SimpleNetworkMode) callconv(.C) Status,
12-
_configure: *const fn (*const ManagedNetworkProtocol, ?*const ManagedNetworkConfigData) callconv(.C) Status,
13-
_mcast_ip_to_mac: *const fn (*const ManagedNetworkProtocol, bool, *const anyopaque, *MacAddress) callconv(.C) Status,
14-
_groups: *const fn (*const ManagedNetworkProtocol, bool, ?*const MacAddress) callconv(.C) Status,
15-
_transmit: *const fn (*const ManagedNetworkProtocol, *const ManagedNetworkCompletionToken) callconv(.C) Status,
16-
_receive: *const fn (*const ManagedNetworkProtocol, *const ManagedNetworkCompletionToken) callconv(.C) Status,
17-
_cancel: *const fn (*const ManagedNetworkProtocol, ?*const ManagedNetworkCompletionToken) callconv(.C) Status,
18-
_poll: *const fn (*const ManagedNetworkProtocol) callconv(.C) Status,
12+
_get_mode_data: *const fn (*const ManagedNetworkProtocol, ?*ManagedNetworkConfigData, ?*SimpleNetworkMode) callconv(cc) Status,
13+
_configure: *const fn (*const ManagedNetworkProtocol, ?*const ManagedNetworkConfigData) callconv(cc) Status,
14+
_mcast_ip_to_mac: *const fn (*const ManagedNetworkProtocol, bool, *const anyopaque, *MacAddress) callconv(cc) Status,
15+
_groups: *const fn (*const ManagedNetworkProtocol, bool, ?*const MacAddress) callconv(cc) Status,
16+
_transmit: *const fn (*const ManagedNetworkProtocol, *const ManagedNetworkCompletionToken) callconv(cc) Status,
17+
_receive: *const fn (*const ManagedNetworkProtocol, *const ManagedNetworkCompletionToken) callconv(cc) Status,
18+
_cancel: *const fn (*const ManagedNetworkProtocol, ?*const ManagedNetworkCompletionToken) callconv(cc) Status,
19+
_poll: *const fn (*const ManagedNetworkProtocol) callconv(cc) Status,
1920

2021
/// Returns the operational parameters for the current MNP child driver.
2122
/// May also support returning the underlying SNP driver mode data.

lib/std/os/uefi/protocols/managed_network_service_binding_protocol.zig

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ const uefi = std.os.uefi;
33
const Handle = uefi.Handle;
44
const Guid = uefi.Guid;
55
const Status = uefi.Status;
6+
const cc = uefi.cc;
67

78
pub const ManagedNetworkServiceBindingProtocol = extern struct {
8-
_create_child: *const fn (*const ManagedNetworkServiceBindingProtocol, *?Handle) callconv(.C) Status,
9-
_destroy_child: *const fn (*const ManagedNetworkServiceBindingProtocol, Handle) callconv(.C) Status,
9+
_create_child: *const fn (*const ManagedNetworkServiceBindingProtocol, *?Handle) callconv(cc) Status,
10+
_destroy_child: *const fn (*const ManagedNetworkServiceBindingProtocol, Handle) callconv(cc) Status,
1011

1112
pub fn createChild(self: *const ManagedNetworkServiceBindingProtocol, handle: *?Handle) Status {
1213
return self._create_child(self, handle);

lib/std/os/uefi/protocols/rng_protocol.zig

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ const std = @import("std");
22
const uefi = std.os.uefi;
33
const Guid = uefi.Guid;
44
const Status = uefi.Status;
5+
const cc = uefi.cc;
56

67
/// Random Number Generator protocol
78
pub const RNGProtocol = extern struct {
8-
_get_info: *const fn (*const RNGProtocol, *usize, [*]align(8) Guid) callconv(.C) Status,
9-
_get_rng: *const fn (*const RNGProtocol, ?*align(8) const Guid, usize, [*]u8) callconv(.C) Status,
9+
_get_info: *const fn (*const RNGProtocol, *usize, [*]align(8) Guid) callconv(cc) Status,
10+
_get_rng: *const fn (*const RNGProtocol, ?*align(8) const Guid, usize, [*]u8) callconv(cc) Status,
1011

1112
/// Returns information about the random number generation implementation.
1213
pub fn getInfo(self: *const RNGProtocol, list_size: *usize, list: [*]align(8) Guid) Status {

lib/std/os/uefi/protocols/simple_file_system_protocol.zig

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ const uefi = std.os.uefi;
33
const Guid = uefi.Guid;
44
const FileProtocol = uefi.protocols.FileProtocol;
55
const Status = uefi.Status;
6+
const cc = uefi.cc;
67

78
pub const SimpleFileSystemProtocol = extern struct {
89
revision: u64,
9-
_open_volume: *const fn (*const SimpleFileSystemProtocol, **const FileProtocol) callconv(.C) Status,
10+
_open_volume: *const fn (*const SimpleFileSystemProtocol, **const FileProtocol) callconv(cc) Status,
1011

1112
pub fn openVolume(self: *const SimpleFileSystemProtocol, root: **const FileProtocol) Status {
1213
return self._open_volume(self, root);

0 commit comments

Comments
 (0)