#ifndef ROS_INC_NIC_COMMON_H
#define ROS_INC_NIC_COMMON_H

#include <ros/common.h>
#include <trap.h>
#include <net.h>
#include <pmap.h>
#include <net/pbuf.h>

// Packet sizes
#define MTU              1500
/* 14 for the header, 4 for something else.  It's either the CRC at the end
 * (which seems to be 0'd), or for the optional 802.1q tag. */
#define MAX_FRAME_SIZE   (MTU + 18)
#define MIN_FRAME_SIZE   60 // See the spec...

// Maximum packet buffers we can handle at any given time
#define MAX_PACKET_BUFFERS    32 //1024
 
// Global send_frame function pointer
// Means we can only have one network card per system right now...
extern int (*send_frame)(const char *data, size_t len);
extern int (*send_pbuf)(struct pbuf *p);
extern struct pbuf* (*recv_pbuf)(void);

// Global variables for managing ethernet packets over a nic
// Again, since these are global for all network cards we are 
// limited to only one for now
extern unsigned char device_mac[6];
extern uint8_t eth_up;
extern uint32_t num_packet_buffers;
extern char* packet_buffers[MAX_PACKET_BUFFERS];
extern uint32_t packet_buffers_sizes[MAX_PACKET_BUFFERS];
extern uint32_t packet_buffers_head;
extern uint32_t packet_buffers_tail;
extern spinlock_t packet_buffers_lock; 

// Creates a new ethernet packet and puts the header on it
char* eth_wrap(const char* data, size_t len, char src_mac[6], 
               char dest_mac[6], uint16_t eth_type);

struct ETH_Header {
	char dest_mac[6];
	char source_mac[6];
	uint16_t eth_type;
};

struct eth_frame {
	struct ETH_Header eth_head;
	char data[MTU];
} __attribute__((packed));

static inline void print_mac (uint8_t* mac_addr) {
	printk("%02x:%02x:%02x:%02x:%02x:%02x\n", 0xFF & mac_addr[0], 0xFF & mac_addr[1],	
	                                                         0xFF & mac_addr[2], 0xFF & mac_addr[3],	
                                                           0xFF & mac_addr[4], 0xFF & mac_addr[5]);
}

#endif /* !ROS_INC_NIC_COMMON_H */
