[Zion][Yellowstone] First pass at adding PCI ioport access.
This commit is contained in:
parent
f2c2cff98a
commit
b677633248
16 changed files with 337 additions and 199 deletions
|
|
@ -15,4 +15,11 @@ fn main() {
|
|||
curr_directory.to_str().unwrap()
|
||||
);
|
||||
println!("cargo:rustc-link-lib=zion_stub");
|
||||
|
||||
// Trying to recreate bindings?
|
||||
// Run the following commands
|
||||
// gcc -E zion/include/zcall.h > /tmp/expanded.h
|
||||
// bindgen --verbose --use-core --no-layout-tests /tmp/expanded.h -o rust/lib/mammoth/src/bindings.rs -- -x c++
|
||||
//
|
||||
// Then go fix the ThreadExit struct.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,153 +1,5 @@
|
|||
/* automatically generated by rust-bindgen 0.69.4 */
|
||||
|
||||
pub const _STDINT_H: u32 = 1;
|
||||
pub const _FEATURES_H: u32 = 1;
|
||||
pub const _ISOC95_SOURCE: u32 = 1;
|
||||
pub const _ISOC99_SOURCE: u32 = 1;
|
||||
pub const _ISOC11_SOURCE: u32 = 1;
|
||||
pub const _ISOC2X_SOURCE: u32 = 1;
|
||||
pub const _POSIX_SOURCE: u32 = 1;
|
||||
pub const _POSIX_C_SOURCE: u32 = 200809;
|
||||
pub const _XOPEN_SOURCE: u32 = 700;
|
||||
pub const _XOPEN_SOURCE_EXTENDED: u32 = 1;
|
||||
pub const _LARGEFILE64_SOURCE: u32 = 1;
|
||||
pub const _DEFAULT_SOURCE: u32 = 1;
|
||||
pub const _ATFILE_SOURCE: u32 = 1;
|
||||
pub const _DYNAMIC_STACK_SIZE_SOURCE: u32 = 1;
|
||||
pub const __GLIBC_USE_ISOC2X: u32 = 1;
|
||||
pub const __USE_ISOC11: u32 = 1;
|
||||
pub const __USE_ISOC99: u32 = 1;
|
||||
pub const __USE_ISOC95: u32 = 1;
|
||||
pub const __USE_ISOCXX11: u32 = 1;
|
||||
pub const __USE_POSIX: u32 = 1;
|
||||
pub const __USE_POSIX2: u32 = 1;
|
||||
pub const __USE_POSIX199309: u32 = 1;
|
||||
pub const __USE_POSIX199506: u32 = 1;
|
||||
pub const __USE_XOPEN2K: u32 = 1;
|
||||
pub const __USE_XOPEN2K8: u32 = 1;
|
||||
pub const __USE_XOPEN: u32 = 1;
|
||||
pub const __USE_XOPEN_EXTENDED: u32 = 1;
|
||||
pub const __USE_UNIX98: u32 = 1;
|
||||
pub const _LARGEFILE_SOURCE: u32 = 1;
|
||||
pub const __USE_XOPEN2K8XSI: u32 = 1;
|
||||
pub const __USE_XOPEN2KXSI: u32 = 1;
|
||||
pub const __USE_LARGEFILE: u32 = 1;
|
||||
pub const __USE_LARGEFILE64: u32 = 1;
|
||||
pub const __WORDSIZE: u32 = 64;
|
||||
pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1;
|
||||
pub const __SYSCALL_WORDSIZE: u32 = 64;
|
||||
pub const __TIMESIZE: u32 = 64;
|
||||
pub const __USE_MISC: u32 = 1;
|
||||
pub const __USE_ATFILE: u32 = 1;
|
||||
pub const __USE_DYNAMIC_STACK_SIZE: u32 = 1;
|
||||
pub const __USE_GNU: u32 = 1;
|
||||
pub const __USE_FORTIFY_LEVEL: u32 = 0;
|
||||
pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0;
|
||||
pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0;
|
||||
pub const __GLIBC_USE_C2X_STRTOL: u32 = 1;
|
||||
pub const _STDC_PREDEF_H: u32 = 1;
|
||||
pub const __STDC_IEC_559__: u32 = 1;
|
||||
pub const __STDC_IEC_60559_BFP__: u32 = 201404;
|
||||
pub const __STDC_IEC_559_COMPLEX__: u32 = 1;
|
||||
pub const __STDC_IEC_60559_COMPLEX__: u32 = 201404;
|
||||
pub const __STDC_ISO_10646__: u32 = 201706;
|
||||
pub const __GNU_LIBRARY__: u32 = 6;
|
||||
pub const __GLIBC__: u32 = 2;
|
||||
pub const __GLIBC_MINOR__: u32 = 39;
|
||||
pub const _SYS_CDEFS_H: u32 = 1;
|
||||
pub const __glibc_c99_flexarr_available: u32 = 1;
|
||||
pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI: u32 = 0;
|
||||
pub const __HAVE_GENERIC_SELECTION: u32 = 0;
|
||||
pub const __GLIBC_USE_LIB_EXT2: u32 = 1;
|
||||
pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 1;
|
||||
pub const __GLIBC_USE_IEC_60559_BFP_EXT_C2X: u32 = 1;
|
||||
pub const __GLIBC_USE_IEC_60559_EXT: u32 = 1;
|
||||
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 1;
|
||||
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X: u32 = 1;
|
||||
pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 1;
|
||||
pub const _BITS_TYPES_H: u32 = 1;
|
||||
pub const _BITS_TYPESIZES_H: u32 = 1;
|
||||
pub const __OFF_T_MATCHES_OFF64_T: u32 = 1;
|
||||
pub const __INO_T_MATCHES_INO64_T: u32 = 1;
|
||||
pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1;
|
||||
pub const __STATFS_MATCHES_STATFS64: u32 = 1;
|
||||
pub const __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64: u32 = 1;
|
||||
pub const __FD_SETSIZE: u32 = 1024;
|
||||
pub const _BITS_TIME64_H: u32 = 1;
|
||||
pub const _BITS_WCHAR_H: u32 = 1;
|
||||
pub const _BITS_STDINT_INTN_H: u32 = 1;
|
||||
pub const _BITS_STDINT_UINTN_H: u32 = 1;
|
||||
pub const _BITS_STDINT_LEAST_H: u32 = 1;
|
||||
pub const INT8_MIN: i32 = -128;
|
||||
pub const INT16_MIN: i32 = -32768;
|
||||
pub const INT32_MIN: i32 = -2147483648;
|
||||
pub const INT8_MAX: u32 = 127;
|
||||
pub const INT16_MAX: u32 = 32767;
|
||||
pub const INT32_MAX: u32 = 2147483647;
|
||||
pub const UINT8_MAX: u32 = 255;
|
||||
pub const UINT16_MAX: u32 = 65535;
|
||||
pub const UINT32_MAX: u32 = 4294967295;
|
||||
pub const INT_LEAST8_MIN: i32 = -128;
|
||||
pub const INT_LEAST16_MIN: i32 = -32768;
|
||||
pub const INT_LEAST32_MIN: i32 = -2147483648;
|
||||
pub const INT_LEAST8_MAX: u32 = 127;
|
||||
pub const INT_LEAST16_MAX: u32 = 32767;
|
||||
pub const INT_LEAST32_MAX: u32 = 2147483647;
|
||||
pub const UINT_LEAST8_MAX: u32 = 255;
|
||||
pub const UINT_LEAST16_MAX: u32 = 65535;
|
||||
pub const UINT_LEAST32_MAX: u32 = 4294967295;
|
||||
pub const INT_FAST8_MIN: i32 = -128;
|
||||
pub const INT_FAST16_MIN: i64 = -9223372036854775808;
|
||||
pub const INT_FAST32_MIN: i64 = -9223372036854775808;
|
||||
pub const INT_FAST8_MAX: u32 = 127;
|
||||
pub const INT_FAST16_MAX: u64 = 9223372036854775807;
|
||||
pub const INT_FAST32_MAX: u64 = 9223372036854775807;
|
||||
pub const UINT_FAST8_MAX: u32 = 255;
|
||||
pub const UINT_FAST16_MAX: i32 = -1;
|
||||
pub const UINT_FAST32_MAX: i32 = -1;
|
||||
pub const INTPTR_MIN: i64 = -9223372036854775808;
|
||||
pub const INTPTR_MAX: u64 = 9223372036854775807;
|
||||
pub const UINTPTR_MAX: i32 = -1;
|
||||
pub const PTRDIFF_MIN: i64 = -9223372036854775808;
|
||||
pub const PTRDIFF_MAX: u64 = 9223372036854775807;
|
||||
pub const SIG_ATOMIC_MIN: i32 = -2147483648;
|
||||
pub const SIG_ATOMIC_MAX: u32 = 2147483647;
|
||||
pub const SIZE_MAX: i32 = -1;
|
||||
pub const WINT_MIN: u32 = 0;
|
||||
pub const WINT_MAX: u32 = 4294967295;
|
||||
pub const INT8_WIDTH: u32 = 8;
|
||||
pub const UINT8_WIDTH: u32 = 8;
|
||||
pub const INT16_WIDTH: u32 = 16;
|
||||
pub const UINT16_WIDTH: u32 = 16;
|
||||
pub const INT32_WIDTH: u32 = 32;
|
||||
pub const UINT32_WIDTH: u32 = 32;
|
||||
pub const INT64_WIDTH: u32 = 64;
|
||||
pub const UINT64_WIDTH: u32 = 64;
|
||||
pub const INT_LEAST8_WIDTH: u32 = 8;
|
||||
pub const UINT_LEAST8_WIDTH: u32 = 8;
|
||||
pub const INT_LEAST16_WIDTH: u32 = 16;
|
||||
pub const UINT_LEAST16_WIDTH: u32 = 16;
|
||||
pub const INT_LEAST32_WIDTH: u32 = 32;
|
||||
pub const UINT_LEAST32_WIDTH: u32 = 32;
|
||||
pub const INT_LEAST64_WIDTH: u32 = 64;
|
||||
pub const UINT_LEAST64_WIDTH: u32 = 64;
|
||||
pub const INT_FAST8_WIDTH: u32 = 8;
|
||||
pub const UINT_FAST8_WIDTH: u32 = 8;
|
||||
pub const INT_FAST16_WIDTH: u32 = 64;
|
||||
pub const UINT_FAST16_WIDTH: u32 = 64;
|
||||
pub const INT_FAST32_WIDTH: u32 = 64;
|
||||
pub const UINT_FAST32_WIDTH: u32 = 64;
|
||||
pub const INT_FAST64_WIDTH: u32 = 64;
|
||||
pub const UINT_FAST64_WIDTH: u32 = 64;
|
||||
pub const INTPTR_WIDTH: u32 = 64;
|
||||
pub const UINTPTR_WIDTH: u32 = 64;
|
||||
pub const INTMAX_WIDTH: u32 = 64;
|
||||
pub const UINTMAX_WIDTH: u32 = 64;
|
||||
pub const PTRDIFF_WIDTH: u32 = 64;
|
||||
pub const SIG_ATOMIC_WIDTH: u32 = 32;
|
||||
pub const SIZE_WIDTH: u32 = 64;
|
||||
pub const WCHAR_WIDTH: u32 = 32;
|
||||
pub const WINT_WIDTH: u32 = 32;
|
||||
pub type __u_char = ::core::ffi::c_uchar;
|
||||
pub type __u_short = ::core::ffi::c_ushort;
|
||||
pub type __u_int = ::core::ffi::c_uint;
|
||||
|
|
@ -257,7 +109,6 @@ pub const kZionPortCreate: u64 = 80;
|
|||
pub const kZionPortSend: u64 = 81;
|
||||
pub const kZionPortRecv: u64 = 82;
|
||||
pub const kZionPortPoll: u64 = 83;
|
||||
pub const kZionIrqRegister: u64 = 88;
|
||||
pub const kZionMsiIrqRegister: u64 = 89;
|
||||
pub const kZionEndpointCreate: u64 = 96;
|
||||
pub const kZionEndpointSend: u64 = 97;
|
||||
|
|
@ -274,6 +125,10 @@ pub const kZionSemaphoreCreate: u64 = 131;
|
|||
pub const kZionSemaphoreWait: u64 = 132;
|
||||
pub const kZionSemaphoreSignal: u64 = 133;
|
||||
pub const kZionDebug: u64 = 65536;
|
||||
pub const kZionPciRead: u64 = 69632;
|
||||
pub const kZionPciCreateBound: u64 = 69633;
|
||||
pub const kZionPciReadBound: u64 = 69634;
|
||||
pub const kZionPciWriteBound: u64 = 69635;
|
||||
pub const kZIrqKbd: u64 = 34;
|
||||
pub const kZIrqPci1: u64 = 48;
|
||||
pub const kZIrqPci2: u64 = 49;
|
||||
|
|
@ -351,10 +206,6 @@ pub struct ZThreadStartReq {
|
|||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct ZThreadExitReq {}
|
||||
extern "C" {
|
||||
#[link_name = "\u{1}_Z11ZThreadExitv"]
|
||||
pub fn ZThreadExit() -> z_err_t;
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct ZThreadWaitReq {
|
||||
|
|
@ -473,12 +324,6 @@ pub struct ZPortPollReq {
|
|||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct ZIrqRegisterReq {
|
||||
pub irq_num: u64,
|
||||
pub port_cap: *mut z_cap_t,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct ZMsiIrqRegisterReq {
|
||||
pub irq_num: *mut u64,
|
||||
pub port_cap: *mut z_cap_t,
|
||||
|
|
@ -574,3 +419,36 @@ pub struct ZDebugReq {
|
|||
pub message: *const ::core::ffi::c_char,
|
||||
pub size: u64,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct ZPciReadReq {
|
||||
pub pci_cap: z_cap_t,
|
||||
pub bus: u8,
|
||||
pub slot: u8,
|
||||
pub func: u8,
|
||||
pub offset: u8,
|
||||
pub output: *mut u32,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct ZPciCreateBoundReq {
|
||||
pub pci_cap: z_cap_t,
|
||||
pub bus: u8,
|
||||
pub slot: u8,
|
||||
pub func: u8,
|
||||
pub new_cap: *mut z_cap_t,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct ZPciReadBoundReq {
|
||||
pub pci_cap: z_cap_t,
|
||||
pub offset: u8,
|
||||
pub data: *mut u32,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct ZPciWriteBoundReq {
|
||||
pub pci_cap: z_cap_t,
|
||||
pub offset: u8,
|
||||
pub data: u32,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -472,3 +472,25 @@ pub fn semaphone_wait(sem_cap: &Capability) -> Result<(), ZError> {
|
|||
},
|
||||
)
|
||||
}
|
||||
|
||||
pub fn pci_read(
|
||||
pci_cap: &Capability,
|
||||
bus: u8,
|
||||
slot: u8,
|
||||
func: u8,
|
||||
offset: u8,
|
||||
) -> Result<u32, ZError> {
|
||||
let mut data: u32 = 0;
|
||||
syscall(
|
||||
zion::kZionPciRead,
|
||||
&zion::ZPciReadReq {
|
||||
pci_cap: pci_cap.raw(),
|
||||
bus,
|
||||
slot,
|
||||
func,
|
||||
offset,
|
||||
output: &mut data as *mut u32,
|
||||
},
|
||||
)?;
|
||||
Ok(data)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue