/* ------------------------------------------------------------------------- Recovery XLOG buffer from the card ------------------------------------------------------------------------- */ static void pri_cpu_trapped (PISDN_ADAPTER IoAdapter) { byte __iomem *base ; word *Xlog ; dword regs[4], TrapID, size ; Xdesc xlogDesc ; /* * check for trapped MIPS 46xx CPU, dump exception frame */ base = DIVA_OS_MEM_ATTACH_ADDRESS(IoAdapter); TrapID = READ_DWORD(&base[0x80]) ; if ( (TrapID == 0x99999999) || (TrapID == 0x99999901) ) { dump_trap_frame (IoAdapter, &base[0x90]) ; IoAdapter->trapped = 1 ; } regs[0] = READ_DWORD(&base[MP_PROTOCOL_OFFSET + 0x70]); regs[1] = READ_DWORD(&base[MP_PROTOCOL_OFFSET + 0x74]); regs[2] = READ_DWORD(&base[MP_PROTOCOL_OFFSET + 0x78]); regs[3] = READ_DWORD(&base[MP_PROTOCOL_OFFSET + 0x7c]); regs[0] &= IoAdapter->MemorySize - 1 ; if ( (regs[0] < IoAdapter->MemorySize - 1) ) { if ( !(Xlog = (word *)diva_os_malloc (0, MAX_XLOG_SIZE)) ) { DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, base); return ; } size = IoAdapter->MemorySize - regs[0] ; if ( size > MAX_XLOG_SIZE ) size = MAX_XLOG_SIZE ; memcpy_fromio(Xlog, &base[regs[0]], size) ; xlogDesc.buf = Xlog ; xlogDesc.cnt = READ_WORD(&base[regs[1] & (IoAdapter->MemorySize - 1)]) ; xlogDesc.out = READ_WORD(&base[regs[2] & (IoAdapter->MemorySize - 1)]) ; dump_xlog_buffer (IoAdapter, &xlogDesc) ; diva_os_free (0, Xlog) ; IoAdapter->trapped = 2 ; } DIVA_OS_MEM_DETACH_ADDRESS(IoAdapter, base); }
int diva_data_q_init(diva_um_idi_data_queue_t * q, int max_length, int max_segments) { int i; q->max_length = max_length; q->segments = max_segments; for (i = 0; i < q->segments; i++) { q->data[i] = NULL; q->length[i] = 0; } q->read = q->write = q->count = q->segment_pending = 0; for (i = 0; i < q->segments; i++) { if (!(q->data[i] = diva_os_malloc(0, q->max_length))) { diva_data_q_finit(q); return (-1); } } return (0); }
/* Create local mapping structure and init it to default state */ struct _diva_dma_map_entry* diva_alloc_dma_map (void* os_context, int nentries) { diva_dma_map_entry_t* pmap = diva_os_malloc(0, sizeof(*pmap)*(nentries+1)); if (pmap) memset (pmap, 0, sizeof(*pmap)*(nentries+1)); return pmap; }