alloc360.c
来自「RTEMS (Real-Time Executive for Multiproc」· C语言 代码 · 共 97 行
C
97 行
/* * MC68360 buffer descriptor allocation routines * * W. Eric Norum * Saskatchewan Accelerator Laboratory * University of Saskatchewan * Saskatoon, Saskatchewan, CANADA * eric@skatter.usask.ca * * $Id: alloc360.c,v 1.1 1997/04/09 14:05:41 joel Exp $ */#include <rtems.h>#include <bsp.h>#include <m68360.h>#include <rtems/error.h>/* * Allocation order: * - Dual-Port RAM section 1 * - Dual-Port RAM section 3 * - Dual-Port RAM section 0 * - Dual-Port RAM section 2 */static struct { char *base; unsigned int size; unsigned int used;} bdregions[] = { { (char *)&m360.dpram1[0], sizeof m360.dpram1, 0 }, { (char *)&m360.dpram3[0], sizeof m360.dpram3, 0 }, { (char *)&m360.dpram0[0], sizeof m360.dpram0, 0 }, { (char *)&m360.dpram2[0], sizeof m360.dpram2, 0 },};/* * Send a command to the CPM RISC processer */void *M360AllocateBufferDescriptors (int count){ unsigned int i; ISR_Level level; void *bdp = NULL; unsigned int want = count * sizeof(m360BufferDescriptor_t); /* * Running with interrupts disabled is usually considered bad * form, but this routine is probably being run as part of an * initialization sequence so the effect shouldn't be too severe. */ _ISR_Disable (level); for (i = 0 ; i < sizeof(bdregions) / sizeof(bdregions[0]) ; i++) { /* * Verify that the region exists. * This test is necessary since some chips have * less dual-port RAM. */ if (bdregions[i].used == 0) { volatile unsigned char *cp = bdregions[i].base; *cp = 0xAA; if (*cp != 0xAA) { bdregions[i].used = bdregions[i].size; continue; } *cp = 0x55; if (*cp != 0x55) { bdregions[i].used = bdregions[i].size; continue; } *cp = 0x0; } if (bdregions[i].size - bdregions[i].used >= want) { bdp = bdregions[i].base + bdregions[i].used; bdregions[i].used += want; break; } } _ISR_Enable (level); if (bdp == NULL) rtems_panic ("Can't allocate %d buffer descriptor(s).\n", count); return bdp;}void *M360AllocateRiscTimers (int count){ /* * Convert the count to the number of buffer descriptors * of equal or larger size. This ensures that all buffer * descriptors are allocated with appropriate alignment. */ return M360AllocateBufferDescriptors (((count * 4) + sizeof(m360BufferDescriptor_t) - 1) / sizeof(m360BufferDescriptor_t));}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?