17#define IMS_RXQ0 (1 << 20)
18#define IMS_TXQ0 (1 << 22)
19#define IMS_OTHER (1 << 24)
25 log(
mod,
"Device not found");
28 log(
mod,
"Device found bar0 at 0x%x",
device->bar[0].address);
33 write(0x0000, ctrl | (1 << 26));
35 for (
volatile int i = 0; i < 10000; i++)
37 while (
read(0x0000) & (1 << 26))
43 log(
mod,
"Eprom not found");
50 for (
int i = 0; i < 0x80; i++)
51 write(0x5200 + i * 4, 0);
63 log(
mod,
"MSI-X Available at cap : 0x%x", msix_cap);
65 auto irq = IOUtils::irq_alloc_entry();
72 ctrl_ext |= (1 << 24) | (1 << 27) | (1u << 31);
73 write(0x0018, ctrl_ext);
79 ivar |= (1 << 11) | (0 << 8);
84 write(0x00E8, (1 << 3) | 0);
95 log(
mod,
"MSI Available at 0x%x", msi_cap);
96 auto irq = IOUtils::irq_alloc_entry();
103 else if (
device->interrupt_line) {
104 log(
mod,
"Using Legacy IRQ");
111 log(
mod,
"Successfully Initialized Module");
128 instance.storeBufferToPool(rx_id, vaddr);
135 log(
"E1000",
"nic 0x%x", nic);
137 const char* service_name =
"E1000";
139 (
char*)service_name);
static AHCIModule instance
ioforge_pci_device * device
static E1000Module * getInstance()
void write(uint16_t p_address, uint32_t p_value)
void setNIC(struct ioforge_nic_service *nic)
boolean_t syncMacAddress()
static void fireHandler()
uint32_t read(uint16_t p_address)
static void * alloc(size_t size)
static void strcopy(char *dst, char *src)
struct ioforge_pci_device * findDevice(uint16_t vendor_id, uint16_t device_id)
IOforgePCI(const char *mod)
int E1000SendPacketCWrapper(const struct data_template data[], size_t count)
void E1000StoreBufferToPoolCWrapper(int rx_id, void *vaddr)
int E1000GetMacAddressCWrapper(uint8_t mac[6])
uint8_t ioforge_get_current_core_id()
uint32_t isr_irq_register(uint8_t irq, void *handler)
void serial2_printf(const char *fmt,...)
#define log(mod, fmt,...)
#define IoForgeModuleConstructor(Class)
uint16_t pci_cap_find_msi(struct ioforge_pci_device *pci)
void pci_enable_msi(struct ioforge_pci_device *pci, uint8_t vector, uint8_t cpu, uint16_t cap)
uintptr_t pci_enable_msix(struct ioforge_pci_device *pci, uint8_t vector, uint8_t cpu, uint16_t cap)
uint16_t pci_cap_find_msix(struct ioforge_pci_device *pci)
int(* send)(const struct data_template data[], size_t count)
int(* get_mac_address)(uint8_t mac[6])
void(* storeBufferToPool)(int rx_id, void *vaddr)
struct ioforge_nic_operation ops
struct ioforge_device service