Subversion Repositories HelenOS

Rev

Rev 4307 | Rev 4332 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4307 Rev 4327
Line 32... Line 32...
32
 
32
 
33
/** @file
33
/** @file
34
 */
34
 */
35
 
35
 
36
#include <assert.h>
36
#include <assert.h>
-
 
37
#include <async.h>
37
#include <ddi.h>
38
#include <ddi.h>
38
#include <errno.h>
39
#include <errno.h>
39
#include <malloc.h>
40
#include <malloc.h>
40
//#include <stdio.h>
41
//#include <stdio.h>
41
#include <ipc/ipc.h>
42
#include <ipc/ipc.h>
Line 68... Line 69...
68
        .addr = NULL,
69
        .addr = NULL,
69
        .dstarg = 2
70
        .dstarg = 2
70
    },
71
    },
71
    {
72
    {
72
        .cmd = CMD_PREDICATE,
73
        .cmd = CMD_PREDICATE,
73
        .value = 2,
74
        .value = 1,
74
        .srcarg = 2
75
        .srcarg = 2
75
    },
76
    },
76
    {   .cmd = CMD_PIO_WRITE_8,
77
/*  {   .cmd = CMD_PIO_WRITE_8,
77
        .addr = NULL,
78
        .addr = NULL,
78
        .srcarg = 2
79
        .value = 0
79
    },
80
    },
80
    {
81
*/  {
81
        .cmd = CMD_ACCEPT
82
        .cmd = CMD_ACCEPT
82
    }
83
    }
83
};
84
};
84
 
85
 
85
static irq_code_t   dp8390_code = {
86
static irq_code_t   dp8390_code = {
Line 139... Line 140...
139
    return EOK;
140
    return EOK;
140
}
141
}
141
 
142
 
142
void irq_handler( ipc_callid_t iid, ipc_call_t * call )
143
void irq_handler( ipc_callid_t iid, ipc_call_t * call )
143
{
144
{
144
//  int irq;
-
 
145
    device_ref  device;
145
    device_ref  device;
146
    dpeth_t *   dep;
146
    dpeth_t *   dep;
147
    packet_t    received;
147
    packet_t    received;
148
    device_id_t device_id;
148
    device_id_t device_id;
149
    int         phone;
149
    int         phone;
150
 
150
 
-
 
151
//  async_serialize_start();
151
    device_id = IRQ_GET_DEVICE( call );
152
    device_id = IRQ_GET_DEVICE( call );
152
//  printf( "device %d - irq %x\n", device_id, IPC_GET_ISR( call ));
-
 
153
    rwlock_write_lock( & netif_globals.lock );
153
    rwlock_write_lock( & netif_globals.lock );
154
    if( find_device( device_id, & device ) != EOK ){
154
    if( find_device( device_id, & device ) != EOK ){
155
        rwlock_write_unlock( & netif_globals.lock );
155
        rwlock_write_unlock( & netif_globals.lock );
-
 
156
//      async_serialize_end()
156
        return;
157
        return;
157
    }
158
    }
158
    dep = ( dpeth_t * ) device->specific;
159
    dep = ( dpeth_t * ) device->specific;
159
//  printf( "dev %d, irq %x\n\n", device->device_id, IPC_GET_ISR( call ));
-
 
160
    if ( dep->de_mode != DEM_ENABLED){
160
    if ( dep->de_mode != DEM_ENABLED){
161
//      continue;
-
 
162
        rwlock_write_unlock( & netif_globals.lock );
161
        rwlock_write_unlock( & netif_globals.lock );
-
 
162
//      async_serialize_end()
163
        return;
163
        return;
164
    }
164
    }
165
    assert( dep->de_flags & DEF_ENABLED);
165
    assert( dep->de_flags & DEF_ENABLED);
166
//  irq= dep.de_irq;
166
    dep->de_int_pending= 0;
167
//  assert(irq >= 0 && irq < NR_IRQ_VECTORS);
167
    printf( "I%d -%d\n", device_id, IPC_GET_ISR( call ));
168
//      if ( dep->de_int_pending || 1)
168
/*  putchar( 'I' );
169
//      {
-
 
170
        dep->de_int_pending= 0;
169
    putchar( '0' + device_id );
171
        dp_check_ints( dep );
170
    putchar( '-' );
172
//      do_int(dep);
171
    putchar( '0' + IPC_GET_ISR( call ) / 100 );
173
/*      r= sys_irqenable(&dep->de_hook);
172
    putchar( '0' + ( IPC_GET_ISR( call ) % 100 ) / 10 );
174
        if (r != OK)
173
    putchar( '0' + IPC_GET_ISR( call ) % 10 );
175
        {
-
 
176
            panic("DP8390",
174
    putchar( '\n' );
177
            "unable enable interrupts", r);
175
*/  dp_check_ints( dep, IPC_GET_ISR( call ));
178
        }
-
 
179
*///    }
-
 
180
    if( dep->received_queue ){
176
    if( dep->received_queue ){
181
        received = dep->received_queue;
177
        received = dep->received_queue;
182
        phone = device->nil_phone;
178
        phone = device->nil_phone;
183
        dep->received_queue = NULL;
179
        dep->received_queue = NULL;
184
        rwlock_write_unlock( & netif_globals.lock );
180
        rwlock_write_unlock( & netif_globals.lock );
185
        nil_received_msg( phone, device_id, received, NULL );
181
        nil_received_msg( phone, device_id, received, NULL );
186
    }else{
182
    }else{
187
        rwlock_write_unlock( & netif_globals.lock );
183
        rwlock_write_unlock( & netif_globals.lock );
188
    }
184
    }
189
    ipc_answer_0( iid, EOK );
185
    ipc_answer_0( iid, EOK );
-
 
186
//      async_serialize_end()
190
}
187
}
191
 
