diff options
Diffstat (limited to 'dev/kernel/HALKit')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc b/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc index 57f64712..38c12fee 100644 --- a/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc +++ b/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc @@ -21,6 +21,10 @@ STATIC BOOL kTXEnabled = NO; STATIC UInt8* kRXUpperLayer = nullptr; STATIC UInt8* kRxBuffer = nullptr; +/***********************************************************************************/ +///@brief RTL8139 Init routine. +/***********************************************************************************/ + EXTERN_C Void rtl_init_nic_rtl8139(UInt16 io_base) noexcept { if (kTXEnabled) return; @@ -42,7 +46,10 @@ EXTERN_C Void rtl_init_nic_rtl8139(UInt16 io_base) noexcept { if (timeout > 0x1000) break; } - MUST_PASS(timeout <= 0x1000); + if (timeout <= 0x1000) { + ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR, "RTL8139: Reset failed"); + return; + } rt_out32(io_base + 0x30, (UInt32) (UIntPtr) kRxBuffer); @@ -50,12 +57,16 @@ EXTERN_C Void rtl_init_nic_rtl8139(UInt16 io_base) noexcept { rt_out32(io_base + 0x44, 0xf | (1 << 7)); - // Enable IRQ. rt_out16(io_base + 0x3C, 0x0005); kTXEnabled = YES; } +/***********************************************************************************/ +/// @brief RTL8139 I/O interrupt handler. +/// @note This function is called when the device interrupts to retrieve network data. +/***********************************************************************************/ + EXTERN_C void rtl_rtl8139_interrupt_handler() { if (kIOBase == 0xFFFF) return; @@ -78,4 +89,15 @@ EXTERN_C void rtl_rtl8139_interrupt_handler() { if (!(status & 0x04)) { err_global_get() = kErrorNoNetwork; } +} + +/***********************************************************************************/ +/// @brief RTL8139 get upper layer function +/// @return the upper layer. +/// @retval nullptr if no upper layer is set. +/// @retval pointer to the upper layer if set. +/***********************************************************************************/ + +EXTERN_C UInt8* rtl_rtl8139_get_upper_layer() { + return kRXUpperLayer; }
\ No newline at end of file |
