Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4581 → Rev 4582

/branches/network/uspace/srv/net/netif/netif.c
37,7 → 37,7
 
#include <async.h>
#include <mem.h>
#include <rwlock.h>
#include <fibril_sync.h>
#include <stdio.h>
 
#include <ipc/ipc.h>
77,9 → 77,9
int netif_probe_req( int netif_phone, device_id_t device_id, int irq, int io ){
int result;
 
rwlock_write_lock( & netif_globals.lock );
fibril_rwlock_write_lock( & netif_globals.lock );
result = netif_probe_message( device_id, irq, io );
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
return result;
}
 
86,9 → 86,9
int netif_send_msg( int netif_phone, device_id_t device_id, packet_t packet, services_t sender ){
int result;
 
rwlock_write_lock( & netif_globals.lock );
fibril_rwlock_write_lock( & netif_globals.lock );
result = netif_send_message( device_id, packet, sender );
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
return result;
}
 
99,19 → 99,19
int result;
int phone;
 
rwlock_write_lock( & netif_globals.lock );
fibril_rwlock_write_lock( & netif_globals.lock );
if( ERROR_OCCURRED( find_device( device_id, & device ))){
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
return ERROR_CODE;
}
result = netif_start_message( device );
if( result > NETIF_NULL ){
phone = device->nil_phone;
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
nil_device_state_msg( phone, device_id, result );
return EOK;
}else{
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
}
return result;
}
123,19 → 123,19
int result;
int phone;
 
rwlock_write_lock( & netif_globals.lock );
fibril_rwlock_write_lock( & netif_globals.lock );
if( ERROR_OCCURRED( find_device( device_id, & device ))){
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
return ERROR_CODE;
}
result = netif_stop_message( device );
if( result > NETIF_NULL ){
phone = device->nil_phone;
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
nil_device_state_msg( phone, device_id, result );
return EOK;
}else{
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
}
return result;
}
146,12 → 146,12
measured_string_t translation;
 
