static int maint_close(struct inode *ino, struct file *filep) { if (filep->private_data) { diva_os_free(0, filep->private_data); filep->private_data = NULL; } /* clear 'used' flag */ clear_bit(0, &opened); return (0); }
int diva_data_q_finit(diva_um_idi_data_queue_t * q) { int i; for (i = 0; i < q->segments; i++) { if (q->data[i]) { diva_os_free(0, q->data[i]); } q->data[i] = NULL; q->length[i] = 0; } q->read = q->write = q->count = q->segment_pending = 0; return (0); }
/* ------------------------------------------------------------------------- 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); }
/* Free local map (context should be freed before) if any */ void diva_free_dma_mapping (struct _diva_dma_map_entry* pmap) { if (pmap) { diva_os_free (0, pmap); } }