#include "lwip/opt.h"
#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/pbuf.h"
#include "lwip/sys.h"
#include "netif/etharp.h"
#include "netif/rt_3c905x_exports.h"
#include "netif/ethernetif.h"
#include <unistd.h>
#include "bcopy.h"
#include <signal.h>
#include <rtl_sema.h>
Include dependency graph for rt_3c905x.c:
Go to the source code of this file.
Data Structures | |
struct | rt_3c905cif |
Defines | |
#define | IFNAME0 'e' |
#define | IFNAME1 't' |
#define | COM3_SIGNAL RTL_SIGUSR2 |
Functions | |
void | rt_3c905cif_input (struct pbuf *p, struct netif *netif) |
err_t | rt_3c905cif_output (struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr) |
void | rt_3c905cif_ethernetif_thread (void *arg) |
void | rt_3com905cif_low_level_init (struct netif *netif) |
err_t | rt_3com905cif_low_level_output (struct netif *rt_3c905cif, struct pbuf *p) |
pbuf * | rt_3com905cif_low_level_input (struct rt_3c905cif *rt_3c905cif) |
void | rt_3com905cif_etharp_timer (int signo) |
err_t | rt_3c905cif_init (struct netif *netif) |
void | rt_3c905cif_close (void) |
Variables | |
ethernetif_thread_t | com3_thread |
const struct eth_addr | rt_3c905cif_ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}} |
int | rt_3c905cif_fd |
netif * | rt_3c905cif_netif |
|
Definition at line 99 of file rt_3c905x.c. |
|
Definition at line 97 of file rt_3c905x.c. Referenced by rt_3c905cif_init(), and rt_rtl8139if_init(). |
|
Definition at line 98 of file rt_3c905x.c. Referenced by rt_3c905cif_init(), and rt_rtl8139if_init(). |
|
Definition at line 351 of file rt_3c905x.c. References com3_thread, and rt_3c905cif_fd.
00351 { 00352 /* Unregistering the thread */ 00353 ioctl(rt_3c905cif_fd, 4, (unsigned long) &com3_thread); 00354 /* Closing the 3Com905C-X card */ 00355 close(rt_3c905cif_fd); 00356 } |
|
Definition at line 144 of file rt_3c905x.c. References NULL, rt_3c905cif_input(), and rt_3c905cif_netif. Referenced by rt_3com905cif_low_level_init().
00144 { 00145 struct sched_param p; 00146 00147 p . sched_priority = 100000; 00148 pthread_setschedparam (pthread_self(), SCHED_FIFO, &p); 00149 00150 do{ 00151 rt_3c905cif_input(NULL, rt_3c905cif_netif); 00152 }while(1); 00153 00154 } |
Here is the call graph for this function:
|
Here is the call graph for this function:
|
Definition at line 276 of file rt_3c905x.c. References etharp_arp_input(), etharp_ip_input(), ETHTYPE_ARP, ETHTYPE_IP, htons, netif::input, NULL, pbuf_free(), pbuf_header(), rt_3com905cif_low_level_input(), rt_3com905cif_low_level_output(), and netif::state. Referenced by rt_3c905cif_ethernetif_thread().
00277 { 00278 00279 /* Ethernet protocol layer */ 00280 struct eth_hdr *ethhdr; 00281 struct rt_3c905cif *rt_3c905cif = netif->state; 00282 struct pbuf *q = NULL , *p = NULL; 00283 00284 p = rt_3com905cif_low_level_input(rt_3c905cif); 00285 00286 ethhdr = p->payload; 00287 00288 switch(htons(ethhdr->type)) { 00289 case ETHTYPE_IP: 00290 q = etharp_ip_input(netif, p); 00291 pbuf_header(p, -14); 00292 netif->input(p, netif); 00293 break; 00294 case ETHTYPE_ARP: 00295 q = etharp_arp_input(netif, rt_3c905cif->ethaddr, p); 00296 break; 00297 default: 00298 pbuf_free(p); 00299 break; 00300 } 00301 if(q != NULL) { 00302 rt_3com905cif_low_level_output(netif, q); 00303 pbuf_free(q); 00304 } 00305 } |
Here is the call graph for this function:
|
Definition at line 252 of file rt_3c905x.c. References ERR_OK, etharp_output(), ipaddr, NULL, and rt_3com905cif_low_level_output(). Referenced by rt_3c905cif_init().
00254 { 00255 00256 p = etharp_output(netif, ipaddr, p); 00257 if(p != NULL) { 00258 rt_3com905cif_low_level_output(netif, p); 00259 } 00260 return ERR_OK; 00261 } |
Here is the call graph for this function:
|
Definition at line 308 of file rt_3c905x.c. References ARP_TMR_INTERVAL, etharp_tmr(), NULL, rt_3com905cif_etharp_timer(), sys_timeout(), and sys_timeout_handler. Referenced by rt_3c905cif_init(), and rt_3com905cif_etharp_timer().
00309 { 00310 etharp_tmr(); 00311 sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler)rt_3com905cif_etharp_timer, NULL); 00312 } |
Here is the call graph for this function:
|
Definition at line 119 of file rt_3c905x.c. References ip_addr::addr, COM3_905C_NAME, netif::ip_addr, rt_3c905cif_ethernetif_thread(), rt_3c905cif_fd, netif::state, and sys_thread_new(). Referenced by rt_3c905cif_init().
00120 { 00121 struct rt_3c905cif *rt_3c905cif; 00122 char dev_name[]={"/dev/eth0"}; 00123 00124 rt_3c905cif = netif->state; 00125 00126 /* Do whatever else is needed to initialize interface. */ 00127 if((rt_3c905cif_fd=open(dev_name,0)) == -1) 00128 rtl_printf("ERROR OPENING /dev/%s0\n",COM3_905C_NAME); 00129 00130 /* Obtain MAC address from network interface. */ 00131 ioctl(rt_3c905cif_fd, 2, (unsigned long) rt_3c905cif->ethaddr->addr); 00132 00133 /* We set an IP filter to the ethernet card */ 00134 ioctl(rt_3c905cif_fd, 1, (unsigned long) netif->ip_addr.addr); 00135 00136 // rtl_printf("ADRESS: %x:%x:%x:%x:%x:%x \n",rt_3c905cif->ethaddr->addr[0],rt_3c905cif->ethaddr->addr[1],rt_3c905cif->ethaddr->addr[2],rt_3c905cif->ethaddr->addr[3],rt_3c905cif->ethaddr->addr[4],rt_3c905cif->ethaddr->addr[5]); 00137 00138 sys_thread_new(rt_3c905cif_ethernetif_thread, netif, 0); 00139 00140 return ; 00141 } |
Here is the call graph for this function:
|
Definition at line 209 of file rt_3c905x.c. References bcopy(), len, NULL, pbuf_alloc(), PBUF_LINK, PBUF_POOL, rt_3c905cif_fd, sys_arch_close(), and u16_t. Referenced by rt_3c905cif_input().
00210 { 00211 struct pbuf *p, *q; 00212 struct memory receive_buffer; 00213 unsigned char *bufptr; 00214 u16_t len; 00215 00216 /* Obtain the size of the packet and put it into the "len" 00217 variable. */ 00218 len = read(rt_3c905cif_fd,(void *) &receive_buffer,1536); 00219 00220 /* We allocate a pbuf chain of pbufs from the pool. */ 00221 p = pbuf_alloc(PBUF_LINK, len, PBUF_POOL); 00222 00223 if(p != NULL) { 00224 /* We iterate over the pbuf chain until we have read the entire 00225 packet into the pbuf. */ 00226 bufptr = receive_buffer.mem; 00227 for(q = p; q != NULL; q = q->next) { 00228 /* Read enough bytes to fill this pbuf in the chain. The 00229 avaliable data in the pbuf is given by the q->len 00230 variable. */ 00231 bcopy(bufptr, q->payload, q->len); 00232 bufptr += q->len; 00233 } 00234 } else { 00235 rtl_printf("ERROR:Not enough memory!!!\n"); 00236 sys_arch_close(); 00237 } 00238 00239 return p; 00240 } |
Here is the call graph for this function:
|
Definition at line 168 of file rt_3c905x.c. References bcopy(), ERR_OK, NULL, and rt_3c905cif_fd. Referenced by rt_3c905cif_init(), rt_3c905cif_input(), and rt_3c905cif_output().
00169 { 00170 00171 struct pbuf *q; 00172 unsigned char buf[1536]; 00173 unsigned char *bufptr; 00174 00175 //initiate transfer; 00176 bufptr = buf; 00177 00178 for(q = p; q != NULL; q = q->next) { 00179 /* Send the data from the pbuf to the interface, one pbuf at a 00180 time. The size of the data in each pbuf is kept in the ->len 00181 variable. */ 00182 bcopy(q->payload, bufptr, q->len); 00183 bufptr += q->len; 00184 } 00185 00186 //signal that packet should be sent; 00187 { 00188 int tmp; 00189 int counter=0; 00190 00191 while((tmp = write(rt_3c905cif_fd,buf,p->tot_len)) == -1){ 00192 counter++; 00193 usleep(1); 00194 } 00195 } 00196 00197 return ERR_OK; 00198 } |
Here is the call graph for this function:
|
Definition at line 101 of file rt_3c905x.c. Referenced by rt_3c905cif_close(). |
|
Definition at line 107 of file rt_3c905x.c. |
|
Definition at line 108 of file rt_3c905x.c. Referenced by rt_3c905cif_close(), rt_3com905cif_low_level_init(), rt_3com905cif_low_level_input(), and rt_3com905cif_low_level_output(). |
|
Definition at line 109 of file rt_3c905x.c. Referenced by rt_3c905cif_ethernetif_thread(), and rt_3c905cif_init(). |