Subversion Repositories HelenOS

Rev

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

Rev 4055 Rev 4296
Line 99... Line 99...
99
 * Hash table operations for cases when we know that
99
 * Hash table operations for cases when we know that
100
 * there will be collisions between different keys.
100
 * there will be collisions between different keys.
101
 */
101
 */
102
static index_t irq_ht_hash(unative_t *key);
102
static index_t irq_ht_hash(unative_t *key);
103
static bool irq_ht_compare(unative_t *key, count_t keys, link_t *item);
103
static bool irq_ht_compare(unative_t *key, count_t keys, link_t *item);
-
 
104
static void irq_ht_remove(link_t *item);
104
 
105
 
105
static hash_table_operations_t irq_ht_ops = {
106
static hash_table_operations_t irq_ht_ops = {
106
    .hash = irq_ht_hash,
107
    .hash = irq_ht_hash,
107
    .compare = irq_ht_compare,
108
    .compare = irq_ht_compare,
108
    .remove_callback = NULL     /* not used */
109
    .remove_callback = irq_ht_remove,
109
};
110
};
110
 
111
 
111
/**
112
/**
112
 * Hash table operations for cases when we know that
113
 * Hash table operations for cases when we know that
113
 * there will be no collisions between different keys.
114
 * there will be no collisions between different keys.
114
 * However, there might be still collisions among
115
 * However, there might be still collisions among
115
 * elements with single key (sharing of one IRQ).
116
 * elements with single key (sharing of one IRQ).
116
 */
117
 */
117
static index_t irq_lin_hash(unative_t *key);
118
static index_t irq_lin_hash(unative_t *key);
118
static bool irq_lin_compare(unative_t *key, count_t keys, link_t *item);
119
static bool irq_lin_compare(unative_t *key, count_t keys, link_t *item);
-
 
120
static void irq_lin_remove(link_t *item);
119
 
121
 
120
static hash_table_operations_t irq_lin_ops = {
122
static hash_table_operations_t irq_lin_ops = {
121
    .hash = irq_lin_hash,
123
    .hash = irq_lin_hash,
122
    .compare = irq_lin_compare,
124
    .compare = irq_lin_compare,
123
    .remove_callback = NULL     /* not used */
125
    .remove_callback = irq_lin_remove,
124
};
126
};
125
 
127
 
126
/** Number of buckets in either of the hash tables. */
128
/** Number of buckets in either of the hash tables. */
127
static count_t buckets;
129
static count_t buckets;
128
 
130
 
Line 345... Line 347...
345
        spinlock_unlock(&irq->lock);
347
        spinlock_unlock(&irq->lock);
346
 
348
 
347
    return rv;
349
    return rv;
348
}
350
}
349
 
351
 
-
 
352
/** Unlock IRQ structure after hash_table_remove().
-
 
353
 *
-
 
354
 * @param lnk Link in the removed and locked IRQ structure.
-
 
355
 */
-
 
356
void irq_ht_remove(link_t *lnk)
-
 
357
{
-
 
358
    irq_t *irq __attribute__((unused))
-
 
359
        = hash_table_get_instance(lnk, irq_t, link);
-
 
360
    spinlock_unlock(&irq->lock);
-
 
361
}
-
 
362
 
350
/** Compute hash index for the key.
363
/** Compute hash index for the key.
351
 *
364
 *
352
 * This function computes hash index into
365
 * This function computes hash index into
353
 * the IRQ hash table for which there
366
 * the IRQ hash table for which there
354
 * are no collisions between different
367
 * are no collisions between different
Line 404... Line 417...
404
        spinlock_unlock(&irq->lock);
417
        spinlock_unlock(&irq->lock);
405
   
418
   
406
    return rv;
419
    return rv;
407
}
420
}
408
 
421
 
-
 
422
/** Unlock IRQ structure after hash_table_remove().
-
 
423
 *
-
 
424
 * @param lnk       Link in the removed and locked IRQ structure.
-
 
425
 */
-
 
426
void irq_lin_remove(link_t *lnk)
-
 
427
{
-
 
428
    irq_t *irq __attribute__((unused))
-
 
429
        = hash_table_get_instance(lnk, irq_t, link);
-
 
430
    spinlock_unlock(&irq->lock);
-
 
431
}
-
 
432
 
409
/** @}
433
/** @}
410
 */
434
 */