Subversion Repositories HelenOS

Rev

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

Rev 2227 Rev 3829
Line 234... Line 234...
234
};
234
};
235
 
235
 
236
 
236
 
237
int cuda_get_scancode(void)
237
int cuda_get_scancode(void)
238
{
238
{
-
 
239
    if (cuda) {
239
    uint8_t kind;
240
        uint8_t kind;
240
    uint8_t data[4];
241
        uint8_t data[4];
241
   
242
       
242
    receive_packet(&kind, 4, data);
243
        receive_packet(&kind, 4, data);
243
   
244
       
244
    if ((kind == PACKET_ADB) && (data[0] == 0x40) && (data[1] == 0x2c))
245
        if ((kind == PACKET_ADB) && (data[0] == 0x40) && (data[1] == 0x2c))
245
        return data[2];
246
            return data[2];
-
 
247
    }
246
   
248
   
247
    return -1;
249
    return -1;
248
}
250
}
249
 
251
 
250
static void cuda_irq_handler(irq_t *irq, void *arg, ...)
252
static void cuda_irq_handler(irq_t *irq, void *arg, ...)
Line 269... Line 271...
269
 
271
 
270
 
272
 
271
/** Initialize keyboard and service interrupts using kernel routine */
273
/** Initialize keyboard and service interrupts using kernel routine */
272
void cuda_grab(void)
274
void cuda_grab(void)
273
{
275
{
-
 
276
    if (cuda) {
274
    ipl_t ipl = interrupts_disable();
277
        ipl_t ipl = interrupts_disable();
275
    spinlock_lock(&cuda_irq.lock);
278
        spinlock_lock(&cuda_irq.lock);
276
    cuda_irq.notif_cfg.notify = false;
279
        cuda_irq.notif_cfg.notify = false;
277
    spinlock_unlock(&cuda_irq.lock);
280
        spinlock_unlock(&cuda_irq.lock);
278
    interrupts_restore(ipl);
281
        interrupts_restore(ipl);
279
}
282
    }
-
 
283
}
280
 
284
 
281
 
285
 
282
/** Resume the former interrupt vector */
286
/** Resume the former interrupt vector */
283
void cuda_release(void)
287
void cuda_release(void)
284
{
288
{
-
 
289
    if (cuda) {
285
    ipl_t ipl = interrupts_disable();
290
        ipl_t ipl = interrupts_disable();
286
    spinlock_lock(&cuda_irq.lock);
291
        spinlock_lock(&cuda_irq.lock);
287
    if (cuda_irq.notif_cfg.answerbox)
292
        if (cuda_irq.notif_cfg.answerbox)
288
        cuda_irq.notif_cfg.notify = true;
293
            cuda_irq.notif_cfg.notify = true;
289
    spinlock_unlock(&cuda_irq.unlock);
294
        spinlock_unlock(&cuda_irq.unlock);
290
    interrupts_restore(ipl);
295
        interrupts_restore(ipl);
291
}
296
    }
-
 
297
}
292
 
298
 
293
 
299
 
294
void cuda_init(devno_t devno, uintptr_t base, size_t size)
300
void cuda_init(devno_t devno, uintptr_t base, size_t size)
295
{
301
{
296
    cuda = (uint8_t *) hw_map(base, size); 
302
    cuda = (uint8_t *) hw_map(base, size);
Line 343... Line 349...
343
        "b 0\n"
349
        "b 0\n"
344
    );
350
    );
345
}
351
}
346
 
352
 
347
void arch_reboot(void) {
353
void arch_reboot(void) {
-
 
354
    if (cuda)
348
    send_packet(PACKET_CUDA, 1, CUDA_RESET);
355
        send_packet(PACKET_CUDA, 1, CUDA_RESET);
-
 
356
   
349
    asm volatile (
357
    asm volatile (
350
        "b 0\n"
358
        "b 0\n"
351
    );
359
    );
352
}
360
}
353
 
361