188
 
192
int netif_probe_auto_message( void ){
189
int netif_probe_auto_message( void ){
193
    return ENOTSUP;
190
    return ENOTSUP;
194
}
191
}
Line 234... Line 231...
234
 
231
 
235
    device_ref  device;
232
    device_ref  device;
236
    dpeth_t *   dep;
233
    dpeth_t *   dep;
237
    packet_t    next;
234
    packet_t    next;
238
 
235
 
-
 
236
    ERROR_PROPAGATE( find_device( device_id, & device ));
-
 
237
    dep = ( dpeth_t * ) device->specific;
-
 
238
//  TODO remove debug dump:
239
    uint8_t *   data;
239
    uint8_t *   data;
240
    data = packet_get_data( packet );
240
    data = packet_get_data( packet );
241
    printf( "Sending 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( packet ), packet_get_data_length( packet ), 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 ] );
241
    printf( "Sending 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( packet ), packet_get_data_length( packet ), 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 ] );
242
 
242
 
243
    ERROR_PROPAGATE( find_device( device_id, & device ));
-
 
244
    dep = ( dpeth_t * ) device->specific;
-
 
245
    // process packet queue
243
    // process packet queue
246
    do{
244
    do{
247
        next = pq_detach( packet );
245
        next = pq_detach( packet );
248
        if( do_pwrite( dep, packet, FALSE ) != EBUSY ){
246
        if( do_pwrite( dep, packet, FALSE ) != EBUSY ){
249
            netif_pq_release( packet_get_id( packet ));
247
            netif_pq_release( packet_get_id( packet ));
250
        }
248
        }
251
        packet = next;
249
        packet = next;
252
    }while( packet );
250
    }while( packet );
-
 
251
    dp8390_dump( dep );
253
    return EOK;
252
    return EOK;
254
}
253
}
255
 
254
 
256
int netif_start_message( device_ref device ){
255
int netif_start_message( device_ref device ){
257
    ERROR_DECLARE;
256
    ERROR_DECLARE;