static void hplj_restart(void) { if (GetAsicId() == AndrosAsic) *((volatile unsigned int *) 0xbfe900c0) = 0; if (GetAsicId() == HarmonyAsic) *((volatile unsigned int *) 0xbff62030) = 0; printk("Restart Failed ... halting instead\n"); while (1); }
int putDebugChar(char c) { if (GetAsicId() == HarmonyAsic) { while (!( ( (H_HPSR_STAT) & H_SER_STAT_TX_EMPTY) != 0)); H_HPSR_DATA_TX = (unsigned int) c; } else if (GetAsicId() == AndrosAsic) { while (((SERIAL_REG(HPSR_TX_STAT_OFFSET) & HPSR_TX_STAT_READY) == 0)) ; SERIAL_REG(HPSR_DATA_OFFSET) = (unsigned int) c; } return 1; }
char getDebugChar(void) { if (GetAsicId() == HarmonyAsic) { while (!(((H_HPSR_STAT) & H_SER_STAT_RX_EMPTY) == 0)); return H_HPSR_DATA_RX; } else if (GetAsicId() == AndrosAsic) { while ((SERIAL_REG(HPSR_RX_STAT_OFFSET) & HPSR_RX_DATA_AVAIL) == 0) ; return (SERIAL_REG(HPSR_DATA_OFFSET)); } }
const char* const GetAsicName(void) { static const char* const Names[] = { "Illegal", "Unknown", "Andros", "Harmony" }; return Names[(int)GetAsicId()]; }
static void __init hp_time_init(struct irqaction *irq) { timer_interrupt_service = irq->handler; if (GetAsicId() == AndrosAsic) { //*((volatile unsigned int*)0xbfe90000) = 0x2f; // set by bootloader to 0x20 // prescaler *((volatile unsigned int *) 0xbfe90040) = 0x21; // 20-res of 1kHz,1-int ack // control *((volatile unsigned int *) 0xbfe90048) = 0x09; // 09-reload val // reload *((volatile unsigned int *) 0xbfe90044) = 0x09; // 09-count val // count *((volatile unsigned int *) 0xbfe90040) = 0x2f; // 8-int enable,4-reload en,2-count down en,1-int-ack irq->handler = andros_timer_interrupt; irq->flags |= SA_INTERRUPT | SA_SHIRQ; printk("setting up timer in hp_time_init\n"); setup_irq(ASIC_IRQ_NUMBER, irq); // enable timer interrupt *((volatile unsigned int *) 0xbfea0000) = 0x20; } else if (GetAsicId() == HarmonyAsic) { *((volatile unsigned int *) 0xbff61000) = 99; // prescaler, 100Mz sys clk *((volatile unsigned int *) 0xbff61028) = 0x09; // reload reg *((volatile unsigned int *) 0xbff61024) = 0x09; // count reg *((volatile unsigned int *) 0xbff61020) = 0x0b; // 80-1khz res on timer, 2 reload en, 1 - count down en irq->handler = harmony_timer_interrupt; irq->flags |= SA_INTERRUPT | SA_SHIRQ; setup_irq(ASIC_IRQ_NUMBER, irq); *((volatile unsigned int *) 0xbff610a0) |= 1; // turn on timer0 } else if (GetAsicId() == UnknownAsic) printk("Unknown asic in hp_time_init()\n"); else printk("Unsupported asic in hp_time_init()\n"); }