Main Page | Directories | File List | Globals

adi_net.c File Reference

#include <agnix/init.h>
#include <agnix/adi/adi.h>
#include <agnix/net/net.h>
#include <agnix/irq.h>
#include <agnix/memory.h>
#include <agnix/strings.h>
#include <agnix/console.h>
#include <agnix/list.h>
#include <agnix/spinlock.h>

Include dependency graph for adi_net.c:

Go to the source code of this file.

Defines

#define MOD_NAME   "NET: "

Functions

int adi_netdev_set_name (struct adi_netdev_s *netdev, char *if_name)
int adi_netdev_compose_name (struct adi_netdev_s *netdev)
int adi_netdev_set_id (struct adi_netdev_s *netdev)
adi_netdev_s * adi_netdev_find_by_name (char *name)
int adi_netdev_list_add (struct adi_netdev_s *netdev)
int adi_netdev_init (struct adi_netdev_s *netdev)
int adi_register_netdev (struct adi_netdev_s *netdev)
adi_netdev_s * adi_netdev_alloc (void)
void adi_netdev_free (struct adi_netdev_s *netdev)
int adi_netdev_data_init (void)
int __init adi_netdrv_init (void)
void adi_netdev_print_interfaces (void)

Variables

list_head adi_netdev_list
spinlock_t adi_netdev_list_lock
int net_devices_last_id = 0


Define Documentation

#define MOD_NAME   "NET: "
 

Definition at line 24 of file adi_net.c.


Function Documentation

struct adi_netdev_s* adi_netdev_alloc void   ) 
 

Definition at line 133 of file adi_net.c.

References get_free_pages().

00134 {
00135     return (struct adi_netdev_s *)get_free_pages(0);
00136 }

Here is the call graph for this function:

int adi_netdev_compose_name struct adi_netdev_s *  netdev  ) 
 

Definition at line 45 of file adi_net.c.

References eth_device_compose_name().

Referenced by adi_netdev_init().

00046 {
00047     switch(netdev->if_layer_2.if_type) {
00048         case IF_TYPE_ETH:
00049             return eth_device_compose_name(netdev);
00050     }
00051 
00052     return 0;
00053 }

Here is the call graph for this function:

int adi_netdev_data_init void   ) 
 

Definition at line 143 of file adi_net.c.

References adi_netdev_list, and adi_netdev_list_lock.

Referenced by adi_netdrv_init().

00144 {       
00145     INIT_LIST_HEAD(&adi_netdev_list);
00146     spin_lock_init(&adi_netdev_list_lock);
00147 
00148     return 0;
00149 }

struct adi_netdev_s* adi_netdev_find_by_name char *  name  ) 
 

Definition at line 64 of file adi_net.c.

References adi_netdev_list, adi_netdev_list_lock, flags, and word_cmp().

Referenced by agnix_console_net_ifconfig().

00065 {
00066     struct adi_netdev_s *netdev;
00067     struct list_head *tmp;
00068     int found;
00069     u32 flags;
00070 
00071     spin_lock_irqsave(&adi_netdev_list_lock, flags);    
00072     
00073     found = 0;
00074     list_for_each(tmp, &adi_netdev_list) {
00075         netdev = list_entry(tmp, struct adi_netdev_s, list);
00076         
00077         if (!word_cmp(netdev->if_name, name, NETDEV_NAME_MAX_LEN)) {
00078             found = 1;
00079             break;
00080         }
00081     }
00082     
00083     spin_unlock_irqrestore(&adi_netdev_list_lock, flags);
00084     
00085     if (found)
00086         return netdev;
00087 
00088     return NULL;
00089 }

Here is the call graph for this function:

void adi_netdev_free struct adi_netdev_s *  netdev  ) 
 

Definition at line 138 of file adi_net.c.

References put_free_pages().

00139 {
00140     put_free_pages((u32)netdev, 0);
00141 }

Here is the call graph for this function:

int adi_netdev_init struct adi_netdev_s *  netdev  ) 
 

Definition at line 102 of file adi_net.c.

References adi_netdev_compose_name(), and eth_device_init().

Referenced by rtl_8029_probe().

00103 {
00104     adi_netdev_compose_name(netdev);
00105 
00106     switch(netdev->if_layer_2.if_type) {
00107         case IF_TYPE_ETH:
00108             return eth_device_init(netdev);
00109 
00110         case IF_TYPE_FDDI:
00111             break;
00112 
00113         case IF_TYPE_TR:
00114             break;
00115     }
00116 
00117     return 0;
00118 }

Here is the call graph for this function:

int adi_netdev_list_add struct adi_netdev_s *  netdev  ) 
 

Definition at line 91 of file adi_net.c.

References adi_netdev_list, adi_netdev_list_lock, and flags.

Referenced by adi_register_netdev().

00092 {
00093     u32 flags;
00094     
00095     spin_lock_irqsave(&adi_netdev_list_lock, flags);
00096     list_add(&netdev->list, &adi_netdev_list);
00097     spin_unlock_irqrestore(&adi_netdev_list_lock, flags);
00098     
00099     return 0;
00100 }

