Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
ioforge_nic.h
Go to the documentation of this file.
1#ifndef __SYS__IOFORGE__IOFORGE_NIC_H__
2#define __SYS__IOFORGE__IOFORGE_NIC_H__
3
4#include "ioforge/ioforge.h"
5#include <type.h>
6
7#define MAX_NICS 8 /* maksimum NIC yang bisa didaftarkan */
8#define NIC_MAC_LEN 6 /* panjang MAC address (bytes) */
9#define PENDING_QUEUE_SIZE 128
10#define PENDING_QUEUE_MASK (PENDING_QUEUE_SIZE - 1)
11#define BUFFER_POOL_SIZE 1280
12#define BUFFER_POOL_MASK (BUFFER_POOL_SIZE - 1)
13
14// untuk scatter gather pattern
16 const void* buffer;
17 size_t len;
19};
20
22 int (*send)(const struct data_template data[], size_t count);
23 int (*receive)(void** buffer, size_t* size); // buat pooling
25 void (*storeBufferToPool)(int rx_id, void* vaddr);
26};
27
28typedef enum {
29 Ready = 2,
30 Bussy = 1,
32 Halted = -2,
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39struct pending_rx {
40 int rx_id;
42 size_t len;
43};
44
45struct rx_buffer {
46 void* vaddr;
48};
49
52 // posisi terdepan buffer yang digunakan
54 // posisi terbelakang buffer yang sudah selesai digunakan
56};
57
66
69 size_t len, int rx_id);
71
73 struct pending_rx* rx);
74
75// jangan lupa clear rx setelah di consume
77 struct pending_rx* rx);
78
79#ifdef __cplusplus
80}
81#endif
82#endif // __SYS__IOFORGE__IOFORGE_NIC_H__
int count
Definition cache.h:2
kstring name
Definition dentry.h:5
volatile uint32_t buffer[5]
Definition ehci.hpp:8
struct fs_data data
Definition filesystem.h:1
#define NIC_MAC_LEN
Definition ioforge_nic.h:8
struct ioforge_nic_service * IOforgeNICFindByName(char *name)
void ioforge_nic_rx(struct ioforge_nic_service *nic, uint8_t *buffer, size_t len, int rx_id)
void ioforge_clear_rx_queue(struct ioforge_nic_service *nic, struct pending_rx *rx)
Definition ioforge_nic.c:74
void ioforge_register_nic(struct ioforge_nic_service *nic)
#define PENDING_QUEUE_SIZE
Definition ioforge_nic.h:9
#define BUFFER_POOL_SIZE
Definition ioforge_nic.h:11
IoforgeNICStatus
Definition ioforge_nic.h:28
@ Ready
Definition ioforge_nic.h:29
@ Bussy
Definition ioforge_nic.h:30
@ Halted
Definition ioforge_nic.h:32
@ Unready
Definition ioforge_nic.h:31
int ioforge_receive_pending_queue(struct ioforge_nic_service *nic, struct pending_rx *rx)
Definition ioforge_nic.c:55
size_t len
Definition oct2bin.h:7
uint8_t wait_next_data
Definition ioforge_nic.h:18
const void * buffer
Definition ioforge_nic.h:16
int(* receive)(void **buffer, size_t *size)
Definition ioforge_nic.h:23
int(* send)(const struct data_template data[], size_t count)
Definition ioforge_nic.h:22
int(* get_mac_address)(uint8_t mac[6])
Definition ioforge_nic.h:24
void(* storeBufferToPool)(int rx_id, void *vaddr)
Definition ioforge_nic.h:25
struct ioforge_nic_operation ops
Definition ioforge_nic.h:60
struct ioforge_device service
Definition ioforge_nic.h:59
IoforgeNICStatus status
Definition ioforge_nic.h:61
struct pending_rx pending_queue[128]
Definition ioforge_nic.h:62
size_t len
Definition ioforge_nic.h:42
uint8_t * data
Definition ioforge_nic.h:41
uint32_t tail
Definition ioforge_nic.h:55
struct rx_buffer buffers[1280]
Definition ioforge_nic.h:51
uint32_t head
Definition ioforge_nic.h:53
uintptr_t paddr
Definition ioforge_nic.h:47
void * vaddr
Definition ioforge_nic.h:46
unsigned int uint32_t
Definition type.h:19
unsigned long uintptr_t
Definition type.h:73
unsigned char uint8_t
Definition type.h:7
unsigned long size_t
Definition type.h:55
size_t size
Definition vnode.h:3