if( !( address && data )) return EBADMEM;
rwlock_read_lock( & netif_globals.lock );
fibril_rwlock_read_lock( & netif_globals.lock );
if( ! ERROR_OCCURRED( netif_get_addr_message( device_id, & translation ))){
* address = measured_string_copy( & translation );
ERROR_CODE = ( * address ) ? EOK : ENOMEM;
}
rwlock_read_unlock( & netif_globals.lock );
fibril_rwlock_read_unlock( & netif_globals.lock );
* data = ( ** address ).value;
return ERROR_CODE;
}
198,16 → 198,16
case IPC_M_PHONE_HUNGUP:
return EOK;
case NET_NETIF_PROBE_AUTO:
rwlock_write_lock( & netif_globals.lock );
fibril_rwlock_write_lock( & netif_globals.lock );
ERROR_CODE = netif_probe_auto_message();
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
return ERROR_CODE;
case NET_NETIF_PROBE:
return netif_probe_req( 0, IPC_GET_DEVICE( call ), NETIF_GET_IRQ( call ), NETIF_GET_IO( call ));
case IPC_M_CONNECT_TO_ME:
rwlock_write_lock( & netif_globals.lock );
fibril_rwlock_write_lock( & netif_globals.lock );
ERROR_CODE = register_message( IPC_GET_DEVICE( call ), IPC_GET_PHONE( call ));
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
return ERROR_CODE;
case NET_NETIF_SEND:
case NET_NIL_SEND:
216,7 → 216,7
case NET_NETIF_START:
return netif_start_req( 0, IPC_GET_DEVICE( call ));
case NET_NETIF_STATS:
rwlock_read_lock( & netif_globals.lock );
fibril_rwlock_read_lock( & netif_globals.lock );
if( ! ERROR_OCCURRED( ipc_data_read_receive( & callid, & length ))){
if( length < sizeof( device_stats_t )){
ERROR_CODE = EOVERFLOW;
226,17 → 226,17
}
}
}
rwlock_read_unlock( & netif_globals.lock );
fibril_rwlock_read_unlock( & netif_globals.lock );
return ERROR_CODE;
case NET_NETIF_STOP:
return netif_stop_req( 0, IPC_GET_DEVICE( call ));
case NET_NETIF_GET_ADDR:
case NET_NIL_ADDR:
rwlock_read_lock( & netif_globals.lock );
fibril_rwlock_read_lock( & netif_globals.lock );
if( ! ERROR_OCCURRED( netif_get_addr_message( IPC_GET_DEVICE( call ), & address ))){
ERROR_CODE = measured_strings_reply( & address, 1 );
}
rwlock_read_unlock( & netif_globals.lock );
fibril_rwlock_read_unlock( & netif_globals.lock );
return ERROR_CODE;
}
return netif_specific_message( callid, call, answer, answer_count );
249,7 → 249,7
netif_globals.net_phone = connect_to_service( SERVICE_NETWORKING );
device_map_initialize( & netif_globals.device_map );
ERROR_PROPAGATE( pm_init());
rwlock_initialize( & netif_globals.lock );
fibril_rwlock_initialize( & netif_globals.lock );
if( ERROR_OCCURRED( netif_initialize())){
pm_destroy();
return ERROR_CODE;
/branches/network/uspace/srv/net/netif/dp8390/dp8390_module.c
145,14 → 145,14
int phone;
 
device_id = IRQ_GET_DEVICE( call );
rwlock_write_lock( & netif_globals.lock );
fibril_rwlock_write_lock( & netif_globals.lock );
if( find_device( device_id, & device ) != EOK ){
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
return;
}
dep = ( dpeth_t * ) device->specific;
if ( dep->de_mode != DEM_ENABLED){
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
return;
}
assert( dep->de_flags & DEF_ENABLED);
164,7 → 164,7
received = dep->received_queue;
phone = device->nil_phone;
dep->received_queue = NULL;
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
// TODO remove debug dump:
uint8_t * data;
data = packet_get_data( received );
171,7 → 171,7
printf( "Receiving packet:\n\tid\t= %d\n\tlength\t= %d\n\tdata\t= %.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX\n\t\t%.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX:%.2hhX %.2hhX %.2hhX %.2hhX\n", packet_get_id( received ), packet_get_data_length( received ), data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ], data[ 8 ], data[ 9 ], data[ 10 ], data[ 11 ], data[ 12 ], data[ 13 ], data[ 14 ], data[ 15 ], data[ 16 ], data[ 17 ], data[ 18 ], data[ 19 ], data[ 20 ], data[ 21 ], data[ 22 ], data[ 23 ], data[ 24 ], data[ 25 ], data[ 26 ], data[ 27 ], data[ 28 ], data[ 29 ], data[ 30 ], data[ 31 ], data[ 32 ], data[ 33 ], data[ 34 ], data[ 35 ], data[ 36 ], data[ 37 ], data[ 38 ], data[ 39 ], data[ 40 ], data[ 41 ], data[ 42 ], data[ 43 ], data[ 44 ], data[ 45 ], data[ 46 ], data[ 47 ], data[ 48 ], data[ 49 ], data[ 50 ], data[ 51 ], data[ 52 ], data[ 53 ], data[ 54 ], data[ 55 ], data[ 56 ], data[ 57 ], data[ 58 ], data[ 59 ] );
nil_received_msg( phone, device_id, received, NULL );
}else{
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
}
ipc_answer_0( iid, EOK );
}
/branches/network/uspace/srv/net/netif/lo/lo.c
37,6 → 37,7
#include <async.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
 
#include <ipc/ipc.h>
#include <ipc/services.h>
240,9 → 241,9
next = pq_next( next );
}while( next );
phone = device->nil_phone;
rwlock_write_unlock( & netif_globals.lock );
fibril_rwlock_write_unlock( & netif_globals.lock );
nil_received_msg( phone, device_id, packet, sender );
rwlock_write_lock( & netif_globals.lock );
fibril_rwlock_write_lock( & netif_globals.lock );
return EOK;
}
 
/branches/network/uspace/srv/net/netif/netif.h
40,7 → 40,7
#define __NET_NETIF_H__
 
#include <async.h>
#include <rwlock.h>
#include <fibril_sync.h>
 
#include <ipc/ipc.h>
 
98,7 → 98,7
device_map_t device_map;
/** Safety lock.
*/
rwlock_t lock;
fibril_rwlock_t lock;
};
 
/** Finds the device specific data.