void adi_netdev_print_interfaces void   ) 
 

Definition at line 164 of file adi_net.c.

References adi_netdev_list, adi_netdev_list_lock, flags, and printf().

Referenced by agnix_console_net_ifconfig().

00165 {
00166     struct adi_netdev_s *netdev;
00167     struct list_head *tmp;
00168     const char *link_encaps;
00169     u32 flags;
00170 
00171     spin_lock_irqsave(&adi_netdev_list_lock, flags);    
00172     
00173     list_for_each(tmp, &adi_netdev_list) {
00174         netdev = list_entry(tmp, struct adi_netdev_s, list);
00175         
00176         if (netdev->if_layer_2.if_type == IF_TYPE_ETH)
00177             link_encaps = "Ethernet";
00178         else
00179         if (netdev->if_layer_2.if_type == IF_TYPE_TR)
00180             link_encaps = "Tokenring";
00181         else
00182         if (netdev->if_layer_2.if_type == IF_TYPE_FDDI)
00183             link_encaps = "FDDI";
00184         else
00185             link_encaps = "Unknown";
00186         
00187         printf("\n%s\t Link encapsulation:%s     HWaddr %02x:%02x:%02x:%02x:%02x:%02x\n",
00188         netdev->if_name, link_encaps, 
00189         netdev->if_layer_2.if_addr[0], netdev->if_layer_2.if_addr[1], netdev->if_layer_2.if_addr[2], 
00190         netdev->if_layer_2.if_addr[3], netdev->if_layer_2.if_addr[4], netdev->if_layer_2.if_addr[5]);
00191         
00192         printf("\t Inet address: %d.%d.%d.%d     MTU: %d\n", 
00193         netdev->if_layer_3.if_addr.address[0], netdev->if_layer_3.if_addr.address[1],
00194         netdev->if_layer_3.if_addr.address[2], netdev->if_layer_3.if_addr.address[3],
00195         netdev->if_layer_2.if_mtu); 
00196     }
00197     
00198     spin_unlock_irqrestore(&adi_netdev_list_lock, flags);
00199 }

Here is the call graph for this function:

int adi_netdev_set_id struct adi_netdev_s *  netdev  ) 
 

Definition at line 55 of file adi_net.c.

References net_devices_last_id.

Referenced by adi_register_netdev().

00056 {
00057     netdev->if_id = net_devices_last_id;
00058     
00059     net_devices_last_id++;
00060     
00061     return 0;
00062 }

int adi_netdev_set_name struct adi_netdev_s *  netdev,
char *  if_name
 

Definition at line 31 of file adi_net.c.

References memcpy(), and strlen().

00032 {
00033     int name_len;
00034     
00035     name_len = strlen(if_name);
00036 
00037     if (name_len < NETDEV_NAME_MAX_LEN)
00038         memcpy(netdev->if_name, if_name, name_len);
00039     else
00040         memcpy(netdev->if_name, if_name, NETDEV_NAME_MAX_LEN);
00041 
00042     return 0;
00043 }

Here is the call graph for this function:

int __init adi_netdrv_init void   ) 
 

Definition at line 151 of file adi_net.c.

References adi_netdev_data_init(), adi_netdrv_rtl_8029_init(), MOD_NAME, and printk().

Referenced by adi_drivers_init().

00152 {
00153     printk(MOD_NAME "Initializing network drivers\n");
00154 
00155     adi_netdev_data_init();
00156 
00157 #if CONFIG_DRIVERS_NET_RTL_8029
00158     adi_netdrv_rtl_8029_init();
00159 #endif
00160 
00161     return 0;
00162 }

Here is the call graph for this function:

int adi_register_netdev struct adi_netdev_s *  netdev  ) 
 

Definition at line 120 of file adi_net.c.

References adi_netdev_list_add(), adi_netdev_set_id(), and register_eth_device().

Referenced by rtl_8029_probe().

00121 {
00122     adi_netdev_set_id  (netdev);
00123     adi_netdev_list_add(netdev);
00124 
00125     switch (netdev->if_layer_2.if_type) {
00126         case IF_TYPE_ETH:
00127             return register_eth_device(netdev);
00128     }
00129 
00130     return 0;
00131 }

Here is the call graph for this function:


Variable Documentation

struct list_head adi_netdev_list
 

Definition at line 26 of file adi_net.c.

Referenced by adi_netdev_data_init(), adi_netdev_find_by_name(), adi_netdev_list_add(), adi_netdev_print_interfaces(), and arp_get_local_mac().

spinlock_t adi_netdev_list_lock
 

Definition at line 27 of file adi_net.c.

Referenced by adi_netdev_data_init(), adi_netdev_find_by_name(), adi_netdev_list_add(), adi_netdev_print_interfaces(), and arp_get_local_mac().

int net_devices_last_id = 0
 

Definition at line 29 of file adi_net.c.

Referenced by adi_netdev_set_id().

Dokumentacje wygenerowano programem Doxygen 1.4.2 dla projektu Agnix