示例#1
0
void
scsi_amic_start(int unit, boolean_t isread)
{
	dma_softc_t	*dmap = &scsi_amic_softc[unit];
	

	if (isread)
		*dmap->ctrl = MASK8(PDM_SCSI_DMA_CTRL_RUN);
	else
		*dmap->ctrl = MASK8(PDM_SCSI_DMA_CTRL_DIR)|MASK8(PDM_SCSI_DMA_CTRL_RUN);
	eieio();

	return;
}
示例#2
0
文件: ws.c 项目: vladpaiu/opensips
void inline ws_mask(char *buf, int len, unsigned int mask)
{
	char *p = buf;
	char *end = buf + len;

	/* xor first bits, until aligned */
	for (; p < end && (((unsigned long)p) % sizeof(unsigned long *)); p++,
			mask = ROTATE32(mask))
		*p ^= MASK8(mask);

	/* xor the big chunk, which is aligned */
	for (; p < end - (sizeof(int) - 1); p += sizeof(int))
		*((int *)p) ^= mask;

	/* the last chunk may not be processed */
	for (; p < end; p++, mask >>= 8)
		*p ^= MASK8(mask);
	//ws_print_masked(buf, len);
}
示例#3
0
void
scsi_amic_end(int unit, boolean_t isread)
{
	dma_softc_t	*dmap = &scsi_amic_softc[unit];


	/*
	 * Flush out the DMA, and kill it.
	 */

	eieio();
	if ((*dmap->ctrl & MASK8(PDM_SCSI_DMA_CTRL_DIR)) == 0) {
		*dmap->ctrl |= MASK8(PDM_SCSI_DMA_CTRL_FLUSH);
		do {
			eieio();
		} while (*dmap->ctrl & MASK8(PDM_SCSI_DMA_CTRL_FLUSH));
	}

	*dmap->ctrl &= ~MASK8(PDM_SCSI_DMA_CTRL_RUN); eieio();

	while (*dmap->ctrl & MASK8(PDM_SCSI_DMA_CTRL_RUN))
		eieio();

}
示例#4
0
void
scsi_amic_setup(int unit, vm_offset_t addr, vm_size_t data_in_count,
		boolean_t isread)
{
	dma_softc_t	*dmap = &scsi_amic_softc[unit];
	

	*dmap->ctrl |= MASK8(PDM_SCSI_DMA_CTRL_RESET); eieio();

	while (*dmap->ctrl & MASK8(PDM_SCSI_DMA_CTRL_RUN))
		eieio();

	if (addr & 7) 
		panic("SCSI DMA - non-aligned address");

	dmap->base[0] = (unsigned char)((addr >> 24) & 0xff);
	dmap->base[1] = (unsigned char)((addr >> 16) & 0xff);
	dmap->base[2] = (unsigned char)((addr >>  8) & 0xff);
	dmap->base[3] = (unsigned char)((addr) & 0xff);

	eieio();

	return;
}