📄 network.c
字号:
#include <rtems.h>#include <sys/mbuf.h>#include <irq.h>#include <libchip/cs8900.h>#define CS8900_BASE 0x20000300unsigned int bsp_cs8900_io_base = 0;unsigned int bsp_cs8900_memory_base = 0;cs8900_device *g_cs;rtems_isr cs8900_isr(rtems_vector_number v);rtems_irq_connect_data cs8900_isr_data = {BSP_EINT3, (rtems_irq_hdl)cs8900_isr, NULL, NULL, NULL, 0, 0 };char g_enetbuf[1520];rtems_isr cs8900_isr(rtems_vector_number v){ cs8900_interrupt(v, g_cs);}/* cs8900_io_set_reg - set one of the I/O addressed registers */void cs8900_io_set_reg (int dev, unsigned short reg, unsigned short data){ /* works the same for all values of dev *//* printf("cs8900_io_set_reg: reg: %#6x, val %#6x\n", CS8900_BASE + reg, data);*/ *(unsigned short *)(CS8900_BASE + reg) = data;}/* cs8900_io_get_reg - reads one of the I/O addressed registers */unsigned short cs8900_io_get_reg (int dev, unsigned short reg){ unsigned short val; /* works the same for all values of dev */ val = *(unsigned short *)(CS8900_BASE + reg);/* printf("cs8900_io_get_reg: reg: %#6x, val %#6x\n", reg, val);*/ return val;}/* cs8900_mem_set_reg - sets one of the registers mapped through * PacketPage */void cs8900_mem_set_reg (int dev, unsigned long reg, unsigned short data){ /* works the same for all values of dev */ cs8900_io_set_reg(dev, CS8900_IO_PACKET_PAGE_PTR, reg); cs8900_io_set_reg(dev, CS8900_IO_PP_DATA_PORT0, data);}/* cs8900_mem_get_reg - reads one of the registers mapped through * PacketPage */unsigned short cs8900_mem_get_reg (int dev, unsigned long reg){ /* works the same for all values of dev */ cs8900_io_set_reg(dev, CS8900_IO_PACKET_PAGE_PTR, reg); return cs8900_io_get_reg(dev, CS8900_IO_PP_DATA_PORT0);}void cs8900_get_mac_addr (int dev, unsigned char *mac_address){ mac_address[0] = 0x08; mac_address[1] = 0x00; mac_address[2] = 0x3e; mac_address[3] = 0x21; mac_address[4] = 0xc7; mac_address[5] = 0xf7;}void cs8900_attach_interrupt (int dev, cs8900_device *cs){ g_cs = cs; BSP_install_rtems_irq_handler(&cs8900_isr_data);}void cs8900_detach_interrupt (int dev){ BSP_remove_rtems_irq_handler(&cs8900_isr_data);}unsigned short cs8900_get_data_block (int dev, unsigned char *data){ int len; int i; len = cs8900_mem_get_reg(dev, CS8900_PP_RxLength); for (i = 0; i < ((len + 1) / 2); i++) { ((short *)data)[i] = cs8900_io_get_reg(dev, CS8900_IO_RX_TX_DATA_PORT0); } return len;}void cs8900_tx_load (int dev, struct mbuf *m){ int len; short *data; int i; len = 0; do { memcpy(&g_enetbuf[len], mtod(m, const void *), m->m_len); len += m->m_len; m = m->m_next; } while (m != 0); data = (unsigned short *) &g_enetbuf[0]; for (i = 0; i < ((len + 1) / 2); i++) { cs8900_io_set_reg(dev, CS8900_IO_RX_TX_DATA_PORT0, data[i]); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -