#ifndef RTL8139_H #define RTL8139_H #include "network.h" #include "pci.h" #include "port.h" #define NOF_MAC_REGISTERS 6 #define NOF_TRANSMIT_BUFFERS 4 typedef struct { network_t base; port8_t MAC_port[NOF_MAC_REGISTERS]; port32_t TSD_port[NOF_TRANSMIT_BUFFERS]; port32_t TSAD_port[NOF_TRANSMIT_BUFFERS]; port32_t RBSTART_port; port8_t CMD_port; port16_t CAPR_port; port16_t IMR_port; port16_t ISR_port; port32_t TCR_port; port32_t RCR_port; port32_t MPC_port; pci_controller_t *pci; pci_device_descriptor_t pci_descriptor; uint32_t model_id; const char *model; uint8_t *receive_buffer; uint16_t receive_buffer_pos; uint8_t *transmit_buffer[NOF_TRANSMIT_BUFFERS]; int transmit_buffer_idx; interrupt_handler_t interrupt_handler; } rtl8139_t; typedef struct { network_vtable_t base; } rtl8139_vtable_t; void rtl8139_init( rtl8139_t *rtl8139, pci_controller_t *pci, pci_device_descriptor_t *descriptor, interrupt_t *interrupt, void *context ); void rtl8139_activate( void *obj ); void rtl8139_deactivate( void *obj ); void rtl8139_deinit( void *obj ); void rtl8139_print_name( void *obj ); void rtl8139_print_info( void *obj ); void rtl8139_write( void *obj, network_buffer_t buf ); uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ); #endif // RTL8139_H